Dropdown
<sf-dropdown> — поле выбора одного или нескольких значений из раскрывающегося
списка с поиском. Берите его, когда вариантов больше, чем удобно показать
радиокнопками или
флажками, или когда значения нужно
показать тегами.
Пример
Применение
Имя, подпись и пояснение
name — машинное имя отправляемого значения, label — видимая подпись поля;
они не дублируют друг друга. placeholder приглашает к выбору, но не заменяет
подпись. search-placeholder относится только к полю поиска внутри раскрытого
списка; без атрибута в нём слово на языке страницы — «Поиск», по-английски
«Search».
aria-label на <sf-dropdown> заменяет видимую подпись в доступном имени.
Задавайте его, только если адаптеру нужно отдельное имя, и с тем же
локализованным смыслом, что у label. В компактной панели инструментов подпись
можно скрыть только визуально — это решается композицией панели, а не другим
вызовом Dropdown.
Группы в списке
Пункт может сказать, откуда он: поле group в данных options или атрибут
group у sf-list-item. Идущие подряд пункты с одинаковым group рисуются
под одним заголовком, поэтому длинный список читается кусками, а название
места не повторяется в каждой строке.
Сетка пунктов
layout="grid" раскладывает пункты по нескольку в ряд, columns задаёт
сколько. Сетка выше нескольких рядов прокручивается; её высоту задаёт токен
--sf-dropdown--grid-height. Ячейка сетки высотой с поле того же размера,
что и список, а сетка за собственным триггером шириной ровно в свои колонки.
В сетке пункт показывает свою картинку, а
подпись остаётся именем для поиска и подсказкой при наведении. Так удобно
выбирать из сотни значков: колонкой их не долистать.
Свой триггер
Собственный триггер Dropdown — поле: рамка, текст выбранного, шеврон. Там, где
список нужен за другим управляющим элементом — за «+» в шапке группы, за
кнопкой со значком, — передайте его в slot="trigger". Компонент отдаёт такому
триггеру только нажатие, которое открывает список; как триггер выглядит, решает
тот, кто его передал. Список в этом случае берёт свою ширину, а не ширину
кнопки.
Значение и событие change
Свойство value возвращает выбранное машинное значение строкой. При
multiple значения перечислены через запятую, без выбора это пустая строка.
Присваивание value принимает строку или массив строк и выбирает пункты с
этими значениями. Кнопки очистки нет: из кода присвойте value = '';
событие change при этом не приходит. Присвоенный массив options
перерисовывает список и сохраняет выбранное значение, если такой вариант в
нём есть.
Выбор пункта и удаление тега отправляют всплывающее событие change. Его
event.detail:
| Поле | Содержимое |
|---|---|
value |
значение нажатого пункта; при удалении тега — пустая строка |
label |
подпись нажатого пункта; при удалении тега — пустая строка |
values |
массив всех выбранных значений после изменения |
item |
данные нажатого пункта; при удалении тега — null |
root |
элемент <sf-dropdown> |
multiple |
true, если разрешён выбор нескольких значений |
Полное значение после изменения дают event.detail.values и
event.target.value. Повторный выбор уже выбранного пункта change не
отправляет, а при multiple снимает выбор пункта и отправляет change.
Событие change на элементе отправляет только сам компонент: нативный
change своего поля поиска он останавливает. Слушатель на предке, например
на форме, слышит и change других полей, поэтому проверяет event.target.
Свойство selectedOptions возвращает данные выбранных пунктов — те же, что
приходят в event.detail.item. Свойство triggerText возвращает подписи
выбранных пунктов через запятую, как их показывает поле; при mode="tag"
оно пустое, потому что выбранное показывают теги.
const view = document.querySelector('sf-dropdown[name="view"]');
view.addEventListener('change', (event) => {
applyView(event.detail.values);
});
view.value = 'archived';
Доступность
- Каждому Dropdown нужно доступное имя: видимый
labelилиaria-label. Одинplaceholderимени не даёт. - Триггер — одна остановка
Tab. Стрелки открывают список и перемещают по пунктам,HomeиEnd— к первому и последнему,EnterиSpaceвыбирают,Escapeзакрывает список и возвращает фокус на триггер. - Поле поиска в списке сохраняет обычное поведение
HomeиEndпри редактировании текста. - Свой триггер в
slot="trigger"должен быть кнопкой с доступным именем: у кнопки со значком —aria-label.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-dropdown> |
| Назначение | Доступный элемент одиночного или множественного выбора с поиском по вариантам и необязательным выводом в портал. |
| Контракт | smart.dropdown, версия 1.2.0 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | описан: манифест и сценарий есть, продуктовой приёмки нет |
| Заготовка до прихода кода | нет: атрибут data-sf-skeleton не пишется; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
appearance—string, по умолчаниюoutlined, значения:filled,outlined. Вид выпадающего списка: поле с заливкой или с контуром.aria-label—string, по умолчанию пусто.columns—string, по умолчанию6. Сколько вариантов помещается в строку в раскладке-сетке. В списке игнорируется.disabled—boolean, по умолчаниюfalse.label—string, по умолчанию пусто.layout—string, по умолчаниюlist, значения:list,grid. Раскладка вариантов. В списке — один вариант в строке; в сетке — несколько в строке, и только так можно просмотреть сотню символов: их столбец никто не прокручивает до конца. В сетке вариант показывает изображение, а текст сохраняется как имя для поиска и подсказки при наведении.mode—string, по умолчаниюselect, значения:tag,select.multiple—boolean, по умолчаниюfalse. Разрешает несколько значений с сохранением порядка выбора при сериализации. В режиме тегов множественный выбор включён по умолчанию.name—string, по умолчанию пусто. Имя нативного поля формы для выбранного машинного значения.options—array, по умолчанию[]. Варианты, переданные данными вместо дочернихsf-list-item:[{text, value, type?, size?, icon?, selected?, disabled?, colorClass?, avatarImageUrl?, avatarTitle?, ariaLabel?, group?}]. Строка или число используется и как подпись, и как значение. Родитель, отрисовывающий этот выпадающий список из шаблона, передаёт варианты так, потому что захват дочерних элементов означает их удаление, и родитель уже не сможет вернуть изменённый список. Идущие подряд варианты с одинаковымgroupвыводятся под одним заголовком, чтобы длинный список показывал, откуда взят каждый его фрагмент, а не повторял это в каждой строке.placeholder—string, по умолчанию пусто.portal—boolean, по умолчаниюtrue. Привязывает всплывающее окно с помощью общего позиционирования Framework (SF.Position): нативный верхний слой, переворот, сдвиг и высота, ограниченная окном просмотра. Включено по умолчанию;portal="false"оставляет список в потоке.required—boolean, по умолчаниюfalse.search—boolean, по умолчаниюtrue.search-placeholder—string, по умолчанию пусто. Пусто — текст на языке страницы (по-английски «Search»).size—string, по умолчанию1, значения:1/2,1,2.template—string, по умолчаниюdefault.value—string, по умолчанию пусто. Выбранное машинное значение или список значений через запятую при множественном выборе.
Прежние имена:
| Имя | Прежнее имя | Состояние | Убирается после |
|---|---|---|---|
appearance |
type |
работает, отмечается в SF.deprecations |
2026-12-01 |
size="1/2" |
size="1/3" |
работает, отмечается в SF.deprecations |
2026-12-01 |
size="2" |
size="3" |
работает, отмечается в SF.deprecations |
2026-12-01 |
Методы
openDropdown()— возвращаетobject. Открывает список вариантов, если элемент управления не отключён и ещё не открыт. Возвращает элемент.closeDropdown()— возвращаетobject. Закрывает список вариантов и очищает текст поиска. Возвращает элемент.toggleDropdown()— возвращаетobject. Закрывает список, если он открыт, иначе открывает. Возвращает элемент.
События
Все события приходят на сам элемент и всплывают. Общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
change—detail:{ value: string, label?: string, values: array, item?: any, root?: any, multiple: boolean }. Выбор изменился; событие отправляется на элементе. Имя для привязки.sf-dropdown:change— устаревший псевдоним событияchange: приходит с тем жеdetail, подписывайтесь наchange.
Доступность
- Роль: кнопка (
button) со всплывающим списком (listbox). - Доступное имя: обязательно.
- Клавиши:
Tab,ArrowDown,ArrowUp,Home,End,Enter,Space,Escape. - Фокус: Переключатель — основная остановка Tab. Клавиши со стрелками открывают список и перемещают по доступным вариантам; Home и End перемещают в пределах списка; Enter или Space выбирают; Escape закрывает список и возвращает фокус на переключатель; Tab закрывает список и продолжает нативный обход. Поле поиска сохраняет нативное поведение Home и End при редактировании текста.
Минимальная разметка
<sf-dropdown label="Статус" name="status" placeholder="Выберите статус"><sf-list-item value="open" text="Открыт"></sf-list-item><sf-list-item value="done" text="Готов"></sf-list-item></sf-dropdown>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/dropdownsimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-dropdown
См. также
- Context Menu — меню действий у элемента.
- List Item — пункт списка вариантов.