Компонент Disclosure используется для организации скрываемого контента, который пользователь может разворачивать и сворачивать по необходимости. Он часто применяется для FAQ, аккордеонов, боковых панелей с фильтрами и других интерфейсных элементов, где важно экономить место и упрощать визуальное восприятие страницы.
В SvelteKit UI Disclosure обычно состоит из двух ключевых частей:
Пример базовой структуры:
<Disclosure>
<DisclosureTrigger>
Показать детали
</DisclosureTrigger>
<DisclosurePanel>
Скрытый контент, который раскрывается по клику.
</DisclosurePanel>
</Disclosure>
DisclosureTrigger автоматически
привязан к состоянию компонента и управляет показом/скрытием
панели.DisclosurePanel рендерится только
когда состояние открыто, что оптимизирует производительность.Состояние раскрытия может быть контролируемым или неконтролируемым:
<Disclosure>
<DisclosureTrigger>Подробнее</DisclosureTrigger>
<DisclosurePanel>Контент раскрывается автоматически</DisclosurePanel>
</Disclosure>
<script>
import { writable } from 'svelte/store';
import { Disclosure, DisclosureTrigger, DisclosurePanel } from 'sveltekit-ui';
let open = writable(false);
</script>
<Disclosure bind:open={$open}>
<DisclosureTrigger>Открыть/Закрыть</DisclosureTrigger>
<DisclosurePanel>Контент раскрытия</DisclosurePanel>
</Disclosure>
Использование bind:open позволяет управлять состоянием
из внешнего компонента, синхронизировать его с другими элементами
интерфейса или сохранять между сессиями.
Для плавного появления и скрытия панели можно использовать встроенные анимации Svelte или анимационные пропсы библиотеки:
<Disclosure let:open>
<DisclosureTrigger>Показать описание</DisclosureTrigger>
<DisclosurePanel transition:slide>
Контент с анимацией появления.
</DisclosurePanel>
</Disclosure>
transition:slide — стандартная
анимация скольжения.Использование анимаций улучшает UX, делая интерфейс более отзывчивым и визуально понятным.
Disclosure легко интегрируется с другими UI-элементами:
Пример использования Disclosure внутри аккордеона:
<Accordion>
<Disclosure>
<DisclosureTrigger>Раздел 1</DisclosureTrigger>
<DisclosurePanel>Контент раздела 1</DisclosurePanel>
</Disclosure>
<Disclosure>
<DisclosureTrigger>Раздел 2</DisclosureTrigger>
<DisclosurePanel>Контент раздела 2</DisclosurePanel>
</Disclosure>
</Accordion>
SvelteKit UI позволяет настраивать визуальное оформление DisclosureTrigger и DisclosurePanel через классы или пропсы:
<Disclosure>
<DisclosureTrigger class="bg-blue-500 text-white px-4 py-2 rounded">
Подробнее
</DisclosureTrigger>
<DisclosurePanel class="p-4 border border-gray-300 rounded mt-2">
Содержимое панели с кастомными стилями
</DisclosurePanel>
</Disclosure>
class и style полностью
поддерживаются и позволяют интегрировать Disclosure в любой
дизайн-системы.Disclosure поддерживает встроенную ARIA-разметку:
aria-expanded на триггере автоматически обновляется при
открытии/закрытии.aria-controls связывает триггер с панелью.Пример с явной проверкой ARIA:
<Disclosure>
<DisclosureTrigger aria-label="Показать детали" >
Подробнее
</DisclosureTrigger>
<DisclosurePanel>
Контент с поддержкой ARIA
</DisclosurePanel>
</Disclosure>
<Disclosure let:open>
<DisclosureTrigger>
Опции
<span class="ml-2 transform" class:rotate-90={open}>▶</span>
</DisclosureTrigger>
<DisclosurePanel>
Дополнительные настройки
</DisclosurePanel>
</Disclosure>
Компонент Disclosure в SvelteKit UI является универсальным инструментом для организации интерактивного, компактного и доступного контента. Его функциональность охватывает:
Это делает его основой для построения как простых разворачивающихся секций, так и сложных аккордеонов и динамических интерфейсов.