① CSV input
② Code generation
③ Runtime state
④ UI binding
01 Static
Type Dropdown, Values filled: "Off;On"
Values[] const array + TEnumDefinition : DynamicEnumDefinitionBase
Array is readonly, never mutated. No singleton needed.
DropdownRow reads Values once → ComboBox populated at first render.
02 Dynamic
Type Dropdown, Values = "dynamic" or empty
ManualDynamicEnumDefinitionBase, empty Initialize()
UpdateDropdownEnum → EnumRegistry.TryUpdateEnum (BeginUpdate / AddEntry / EndUpdate)
Subscribes to Instance.OnChange, rebuilds items with writingBack guard.
03 Inst.-Update
Type Dropdown, InstanceUpdate=1, pattern "Light %Lights%"
Rebuild{Name}Enum(int counts…) emitted in InstanceUpdateEnumRebuilder.g.cs
DynamicInstanceCoordinator calls rebuilder on count changes; entries re-expanded.
Same path as Dynamic — subscribes to Instance.OnChange.
04 MultiLevel
Type MultiLevelDropdown, dot-paths of equal depth
Same as Static — Values[] baked in; paths round-trip as one string.
Readonly. Selection stored as joined path; upper levels are UI-only.
MultiLevelDropdownRow splits label + entries on '.', builds N cascading ComboBoxes.
05 Update · T22
Type UpdateDropdown, DropdownID=-1, no Values needed
No enum. Parameter typed as ParamUpdateOptions in ParameterHierarchy.g.cs
Channel holds the full list; per-instance state persisted in scene JSON.
DirectChannelProvider reflects on Options + Value, re-splits on change.