Skip to content

CdsExpandablePanel

Раскрывающаяся панель прячет подробности за заголовком: пользователь видит список тем и открывает только ту, что ему нужна. Берите её для FAQ, необязательных настроек и длинных описаний, из-за которых страница превращается в бесконечную ленту.

Storybook GitLab Figma
Покрытие тестами: тестов нет

У компонента пока нет автотестов: поведение проверено только вручную.

API в спеках
0 / 70 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
0 юнит · 0 браузерных
Покрытие кода
18.4% строк · 0% ветвей замер v4.0.0-alpha.13
A11y (axe)
1 рекомендаций в 13 историях замер v4.0.0-alpha.11

Если разделы равнозначны и пользователь переключается между ними — возьмите CdsTabs. Для иерархии из вложенных узлов подойдёт CdsTree, а для блока, который просто отделяет контент, — CdsCard.

Анатомия ​

Панели всегда живут внутри группы CdsExpandablePanels: она хранит, какие панели раскрыты, и раздаёт общие настройки. Каждая панель — заголовок-кнопка с иконкой состояния и раскрываемое содержимое.

Вариации ​

Группа панелей ​

CdsExpandablePanel без обёртки CdsExpandablePanels не работает — группа отвечает за раскрытие. Простую панель собирают из пропсов title и text, без слотов. По умолчанию раскрыта одна панель: открывая следующую, вы сворачиваете предыдущую.

Sandbox Storybook

Внешний вид ​

Свойство appearance задаёт фон панелей: primary — на обычной странице, secondary — на цветной подложке, transparent — когда панель встроена в уже оформленный блок (карточку, сайдбар).

Отступ между панелями меняет свойство gap — оно принимает число или строку с CSS-единицами.

Sandbox Storybook

Компоновка ​

Свойство variant="accordion" убирает отступы и склеивает панели в единый блок с общими скруглениями. Так список из нескольких вопросов читается как одна таблица, а не как набор карточек.

Sandbox Storybook

Раскрытие ​

Свойство multiple разрешает держать открытыми несколько панелей сразу. Через v-model вы читаете и задаёте, что раскрыто: индекс панели (или её value) в обычном режиме и массив — в multiple. Свойство mandatory запрещает сворачивать последнюю открытую панель, max ограничивает число одновременно раскрытых.

Sandbox Storybook

Состояния ​

Свойство disabled на панели блокирует одну панель, на группе — сразу все: заголовок перестаёт откликаться и теряет контраст. Свойство readonly оставляет панели в текущем состоянии — используйте его в режиме просмотра, когда содержимое нужно показать, но переключать нечего.

Sandbox Storybook

Иконки ​

Иконку состояния задают свойства expand-icon и collapse-icon — на группе, на панели или на отдельном заголовке; значение с ближайшего уровня побеждает. Слот action заголовка заменяет иконку целиком и получает состояние панели, а hide-actions убирает её вовсе.

Sandbox Storybook

Слоты ​

Пропсов title и text хватает для текстовой панели. Как только в заголовке нужен счётчик, статус или иконка — соберите его из CdsExpandablePanelTitle и CdsExpandablePanelContent.

СлотОписание
CdsExpandablePanels → defaultПанели группы. В аргументах — навигация next и prev
CdsExpandablePanel → titleСодержимое заголовка. Замещает текст из title
CdsExpandablePanel → textРаскрываемое содержимое. Замещает текст из text
CdsExpandablePanelTitle → defaultСодержимое заголовка. В аргументах — expanded, disabled, readonly
CdsExpandablePanelTitle → actionИконка раскрытия. В аргументах — то же состояние панели
Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Вопросы и ответы ​

Классический случай для accordion: список вопросов виден целиком, ответ раскрывается по клику. Одновременно открыт один ответ — так пользователь не теряет место в списке. Содержимое рендерится только после первого раскрытия; если ответы должны попадать в поисковую выдачу, включите eager.

Sandbox Storybook

Форма с итогами ​

Заголовок показывает текущее значение, а раскрытая панель — поле для его изменения. Слот default заголовка получает expanded, поэтому подпись можно менять на лету. Такая форма занимает мало места и не прячет от пользователя то, что он уже заполнил.

Sandbox Storybook

Фильтры в сайдбаре ​

Группы фильтров в боковой панели: multiple держит открытыми нужные секции, transparent убирает лишний фон, а бейдж в заголовке показывает, сколько условий выбрано в свёрнутой группе.

Sandbox Storybook

Пошаговое заполнение ​

Слот группы отдаёт next и prev — кнопки внутри панели переводят пользователя на следующий шаг, а mandatory не даёт закрыть все шаги сразу. Для длинных мастеров с валидацией шагов возьмите CdsSteps.

Sandbox Storybook

API ​

CdsExpandablePanels ​

Пропсы

