Компонент Dropdown Menu предназначен для создания интерактивных выпадающих списков с набором опций. В SvelteKit UI его реализация строится на принципах реактивности Svelte и модульности компонентов. Основные элементы Dropdown Menu включают:
<script>
import { Dropdown, DropdownTrigger, DropdownMenu, DropdownItem, DropdownLabel, DropdownSeparator } from 'sveltekit-ui';
</script>
<Dropdown>
<DropdownTrigger>
Открыть меню
</DropdownTrigger>
<DropdownMenu>
<DropdownLabel>Основные действия</DropdownLabel>
<DropdownItem>Создать</DropdownItem>
<DropdownItem>Редактировать</DropdownItem>
<DropdownSeparator />
<DropdownItem>Удалить</DropdownItem>
</DropdownMenu>
</Dropdown>
Внутренняя структура компонента основана на вложенности:
Компонент поддерживает два режима управления состоянием:
open и событие on:change.<script>
let isOpen = false;
function toggleMenu() {
isOpen = !isOpen;
}
</script>
<Dropdown {isOpen} on:change={(e) => isOpen = e.detail}>
<DropdownTrigger on:click={toggleMenu}>Меню</DropdownTrigger>
<DropdownMenu>
<DropdownItem>Пункт 1</DropdownItem>
<DropdownItem>Пункт 2</DropdownItem>
</DropdownMenu>
</Dropdown>
Dropdown Menu генерирует события, которые позволяют интегрировать его с логикой приложения:
on:select – вызывается при выборе элемента. Передаёт
выбранное значение.on:open / on:close – события открытия и
закрытия меню.on:change – обновление состояния открытости.<Dropdown on:select={(e) => console.log('Выбран:', e.detail)}>
<DropdownTrigger>Меню</DropdownTrigger>
<DropdownMenu>
<DropdownItem value="create">Создать</DropdownItem>
<DropdownItem value="edit">Редактировать</DropdownItem>
</DropdownMenu>
</Dropdown>
SvelteKit UI предоставляет гибкую систему кастомизации через пропсы и слоты:
small,
medium, large).bottom-start, bottom-end,
top-start, top-end).<Dropdown placement="bottom-end" class="custom-dropdown">
<DropdownTrigger>Меню</DropdownTrigger>
<DropdownMenu class="menu-style">
<DropdownItem>Опция 1</DropdownItem>
<DropdownItem>Опция 2</DropdownItem>
</DropdownMenu>
</Dropdown>
Компонент полностью поддерживает клавиатурные события для доступности:
ArrowUp / ArrowDown – перемещение по
элементам.Enter / Space – выбор элемента.Escape – закрытие меню.Эта функциональность реализована по умолчанию, что делает Dropdown Menu доступным без дополнительных библиотек.
Dropdown Menu можно использовать с динамическими списками. Например, при загрузке данных с сервера:
<script>
import { onMount } from 'svelte';
let items = [];
onMount(async () => {
const response = await fetch('/api/options');
items = await response.json();
});
</script>
<Dropdown>
<DropdownTrigger>Меню</DropdownTrigger>
<DropdownMenu>
{#each items as item}
<DropdownItem value={item.id}>{item.name}</DropdownItem>
{/each}
</DropdownMenu>
</Dropdown>
Dropdown Menu легко интегрируется с состоянием SvelteKit и формами. Например, с использованием реактивной переменной:
<script>
let selected = '';
</script>
<Dropdown on:select={(e) => selected = e.detail}>
<DropdownTrigger>{selected || 'Выберите опцию'}</DropdownTrigger>
<DropdownMenu>
<DropdownItem value="option1">Опция 1</DropdownItem>
<DropdownItem value="option2">Опция 2</DropdownItem>
</DropdownMenu>
</Dropdown>
<p>Выбрано: {selected}</p>
Эта интеграция позволяет использовать Dropdown Menu как часть сложных интерфейсов с фильтрацией, сортировкой или управлением состоянием.
<Dropdown>
<DropdownTrigger>Меню</DropdownTrigger>
<DropdownMenu>
<DropdownItem value="open">Открыть</DropdownItem>
<DropdownItem value="save" disabled>Сохранить</DropdownItem>
<DropdownItem value="delete">Удалить</DropdownItem>
</DropdownMenu>
</Dropdown>
Использование этих возможностей делает Dropdown Menu в SvelteKit UI мощным инструментом для построения интерактивных и адаптивных пользовательских интерфейсов.