## native_select (`poetry_native_select`)

A styled wrapper around the real native select control.

Class: Poetry::Ui::NativeSelect::Component - BEM block `poetry-ui-native_select`.
- `described_by:` (string) - Space-separated hint/error ids wired to the SELECT itself - a raw aria-describedby in html_attributes would land on the wrapper div, unassociated for assistive technology.
- `disabled:` (boolean) - default false - Disables the native select; the wrapper dims the whole pair.
- `id:` (string) - The select's dom id - the seam a Label's for_id: points at.
- `invalid:` (boolean) - default false - Marks the select invalid (aria-invalid on the element itself).
- `label:` (string) - The accessible name for label-less placements (a visible Label paired via id:/for_id: is still the default pattern).
- `name:` (string) - The submitted field name, forwarded to the native select.
- `size:` (symbol) - one of default|sm, default "default" - The control size axis; :sm suits dense toolbars and table rows.
- PART `native-select-wrapper` - Relative shell around the select and the chevron - dims the pair when the select is disabled | states: data-size=default|sm (always - the resolved size)
- PART `native-select` - The real <select> - appearance-none (the chevron replaces the native arrow); platform picker and form submission stay native | states: data-size=default|sm (always - the resolved size (mirrors the wrapper))
- PART `native-select-icon` - The decorative chevron wrapper - absolutely pinned, aria-hidden
- PART `native-select-option` - An <option> from the options: fast path (or poetry_native_select_option) - Canvas system colors keep the native dropdown legible
In blocks: `data-index` - for a screen, start from the block (MCP compose/describe_block, or `bin/rails g poetry:block`), not from scratch.
- RULE: This is a REAL <select> - use it for plain picking; the JS Select is for styled options.
- RULE: Pair it with a Label (for_id: its id) or a Field - a bare select has no accessible name.
- RULE: The fast path is options: [[label, value], ...] + selected:; a content block overrides it.