ИмяТипПо умолчаниюОписание
appearance"primary" | "secondary" | "transparent" | undefined'primary'Внешний вид панелей
collapseIconIconValue | undefined'chevron-up'Иконка сворачивания панели
disabledboolean | null | undefinednullЗаблокированное состояние
eagerboolean | undefined—Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
expandIconIconValue | undefined'chevron-down'Иконка раскрытия панели
focusableboolean | undefined—Подсвечивать заголовок фоном при фокусе
gapstring | number | undefined—Отступ между панелями
hideActionsboolean | undefined—Скрыть иконку раскрытия/сворачивания
hoverboolean | undefinedtrueПодсвечивать заголовок фоном при наведении курсора
mandatoryboolean | "force" | undefined—Обязательный выбор хотя бы одного элемента
maxnumber | undefined—Максимальное количество выбираемых элементов
modelValueany—Значение выбранных элементов группы
multipleboolean | undefined—Разрешить множественный выбор
readonlyboolean | null | undefinednullТолько для чтения
requiredboolean | "force" | undefined—Обязательный выбор хотя бы одного элемента
selectedClassstring | undefined—CSS класс для выбранного состояния
staticboolean | undefined—Отключить анимацию заголовка
tagstring | JSXComponent<any> | undefined'div'Пользовательский HTML-тег для отображения
themestring | undefined—Тема компонента
variant"default" | "accordion" | undefined'default'Вариант отображения группы панелей

События

ИмяТипОписание
update:modelValue[value: unknown]Срабатывает при изменении выбранных панелей.

Слоты

ИмяТипОписание
defaultCdsExpandablePanelsSlotPropsПанели группы. В аргументах слота доступна навигация по панелям.

Exposed

ИмяТипОписание
next() => voidРаскрыть следующую панель
prev() => voidРаскрыть предыдущую панель

CdsExpandablePanel ​

Пропсы

ИмяТипПо умолчаниюОписание
collapseIconIconValue | undefined'chevron-up'Иконка сворачивания панели
disabledboolean | null | undefinednullЗаблокированное состояние
eagerboolean | undefined—Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.
expandIconIconValue | undefined'chevron-down'Иконка раскрытия панели
focusableboolean | undefined—Подсвечивать заголовок фоном при фокусе
heightstring | number | undefined—Высота компонента
hideActionsboolean | undefined—Скрыть иконку раскрытия/сворачивания
hoverboolean | undefinedtrueПодсвечивать заголовок фоном при наведении курсора
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
readonlyboolean | null | undefinednullТолько для чтения
selectedClassstring | undefined—CSS класс для выбранного состояния
staticboolean | undefined—Отключить анимацию заголовка
tagstring | JSXComponent<any> | undefined'div'Пользовательский HTML-тег для отображения
textstring | undefined—Текст раскрываемого содержимого панели
titlestring | undefined—Текст заголовка панели
valueany—Значение компонента в группе
widthstring | number | undefined—Ширина компонента

События

ИмяТипОписание
group:selected[value: { value: boolean; }]Срабатывает при раскрытии/сворачивании панели.

Слоты

ИмяТипОписание
defaultanyПроизвольное содержимое панели.
textanyРаскрываемое содержимое панели.
titleanyСодержимое заголовка панели.

Exposed

ИмяТипОписание
isSelectedbooleanПанель раскрыта
select(value: boolean) => voidРаскрыть/свернуть панель
toggle() => voidПереключить раскрытие панели

CdsExpandablePanelTitle ​

Пропсы

ИмяТипПо умолчаниюОписание
collapseIconIconValue | undefined'chevron-up'Иконка сворачивания панели
expandIconIconValue | undefined'chevron-down'Иконка раскрытия панели
focusableboolean | undefined—Подсвечивать заголовок фоном при фокусе
heightstring | number | undefined—Высота компонента
hideActionsboolean | undefined—Скрыть иконку раскрытия/сворачивания
hoverboolean | undefinedtrueПодсвечивать заголовок фоном при наведении курсора
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
readonlyboolean | null | undefinednullТолько для чтения
staticboolean | undefined—Отключить анимацию заголовка
widthstring | number | undefined—Ширина компонента

Слоты

ИмяТипОписание
actionCdsExpandablePanelTitleSlotPropsИконка раскрытия/сворачивания. В аргументах слота доступно состояние панели.
defaultCdsExpandablePanelTitleSlotPropsСодержимое заголовка. В аргументах слота доступно состояние панели.

Exposed

ИмяТипОписание
isSelectedbooleanПанель раскрыта
toggle() => voidПереключить раскрытие панели

CdsExpandablePanelContent ​

Пропсы

ИмяТипПо умолчаниюОписание
eagerboolean | undefined—Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO.

Слоты

ИмяТипОписание
defaultanyРаскрываемое содержимое панели.