# `select` — behaviour

*Open when a dropdown's options, its preselected value, or its per-option colour/icon do not come out as authored.*

Three source kinds, all configured under `dataSource`. Static and enum sources store the option id / enum value; an entity source stores `{ id, name }`.

`unknown_prop` judges only TOP-LEVEL keys, so anything invented *under* `dataSource` persists silently and is read by nothing. Two ways that bites:

- `labelField`, `valueField`, `colorField`, `colorFieldIcon`, `sortBy`, `groupBy` and the `slot*`/`customField` content are RELATION-only: on a static or enum source they save and nothing reads them. An enum's colours come from the enum values themselves.
- A static option is exactly `{ id, label, icon?, color? }`; `value`, `disabled`, `description`, a per-option `group` are dropped. `label` is a per-locale map with no id fallback, so an option resolving to no label renders as a blank, still-pickable row.

`colorFieldIcon` is a FIELD PATH on the target entity (typically an Icon relation whose `name` is the glyph), not a glyph name — a glyph name matches no field and paints nothing.

The preselected value is an envelope, and the unwrapped form is the quiet one:

```jsonc
{ "defaultValue": { "value": "draft" } }   // preselects
{ "defaultValue": "draft" }                // validates, selects nothing
```

The bare string also silences the unbound-select lint, which asks only whether `defaultValue` is present: the field ships blank, unreported. A `placeholder` is hint text, never a value.

Any `dataSource.selectFieldTemplate` strips the field chrome with it: `templateReplacesField` defaults true once a template is set, dropping border, chevron, clear ✕ and placeholder, so an empty field reads as static text. Set it false to keep normal chrome around the pill or glyph.
