Это те самые четыре атрибута токенов на <html>. От них пересчитывается вся страница, включая живые превью.
Примитивы
15
MultiSelect
Выбор нескольких значений. Каждый выбранный становится чипом внутри поля, а само поле — текстовый input, которым список и фильтруется: выбор и поиск происходят в одном месте, а не в двух. role="combobox" стоит на этом input, а не на коробке вокруг, — владельцем списка должно объявляться то, где находится курсор. Чипы — это Chip размера sm. Чего этот паттерн не даёт ни в одном из четырёх пакетов: скринридер на инпуте не зачитывает чипы обратно. У кнопки удаления каждого чипа есть собственное имя («Удалить Apple») — это доступная часть, и у паттерна multiselect в APG форма та же. Записано как есть, а не залатано через aria-describedby, который быстро устареет.
import { MultiSelect } from '@ilomee/aura-react';const OPTIONS = [ { value: 'apple', label: 'Apple' }, { value: 'pear', label: 'Pear' }, { value: 'cherry', label: 'Cherry' },];/** * Повторяет html-сниппет `multi-select`, с которым сравнивают все стеки, — поэтому подпись и чип * здесь его, а не подобранные покрасивее. Закрытый и без обёртки для раскладки: открытый список * портализуется в `document.body`, где его не видит ничто, читающее панель превью, а обёртка была * бы узлом, которого в сниппете нет. */export default function Demo() { return <MultiSelect label="Tags" options={OPTIONS} defaultValue={['apple']} />;}
Demo.vue
import { MultiSelect } from '@ilomee/aura-vue';
Demo.svelte
import { MultiSelect } from '@ilomee/aura-svelte';
Используется как aura-multi-select.
demo.component.ts
import { AuraMultiSelect } from '@ilomee/aura-angular';
Пропсы
У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
Имя
Тип
По умолчанию
Примечания
options
SelectOption[] | null
—
valueдвусторонний
string[]
—
defaultValue
string[]
[]
onValueChangeсобытие
(value: string[]) => void
—
hint
string
—
Постоянная подсказка под контролом, показывается всегда.
error
string
—
Что не так прямо сейчас. Ставит контролу aria-invalid и добавляет сообщение в его aria-describedby — после подсказки. Без живого региона: role="alert" объявляет себя при монтировании, поэтому форма с тремя ошибками, отрисованная на сервере, перебила бы читателя трижды ещё до первого поля.
searchable
boolean
true
Выключено — весь контрол превращается в ряд чипов: input остаётся read-only, поэтому клавиатура продолжает работать.
max
number
—
На пределе невыбранные опции получают aria-disabled, а не исчезают: список, который сжимается по мере выбора, не даёт увидеть, что вы пропустили.
removeLabel
string
'Remove {label}'
{label} заменяется на подпись опции. Именно шаблон: в разных языках существительное стоит в разных местах.
renderOption
(option, state) => ReactNode
—
Имя
Тип
По умолчанию
Примечания
modelValueдвусторонний
string[]
—
update:modelValueсобытие
(value: string[]) => void
—
hint
string
—
Постоянная подсказка под контролом, показывается всегда.
error
string
—
Что не так прямо сейчас. Ставит контролу aria-invalid и добавляет сообщение в его aria-describedby — после подсказки. Без живого региона: role="alert" объявляет себя при монтировании, поэтому форма с тремя ошибками, отрисованная на сервере, перебила бы читателя трижды ещё до первого поля.
Постоянная подсказка под контролом, показывается всегда.
error
string
—
Что не так прямо сейчас. Ставит контролу aria-invalid и добавляет сообщение в его aria-describedby — после подсказки. Без живого региона: role="alert" объявляет себя при монтировании, поэтому форма с тремя ошибками, отрисованная на сервере, перебила бы читателя трижды ещё до первого поля.
searchable
boolean
true
max
number
—
optionслот
Snippet<[SelectOption, AuraOptionRenderState]>
—
Имя
Тип
По умолчанию
Примечания
valueдвусторонний
string[]
—
valueChangeсобытие
(value: string[]) => void
—
hint
string
—
Постоянная подсказка под контролом, показывается всегда.
error
string
—
Что не так прямо сейчас. Ставит контролу aria-invalid и добавляет сообщение в его aria-describedby — после подсказки. Без живого региона: role="alert" объявляет себя при монтировании, поэтому форма с тремя ошибками, отрисованная на сервере, перебила бы читателя трижды ещё до первого поля.
searchable
boolean
true
max
number
—
optionTemplate
TemplateRef
—
Какие классы отдаёт
Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.
Класс
Роль
Примечания
.aura-combobox
база
Обязательный. Без него модификатор не работает.
.aura-combobox--multi
модификатор
.aura-combobox__input
элемент
.aura-chip
база
Обязательный. Без него модификатор не работает.
.aura-chip--sm
модификатор
.aura-listbox
база
Обязательный. Без него модификатор не работает.
Токены и правила
components.css
ряд чипов
calc((var(--control-h) - 26px) / 2 - 1px) — one row lands on --control-h, a second grows the box
чипы
.aura-chip--sm — 26px, the "editable tag lists" variant