MultiSelect — это компонент для выбора нескольких значений из предопределённого списка. Он представляет собой комбинированный элемент интерфейса, сочетающий текстовое поле и раскрывающийся список опций с чекбоксами. Используется для управления множественными значениями в формах, фильтрах и интерфейсах с большим объёмом данных.
Carbon Components Svelte распространяется через npm. Для использования MultiSelect необходимо установить пакет:
npm install carbon-components-svelte
Импорт MultiSelect выполняется следующим образом:
import MultiSelect from 'carbon-components-svelte/src/MultiSelect/MultiSelect.svelte';
Для корректного отображения компонентов требуется подключение стилей Carbon:
import 'carbon-components-svelte/css/g10.css'; // или g90/g100 по теме
id и
text:const items = [
{ id: 'option-1', text: 'Option 1' },
{ id: 'option-2', text: 'Option 2' },
{ id: 'option-3', text: 'Option 3' }
];
let selectedItems = [];
<MultiSelect
{items}
bind:selectedItems
label="Выберите опции"
/>
<MultiSelect placeholder="Начните ввод..." />
<MultiSelect {items} disabled />
<MultiSelect
{items}
titleText="Выбор опций"
helperText="Вы можете выбрать несколько значений"
/>
MultiSelect поддерживает несколько событий для управления состоянием и взаимодействия:
<MultiSelect
{items}
bind:selectedItems
on:change={(event) => console.log(event.detail)}
/>
<MultiSelect
{items}
on:input={(event) => filterItems(event.detail)}
/>
MultiSelect позволяет динамически фильтровать элементы на основе
ввода пользователя. Обычно реализуется через реактивное обновление
массива items:
$: filteredItems = items.filter(item =>
item.text.toLowerCase().includes(searchValue.toLowerCase())
);
И передача filteredItems в компонент:
<MultiSelect
items={filteredItems}
bind:selectedItems
placeholder="Поиск..."
/>
<MultiSelect
items={items}
itemToString={(item) => item ? item.text.toUpperCase() : ''}
/>
<MultiSelect
{items}
invalid={selectedItems.length === 0}
invalidText="Необходимо выбрать хотя бы один элемент"
/>
<MultiSelect {items} typeAhead />
MultiSelect часто используется вместе с формами Svelte. Пример синхронизации с объектом формы:
let formData = {
options: []
};
<MultiSelect
items={items}
bind:selectedItems={formData.options}
label="Выберите опции"
/>
Далее formData.options можно отправлять на сервер или
использовать для фильтрации данных.
Для больших массивов элементов рекомендуется:
typeAhead) вместо
отображения всего списка сразу.slice.$: visibleItems = filteredItems.slice(0, 50);
Компонент поддерживает все необходимые ARIA-атрибуты для улучшенной доступности:
aria-label и aria-labelledby для описания
поля.aria-multiselectable автоматически выставляется.Эта структура MultiSelect в Carbon Components Svelte обеспечивает гибкость и мощь для создания сложных интерфейсов с множественным выбором, при этом сохраняя единый стиль Carbon и поддержку всех стандартов доступности.