# `FrappeUIPhx.Components.OptionList`
[🔗](https://github.com/moacirbishopcamata/frappe_ui_phx/blob/v0.3.1/lib/frappe_ui_phx/components/option_list.ex#L1)

Base de Combobox e MultiSelect: gatilho + painel (Popover API) com busca e
opções que são `<input type=radio|checkbox>` **nativos** — então a seleção já é
valor de formulário e dispara o `phx-change` sem nenhum JS de negócio.

O hook colocated só filtra a lista pelo que foi digitado (estado de UI efêmero)
e fecha o painel na escolha única. Com `on_search`, a busca vira evento para o
servidor (lista grande/remota) e o filtro local é desligado.

# `normalize`

```elixir
@spec normalize(String.t() | {term(), term()}) :: {String.t(), String.t()}
```

Normaliza uma opção em `{rótulo, valor}` (ambos texto).

# `option_list`

## Attributes

* `id` (`:string`) (required)
* `name` (`:string`) (required)
* `options` (`:list`) (required) - strings ou {rótulo, valor}.
* `selected` (`:list`) - valores selecionados (strings). Defaults to `[]`.
* `multiple` (`:boolean`) - Defaults to `false`.
* `placeholder` (`:string`) - Defaults to `nil`.
* `search_placeholder` (`:string`) - Defaults to `nil`.
* `empty_text` (`:string`) - Defaults to `nil`.
* `on_search` (`:string`) - Defaults to `nil`.
* `errors` (`:list`) - Defaults to `[]`.
* `disabled` (`:boolean`) - Defaults to `false`.
* `form` (`:string`) - Defaults to `nil`.
* `required` (`:boolean`) - só vale na escolha única. Defaults to `false`.
* `class` (`:any`) - Defaults to `nil`.
* Global attributes are accepted.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
