ContentSwitcher в библиотеке Carbon Components Svelte представляет собой компонент для переключения между различными видами контента или представлений без необходимости перезагрузки страницы или изменения маршрута. Он часто используется для организации табов, переключения режимов отображения данных или фильтрации информации внутри одного интерфейса.
Управление активным состоянием ContentSwitcher
позволяет явно контролировать, какой переключатель активен, через
свойство selectedIndex. Это обеспечивает синхронизацию
состояния с внешними данными или стором Svelte.
<ContentSwitcher bind:selectedIndex={activeIndex}>
<Switch name="tab1">Первый таб</Switch>
<Switch name="tab2">Второй таб</Switch>
<Switch name="tab3">Третий таб</Switch>
</ContentSwitcher>
<p>Выбранный индекс: {activeIndex}</p>Динамическое создание переключателей Можно создавать переключатели из массива объектов, что удобно при работе с динамическими данными.
<script>
let tabs = [
{ name: 'home', label: 'Главная' },
{ name: 'profile', label: 'Профиль' },
{ name: 'settings', label: 'Настройки' }
];
let selected = 0;
</script>
<ContentSwitcher bind:selectedIndex={selected}>
{#each tabs as tab}
<Switch name={tab.name}>{tab.label}</Switch>
{/each}
</ContentSwitcher>События изменения состояния Компонент генерирует
событие on:change, которое возвращает объект с
selectedIndex и name активного переключателя.
Это позволяет реагировать на изменения состояния в других
компонентах.
<ContentSwitcher on:change={(e) => console.log(e.detail)}>
<Switch name="tab1">Первый таб</Switch>
<Switch name="tab2">Второй таб</Switch>
</ContentSwitcher>Carbon Components Svelte поддерживает стандартные CSS-переменные, что позволяет изменять внешний вид переключателей:
--cds-content-switcher-selected-background--cds-content-switcher-text-colorpadding и
margin на <Switch>Пример настройки через стиль в Svelte:
<style>
:global(.bx--content-switcher) {
--cds-content-switcher-selected-background: #0f62fe;
--cds-content-switcher-text-color: #ffffff;
}
</style>
ContentSwitcher удобно использовать совместно с компонентами Carbon, такими как DataTable, Accordion или Tabs, для динамической фильтрации и отображения контента:
<ContentSwitcher bind:selectedIndex={selected}>
<Switch name="table">Таблица</Switch>
<Switch name="chart">График</Switch>
</ContentSwitcher>
{#if selected === 0}
<DataTable {rows} {headers}/>
{:else}
<Chart type="line" data={chartData}/>
{/if}
Компонент полностью поддерживает ARIA-атрибуты и навигацию с клавиатуры:
aria-selected="true"Это делает ContentSwitcher доступным для пользователей с ограниченными возможностями и соответствует стандартам WAI-ARIA.
{#each}.selectedIndex можно хранить в глобальном
Svelte store, чтобы синхронизировать активный таб между различными
компонентами.ContentSwitcher является легкой, гибкой и полностью настраиваемой альтернативой стандартным табам, позволяя создавать интуитивные интерфейсы с динамически меняемым контентом.