Toggle — это базовый компонент пользовательского интерфейса, позволяющий реализовать двоичное состояние: включено/выключено, активировано/деактивировано. В SvelteKit UI библиотеках он используется как интерактивный элемент управления, заменяющий стандартные HTML-чекбоксы с расширенной кастомизацией и управлением состоянием.
Типичная структура Toggle включает:
<script>
import { Toggle } from 'sveltekit-ui';
let isActive = false;
</script>
<Toggle bind:checked={isActive} disabled={false}>
Активировать режим
</Toggle>
Ключевые свойства:
bind:checked — двусторонняя привязка состояния
компонента к переменной.disabled — блокировка взаимодействия.size — размер переключателя (sm,
md, lg).color — цвет активного состояния (может принимать
CSS-переменные или готовые темы библиотеки).События Toggle:
on:change — срабатывает при изменении состояния.on:focus / on:blur — для отслеживания
фокуса компонента.on:keydown — позволяет интегрировать управление с
клавиатуры.Пример использования события change:
<Toggle bind:checked={isActive} on:change={(e) => console.log(e.detail)}>
Включить уведомления
</Toggle>
e.detail возвращает новое состояние переключателя.
Toggle Group объединяет несколько Toggle в логически связанную группу, поддерживая как множественный выбор, так и выбор одной опции. Это аналог радио-кнопок и чекбоксов, но с единым управлением состояния и консистентным визуальным стилем.
<script>
import { ToggleGroup, Toggle } from 'sveltekit-ui';
let selectedValues = [];
</script>
<ToggleGroup bind:value={selectedValues} type="multiple">
<Toggle value="apple">Яблоко</Toggle>
<Toggle value="banana">Банан</Toggle>
<Toggle value="orange">Апельсин</Toggle>
</ToggleGroup>
Ключевые свойства ToggleGroup:
bind:value — массив выбранных значений (для
type="multiple") или строка/число (для
type="single").type — "single" для одиночного выбора или
"multiple" для множественного.orientation — "horizontal" или
"vertical" для управления направлением расположения.disabled — глобальная блокировка всех Toggle внутри
группы.size и color наследуются от Toggle, но
могут переопределяться на уровне группы.События ToggleGroup:
on:change — возвращает массив выбранных значений для
множественного выбора или значение для одиночного.on:focus / on:blur — срабатывают при
входе/выходе фокуса из всей группы.Пример для одиночного выбора:
<script>
let selected = "banana";
</script>
<ToggleGroup bind:value={selected} type="single" orientation="horizontal">
<Toggle value="apple">Яблоко</Toggle>
<Toggle value="banana">Банан</Toggle>
<Toggle value="orange">Апельсин</Toggle>
</ToggleGroup>
<p>Выбрано: {selected}</p>
SvelteKit UI Toggle и ToggleGroup полностью интегрируются с реактивной системой Svelte. Это позволяет:
<Toggle bind:checked={isActive} disabled={selectedValues.length === 0}>
Включить режим
</Toggle>
Toggle и ToggleGroup поддерживают:
CSS-переменные для цветов:
--toggle-active-bg: #4caf50;
--toggle-inactive-bg: #ccc;Tailwind-классы (если библиотека интегрирована с Tailwind):
<Toggle class="bg-gray-200 rounded-full p-1" bind:checked={isActive}/>Иконки и кастомные лейблы:
<Toggle bind:checked={isActive}>
{#if isActive}
<svg>...</svg>
{:else}
Вкл/Выкл
{/if}
</Toggle>Анимации состояния через transition
или CSS:
<Toggle bind:checked={isActive} class="transition duration-300 ease-in-out"/>ToggleGroup особенно полезен для создания компактных интерфейсов управления, где несколько связанных опций должны сохранять согласованное состояние.
Использовать bind:value вместо ручного слушателя
on:change для уменьшения количества кода.
Разделять группы по логике — каждая ToggleGroup отвечает за отдельный блок опций.
Для больших форм с динамическими опциями рекомендуется создавать
массив объектов и рендерить Toggle через {#each}:
<ToggleGroup bind:value={selectedValues} type="multiple">
{#each options as option}
<Toggle value={option.value}>{option.label}</Toggle>
{/each}
</ToggleGroup>Следить за доступностью: использовать aria-checked,
aria-disabled автоматически или при кастомной
реализации.
Этот подход обеспечивает мощный и гибкий инструмент для создания интерактивных интерфейсов с полной реактивностью и визуальной консистентностью в SvelteKit.