Radio Group представляет собой компонент интерфейса, позволяющий пользователю выбирать одно значение из нескольких предложенных. В SvelteKit UI libs он реализован с учетом реактивности Svelte и удобства интеграции с формами. Основные принципы работы с Radio Group включают управление состоянием, доступность и кастомизацию визуального представления.
В большинстве библиотек SvelteKit Radio Group состоит из двух ключевых элементов:
Пример базового синтаксиса:
<script>
import { RadioGroup, RadioItem } from 'sveltekit-ui';
let selectedOption = 'option1';
</script>
<RadioGroup bind:value={selectedOption}>
<RadioItem value="option1">Вариант 1</RadioItem>
<RadioItem value="option2">Вариант 2</RadioItem>
<RadioItem value="option3">Вариант 3</RadioItem>
</RadioGroup>
<p>Выбран: {selectedOption}</p>
Ключевой момент: использование
bind:value позволяет автоматически синхронизировать
выбранное значение с переменной в скрипте, обеспечивая реактивное
обновление интерфейса.
Radio Group в SvelteKit полностью поддерживает реактивную модель. При изменении выбранного элемента все связанные подписки автоматически обновляются. Это делает компонент удобным для интеграции с формами и сложными интерфейсами, где выбор одного элемента влияет на другие части страницы.
<script>
import { RadioGroup, RadioItem } from 'sveltekit-ui';
let paymentMethod = 'card';
</script>
<RadioGroup bind:value={paymentMethod}>
<RadioItem value="card">Карта</RadioItem>
<RadioItem value="paypal">PayPal</RadioItem>
<RadioItem value="crypto">Криптовалюта</RadioItem>
</RadioGroup>
{#if paymentMethod === 'card'}
<p>Введите данные карты</p>
{/if}
Особенность: реактивная проверка состояния позволяет динамически изменять интерфейс без дополнительного кода для слушателей событий.
SvelteKit UI libs ориентированы на соблюдение стандартов WAI-ARIA. Radio Group автоматически поддерживает:
Tab для перехода между
группами, стрелки для выбора внутри группы).role="radiogroup" и role="radio"
для экранных читалок.aria-checked.Пример с явным указанием ARIA:
<RadioGroup bind:value={theme} aria-label="Выберите тему">
<RadioItem value="light" aria-label="Светлая тема">Светлая</RadioItem>
<RadioItem value="dark" aria-label="Темная тема">Темная</RadioItem>
</RadioGroup>
Важно: правильная настройка ARIA атрибутов делает компонент доступным для всех пользователей, включая людей с ограничениями зрения.
Компоненты Radio Group и Radio Item в SvelteKit UI поддерживают стилизацию через:
Пример кастомного слота для RadioItem:
<RadioGroup bind:value={color}>
<RadioItem value="red">
<span class="custom-radio red"></span> Красный
</RadioItem>
<RadioItem value="blue">
<span class="custom-radio blue"></span> Синий
</RadioItem>
</RadioGroup>
<style>
.custom-radio {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 50%;
border: 2px solid #000;
margin-right: 8px;
}
.red { background-color: #f00; }
.blue { background-color: #00f; }
</style>
Вывод: слоты позволяют полностью контролировать внешний вид, сохраняя при этом реактивность и функциональность компонента.
Radio Group поддерживает вложенные группы, что удобно для многоуровневых форм. Можно создать главный контейнер и несколько подгрупп с разными наборами опций:
<RadioGroup bind:value={deliveryMethod}>
<RadioItem value="pickup">Самовывоз</RadioItem>
<RadioItem value="courier">Доставка курьером</RadioItem>
<RadioGroup bind:value={courierOption}>
<RadioItem value="express">Экспресс</RadioItem>
<RadioItem value="standard">Стандартная</RadioItem>
</RadioGroup>
</RadioGroup>
Особенность: вложенные группы могут управлять своими локальными состояниями независимо, сохраняя общую реактивность верхнего уровня.
Radio Group легко интегрируется с нативными HTML-формами.
Использование атрибута name позволяет отправлять выбранное
значение на сервер:
<form on:submit|preventDefault={handleSubmit}>
<RadioGroup name="gender" bind:value={gender}>
<RadioItem value="male">Мужской</RadioItem>
<RadioItem value="female">Женский</RadioItem>
</RadioGroup>
<button type="submit">Отправить</button>
</form>
<script>
let gender = '';
function handleSubmit() {
console.log('Выбран пол:', gender);
}
</script>
Преимущество: простая интеграция с формами позволяет использовать Radio Group без дополнительного обвеса для валидации или отправки данных.
SvelteKit UI Radio Group совместим с stores и
actions Svelte. Это позволяет:
Пример с writable store:
<script>
import { writable } from 'svelte/store';
import { RadioGroup, RadioItem } from 'sveltekit-ui';
const themeStore = writable('light');
</script>
<RadioGroup bind:value={$themeStore}>
<RadioItem value="light">Светлая</RadioItem>
<RadioItem value="dark">Темная</RadioItem>
</RadioGroup>
Преимущество: централизованное состояние позволяет использовать один источник правды для всей формы или приложения.
Эта структура и возможности Radio Group делают его универсальным инструментом для построения интерфейсов с выбором одной опции, обеспечивая доступность, реактивность и гибкость кастомизации в проектах на SvelteKit.