Диалоговые окна (Dialog) в SvelteKit UI являются одним из ключевых компонентов для организации интерактивного взаимодействия с пользователем. Они позволяют создавать модальные окна, всплывающие панели и подтверждения действий, сохраняя при этом согласованность интерфейса и управление состоянием.
Dialog состоит из нескольких элементов:
Ключевые особенности:
let open = false) или через store для глобального
контроля.transition:fade, transition:slide).<script>
import { Dialog, DialogTrigger, DialogContent, DialogClose } from '@sveltekit/ui';
let open = false;
</script>
<Dialog bind:open>
<DialogTrigger>
<button>Открыть диалог</button>
</DialogTrigger>
<DialogContent>
<h2>Заголовок диалога</h2>
<p>Здесь размещается основной контент модального окна.</p>
<DialogClose>
<button>Закрыть</button>
</DialogClose>
</DialogContent>
</Dialog>
Особенности примера:
bind:open обеспечивает
двустороннее управление открытием и закрытием окна.DialogTrigger автоматически связывается с
DialogContent, что избавляет от необходимости вручную
писать обработчики событий.DialogClose можно использовать внутри контента, чтобы
закрыть окно программно.Диалог часто используется для подтверждения действий или ввода данных. В SvelteKit UI можно удобно интегрировать формы:
<Dialog bind:open>
<DialogTrigger>
<button>Добавить пользователя</button>
</DialogTrigger>
<DialogContent>
<h2>Новый пользователь</h2>
<form on:submit|preventDefault={handleSubmit}>
<input type="text" placeholder="Имя" bind:value={name} required />
<input type="email" placeholder="Email" bind:value={email} required />
<button type="submit">Сохранить</button>
<DialogClose>
<button>Отмена</button>
</DialogClose>
</form>
</DialogContent>
</Dialog>
<script>
let name = '';
let email = '';
function handleSubmit() {
console.log({ name, email });
open = false; // закрытие диалога после отправки формы
}
</script>
Особенности:
on:submit|preventDefault предотвращает
перезагрузку страницы.DialogClose.В SvelteKit UI поддерживается открытие нескольких модальных окон одновременно. Для этого создаются независимые состояния:
<Dialog bind:open={firstOpen}>
<DialogTrigger>
<button>Первый диалог</button>
</DialogTrigger>
<DialogContent>Контент первого диалога</DialogContent>
</Dialog>
<Dialog bind:open={secondOpen}>
<DialogTrigger>
<button>Второй диалог</button>
</DialogTrigger>
<DialogContent>Контент второго диалога</DialogContent>
</Dialog>
Советы по управлению:
Диалоги можно кастомизировать с помощью Svelte-переходов и классов:
<DialogContent transition:slide={{ duration: 200 }} class="bg-white p-6 rounded-lg shadow-lg">
<h2 class="text-lg font-bold mb-4">Заголовок</h2>
<p>Контент с анимацией появления.</p>
</DialogContent>
Возможности:
transition:fade, transition:slide,
transition:scale – базовые анимации открытия/закрытия.SvelteKit UI библиотеки обеспечивают встроенную поддержку ARIA-атрибутов:
role="dialog" и aria-modal="true" для
корректного восприятия экранными читалками.Escape) без
дополнительного кода.Диалоги могут загружать контент динамически, например через API-запросы:
{#if open}
<DialogContent>
{#await fetchUserData() then data}
<p>Имя: {data.name}</p>
<p>Email: {data.email}</p>
{:catch error}
<p>Ошибка загрузки данных</p>
{/await}
</DialogContent>
{/if}
Преимущества:
Диалоги SvelteKit UI объединяют гибкость, простоту интеграции и поддержку доступности, что делает их незаменимым инструментом для современных интерфейсов.