Перейти до вмісту
tatetUI

MultiSelect

Мультивибір із чекбоксами, пошуком, діями «вибрати все / зняти все» та лічильником у тригері.

Мультивибір збирає найкраще з двох джерел: поведінку (пошук, «вибрати все», згортання вибору в «+N») успадковано з продуктової реалізації, позиціонування й ARIA-listbox — з канонічного UiSelect.

Приклад

Обрано: editor

API

Props

НазваТипТиповоОпис
modelValue*(string | number)[]Обрані значення. Використовуйте через `v-model`.
options*MultiSelectOption[]Варіанти вибору. Фільтрація за введеним текстом відбувається локально.
labelstring
placeholderstring"Оберіть"
sizeFieldSize"md"Висота поля. На мобільному кожен розмір вищий за десктопний.
maxDisplaynumber3Скільки обраних підписів показати у тригері, решта згортається в «+N».
errorstringТекст помилки. Сама його наявність вмикає стан помилки.
hintstringПідказка під полем. Ховається, коли показано помилку.
idstringСтабільний DOM id. `name` використовується лише для форми.
namestring
disabledbooleanfalse
searchablebooleantrueПоле пошуку всередині панелі. Для списків ≤5 пунктів не показується навіть із `true` — пошук там лише заважає.

Події

НазваPayloadОпис
update:modelValue[value: (string | number)[]]Масив обраних значень у порядку, заданому в `options`.

Слоти

НазваОпис
optionВласний рендер пункту списку.

Доступно через ref

НазваТипОпис
focus() => voidСтавить фокус на тригер.

Коли використовувати

Коли користувач обирає ДЕКІЛЬКА значень із відомого набору: ролі, теги, фільтри за статусами. Лічильник у тригері показує масштаб вибору, коли підписи вже не вміщаються.

Коли НЕ використовувати

Для одного значення потрібен Select — два контроли з однаковим виглядом, але різною семантикою, плутають.

Для 2–3 взаємновиключних варіантів беріть чекбокси просто в формі: вони показують усі варіанти одразу, без кліку.

Доступність

Тригер — aria-haspopup="listbox" з aria-expanded; панель — role="listbox" з aria-multiselectable="true", пункти — role="option" з aria-selected. Стрілки й Enter працюють по відфільтрованому списку, Escape закриває панель і повертає фокус на тригер, не «протікаючи» в модалку навколо (stopPropagation).

Помилка вмикається наявністю тексту, а не прапорцем: aria-invalid і aria-describedby (>error-id) ставляться лише коли є що сказати.