В библиотеке SvelteKit UI Libs компоненты Dialog и Sheet представляют собой фундаментальные элементы для создания модальных окон и выдвижных панелей. Они позволяют структурировать пользовательский интерфейс, управлять состоянием отображения и обеспечивают удобное взаимодействие с пользователем.
Dialog — это компонент модального окна, который используется для отображения информации, подтверждений, форм или других интерактивных элементов поверх основного контента.
open (boolean) — управляет видимостью окна.on:open и on:close — события открытия и
закрытия модального окна.modal (boolean) — если true, блокирует
взаимодействие с остальной страницей до закрытия.trapFocus (boolean) — обеспечивает удержание фокуса
внутри диалогового окна.<script>
import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } from 'sveltekit-ui';
let isOpen = false;
function handleClose() {
isOpen = false;
}
</script>
<Dialog bind:open={isOpen} modal trapFocus>
<DialogTrigger>
<button>Открыть диалог</button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Подтверждение действия</DialogTitle>
<DialogDescription>Вы действительно хотите удалить элемент?</DialogDescription>
</DialogHeader>
<DialogFooter>
<button on:click={handleClose}>Отмена</button>
<button on:click={() => { /* логика удаления */ handleClose(); }}>Удалить</button>
</DialogFooter>
</DialogContent>
</Dialog>
Особенности Dialog:
Header,
Footer, Title, Description,
Content.Sheet — это компонент выдвижной панели, который чаще используется для боковых меню, фильтров или временных панелей с контентом. Sheet может появляться с любой стороны экрана и часто имеет адаптивное поведение.
side ("top" | "bottom" | "left" | "right")
— определяет сторону, с которой появляется панель.size ("sm" | "md" | "lg" | "full") —
размер выдвижной панели.open (boolean) — управляет состоянием панели.on:open и on:close — события изменения
состояния.<script>
import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription } from 'sveltekit-ui';
let sheetOpen = false;
</script>
<Sheet bind:open={sheetOpen} side="right" size="md">
<SheetTrigger>
<button>Открыть панель</button>
</SheetTrigger>
<SheetContent>
<SheetHeader>
<SheetTitle>Фильтры поиска</SheetTitle>
<SheetDescription>Настройте параметры для точного поиска</SheetDescription>
</SheetHeader>
<!-- Основной контент панели -->
<div>
<label>
Категория:
<select>
<option>Все</option>
<option>Продукты</option>
<option>Услуги</option>
</select>
</label>
</div>
<SheetFooter>
<button on:click={() => sheetOpen = false}>Закрыть</button>
<button on:click={() => { /* логика фильтра */ sheetOpen = false; }}>Применить</button>
</SheetFooter>
</SheetContent>
</Sheet>
Особенности Sheet:
| Характеристика | Dialog | Sheet |
|---|---|---|
| Использование | Модальные окна, подтверждения | Выдвижные панели, боковые меню |
| Анимация | Появление/скрытие с затемнением фона | Сдвиг с выбранной стороны |
| Фокус | Фокус удерживается внутри окна | Фокус может оставаться на странице |
| Размер | Фиксированный или настраиваемый | Мелкий, средний, большой, полный |
| Адаптивность | Хорошо для диалогов | Отлично для мобильных и десктопных |
bind:open.Эти компоненты являются ключевыми для построения современного интерфейса в SvelteKit, обеспечивая контроль за отображением, удобство взаимодействия и гибкость кастомизации.