НачалоОсновыКомпонентыТексты

Multiselect

Multiselect позволяет выбрать несколько пунктов из списка. Выбранные пункты видны как удаляемые чипы и все отправляются вместе с формой.

Стабильный Figma
ОбзорИспользованиеAPIДоступность
<tk-field label="Colors">
  <tk-multiselect name="colors" placeholder="Choose colors">
    <option value="red" selected>Red</option>
    <option value="green">Green</option>
    <option value="blue" selected>Blue</option>
    <option value="yellow">Yellow</option>
  </tk-multiselect>
</tk-field>

Поместите multiselect в Field, чтобы у него были подпись, подсказка и ошибка. Без Field задайте aria-label, иначе у поля не будет имени вовсе.

Анатомия

Часть Что это
tk-multiselect сам элемент; одна остановка Tab
поле содержит чипы, а с searchable ещё и строку поиска; растёт, когда чипы переносятся
чип один выбранный пункт, удаляемый Tag
кнопка «очистить всё» видна, когда что-то выбрано; убирает все чипы
шеврон переворачивается, пока меню открыто
меню список пунктов; ширина как у поля; не закрывается, пока человек выбирает
пункт одна строка с чекбоксом в начале

Варианты

<tk-multiselect variant="filter" filter-label="Status">
  <option value="open" selected>Open</option>
  <option value="review" selected>In review</option>
  <option value="closed">Closed</option>
</tk-multiselect>
  • field (по умолчанию): поле формы с чипами. Имя дайте через Field или aria-label.
  • filter: компактная кнопка для панели фильтров. Пока ничего не выбрано, на ней написано «Status», потом «Status (2)», и у неё появляется заливка. Выбор живёт в меню, чипов нет. filter-label обязателен: это и видимый текст, и доступное имя. Не помещайте фильтр в Field.

Поиск

<tk-multiselect searchable aria-label="Skills" placeholder="Search skills">
  <option>Accessibility</option>
  <option>Illustration</option>
  <option>Motion design</option>
  <option>Prototyping</option>
</tk-multiselect>

searchable добавляет текстовое поле, которое фильтрует меню по мере ввода, как в Combobox. Нужен для длинных списков. Загрузчик loadOptions включает его сам. Вариант filter поиска не поддерживает.

Размеры

<tk-multiselect aria-label="Days" placeholder="Choose days">
  <option>Monday</option>
  <option>Tuesday</option>
</tk-multiselect>
<tk-multiselect size="large" aria-label="Months" placeholder="Choose months">
  <option>January</option>
  <option>February</option>
</tk-multiselect>
size Мин. высота Padding-inline Текст Строка пункта
medium (по умолчанию) 32px space-8 Body Small (14/20) 32px
large 36px space-10 Body Medium (16/24) 36px

Когда в поле есть чипы, отступ слева сокращается до space-4, чтобы чипы выровнялись по краю. Чипы переносятся, и поле растёт; max-rows ограничивает его примерно этим числом строк, остальное прокручивается.

Состояния

<tk-multiselect aria-label="Regions" disabled>
  <option selected>Europe</option>
</tk-multiselect>
<tk-multiselect aria-label="Languages" readonly>
  <option selected>English</option>
  <option selected>Dutch</option>
</tk-multiselect>

При наведении поле не меняется. При фокусе с клавиатуры его рамка меняет цвет и становится толще; отдельной рамки фокуса снаружи нет. Когда фокус на чипе, рамку фокуса показывает чип. Вариант filter при наведении тонируется и при фокусе показывает рамку фокуса.

  • disabled: на поле нельзя перейти, меню не открывается, значения не отправляются. Чипы удалить нельзя.
  • readonly: чипы видны и отправляются. На поле можно перейти, но меню не открывается, чипы не удаляются, кнопка «очистить всё» и шеврон скрыты.
  • Ошибка: задайте error на Field. Сообщение появится ниже, а рамка станет красной, даже в фокусе. Вариант filter красным не становится.

Ограничение выбора

<tk-field label="Topics" helper="Choose up to 2">
  <tk-multiselect max="2" placeholder="Choose topics">
    <option>Design</option>
    <option>Research</option>
    <option>Writing</option>
  </tk-multiselect>
</tk-field>

max ограничивает число выбранных пунктов. Когда предел достигнут, остальные пункты отключаются, а меню пишет «You can choose up to 2.» Выбранные пункты по-прежнему можно убрать.

Пункты и данные

  • Пункты пишутся дочерними <option>, группы — через <optgroup>. selected задаёт начальный выбор.
  • data-description добавляет в меню короткую вторую строку; на чипе видно только название.
  • Пункты можно передать и через свойство options или загрузчик loadOptions, как в Combobox. С загрузчиком строка поиска есть всегда.
  • creatable добавляет строку Create "…", когда поиск ничего не нашёл; её выбор добавляет новый чип. Работает по правилам Combobox и останавливается на max.