Skip to content
See live

Select ​

A Select renders its listbox as a Material menu, and its field as a text field.

A closed select fieldA closed select field
An open select listbox with the chosen option markedAn open select listbox with the chosen option marked
php
use Filament\Forms\Components\Select;

Select::make('type')
    ->native(false)
    ->options([
        'a' => 'Option A',
        'b' => 'Option B',
    ]);

native(false) is required

Filament renders a native <select> by default, whose dropdown belongs to the browser and the operating system. No stylesheet can reach it. searchable() and multiple() imply Filament's own listbox, so they do not need it.

Behavior ​

The panel is the menu sheet: surface-container at elevation 2, holding 48dp rows. The chosen option is marked with the secondary container rather than a check, which is how Material marks a selected menu item. The placeholder and the "no results" message take the variant ink.

Searchable ​

A searchable select with its listbox open and a search field above the optionsA searchable select with its listbox open and a search field above the options
php
Select::make('type')
    ->searchable()
    ->options(['a' => 'Option A', 'b' => 'Option B']);

The search box at the head of the panel is divided from the options by a hairline.

Multiple ​

A multiple select with two chosen values shown as badgesA multiple select with two chosen values shown as badges
php
Select::make('types')
    ->multiple()
    ->options(['a' => 'Option A', 'b' => 'Option B']);

Chosen values render inside the field as outlined badges on the surface-container-low tone, each with a state layer on its remove button. TableSelect and ModalTableSelect render their chosen values the same way.

Filament compatibility ​

options(), searchable(), multiple(), preload(), relationship(), createOptionForm(), getOptionLabelFromRecordUsing(), disabled(), placeholder() and the rest behave as they do without the theme. The field takes the text input variants, since they are registered on every Field:

php
Select::make('type')->native(false)->filledField();