Accordion
Accordion — составной компонент сворачиваемых секций на список заголовков, под каждым — содержимое, которое раскрывается по клику.
Accordion.Root держит состояние и задаёт цвет, подачу, размер и скругление всем секциям сразу. Секция — Accordion.Item с обязательным value: по нему она раскрывается и по нему приезжает в onValueChange. Внутри секции две части: Accordion.Trigger — шапка (единственная интерактивная часть, стрелку раскрытия она рисует сама) и Accordion.Content — содержимое.
Состояние ведётся контролируемо (пара value / onValueChange) или неконтролируемо (defaultValue); и там, и там значение — массив value раскрытых секций, даже когда раскрытой может быть только одна. По умолчанию секции раскрываются по одной и одна всегда остаётся открытой: collapsible разрешает закрыть последнюю, multiple — держать раскрытыми несколько.
Клавиатура и доступность — на стороне Ark: стрелки перемещают фокус между шапками, Home и End прыгают к первой и последней, шапка связана со своим содержимым через aria-controls.
Анатомия
Примеры
Несколько раскрытых секций
multiple разрешает держать раскрытыми сколько угодно секций сразу — так собирают панели фильтров и настроек, где разделы смотрят вместе. Закрыть можно любую: при multiple collapsible не нужен.
Контролируемое состояние
Пара value / onValueChange отдаёт раскрытые секции наружу: их можно менять программно — открыть нужный шаг после сохранения формы или из соседнего элемента интерфейса. Колбэк получает { value } — массив значений раскрытых секций.
Если управлять состоянием снаружи не нужно, хватит defaultValue: аккордеон ведёт его сам.
Отключённые секции
disabled на Accordion.Item тушит одну секцию — она не раскрывается и пропускается при переходе по стрелкам, остальные работают. Тот же проп на Accordion.Root отключает аккордеон целиком.
Вариант
Смысловой вариант — задаёт цвет шапки секции: primary — акцент, secondary — второстепенный, success / warning / danger — семантические статусы, default — нейтральный (по умолчанию). Содержимое остаётся на фоне страницы: цвет — признак раздела, а не подложка под текст.
Внешний вид
Внешний вид шапки: solid — сплошная заливка, outline — обводка без заливки, dashed — та же обводка пунктиром, ghost — прозрачная шапка с приглушённой подложкой на ховере (по умолчанию). Раскрытая секция подсвечена насыщеннее наведённой, поэтому открытая шапка видна и без стрелки.
Размер
Размер задаётся на Accordion.Root и управляет высотой шапки, её отступами и кеглем, а также типографикой содержимого. xs — для плотных боковых панелей, sm — базовый, md и выше — для крупных разделов на странице.
Скругление
Скругление углов шапки — от прямых none до circle («таблетка»). На прозрачной шапке разница не видна, поэтому проп имеет смысл вместе с solid, outline или dashed.
Кастомный цвет
color — цвет секций вне стандартного набора вариантов, принимает любое CSS-значение и перекрывает цвет из variant. Цвет текста при сплошной заливке подбирается автоматически: на светлом фоне — чёрный, на тёмном — белый.
API
| Prop | Type | Default |
|---|---|---|
childrenСекции аккордеона — Accordion.Item | ArkAccordionRootProps["children"] | - |
valueКонтролируемый список раскрытых секций (их value). Пара с onValueChange | ArkAccordionRootProps["value"] | - |
defaultValueНачальный список раскрытых секций для неконтролируемого аккордеона — когда вести состояние вручную не нужно | ArkAccordionRootProps["defaultValue"] | - |
onValueChangeКолбэк смены раскрытых секций: получает { value } — массив значений | ArkAccordionRootProps["onValueChange"] | - |
multipleРазрешает держать раскрытыми несколько секций сразу | ArkAccordionRootProps["multiple"] | false |
collapsibleРазрешает закрыть раскрытую секцию — иначе одна всегда остаётся открытой | ArkAccordionRootProps["collapsible"] | false |
disabledОтключает весь аккордеон: секции тускнеют и не раскрываются | ArkAccordionRootProps["disabled"] | - |
variantСмысловой вариант — задаёт цвет | Variant | "default" |
appearanceВнешний вид: сплошная заливка, обводка (сплошная или пунктирная) или приглушённая подложка | Appearance | "ghost" |
sizeРазмер компонента | Size | - |
radiusСкругление углов: circle — «таблетка» | Radius | - |
colorКастомный цвет — для случаев вне стандартного набора вариантов. Принимает любое CSS-значение, имеет приоритет над цветом из variant | string | - |
Наследуется от Pick<VisualProps, K>, ComponentProps<typeof ArkAccordion.Root>
Accordion.Item
Секция: шапка и содержимое. value обязателен — по нему секция раскрывается и приезжает в onValueChange.
| Prop | Type | Default |
|---|---|---|
childrenЧасти секции: Accordion.Trigger и Accordion.Content | ArkAccordionItemProps["children"] | - |
value*Значение секции — по нему она раскрывается и приезжает в onValueChange | ArkAccordionItemProps["value"] | - |
disabledОтключает секцию: она тускнеет и не раскрывается, остальные работают | ArkAccordionItemProps["disabled"] | - |
Наследуется от ComponentProps<typeof ArkAccordion.Item>
Accordion.Trigger
Шапка секции — кнопка раскрытия. Заголовок не переносится, стрелку шапка рисует сама.
| Prop | Type | Default |
|---|---|---|
childrenЗаголовок секции — текст и, при необходимости, иконки. Не переносится: длинный обрезается многоточием. Стрелку раскрытия шапка рисует сама | ArkAccordionTriggerProps["children"] | - |
Наследуется от ComponentProps<typeof ArkAccordion.ItemTrigger>
Accordion.Content
Содержимое секции — произвольная разметка; раскрывается и сворачивается анимацией по высоте.
| Prop | Type | Default |
|---|---|---|
childrenСодержимое секции — произвольная разметка. Показывается, когда секция раскрыта, и уезжает анимацией при сворачивании | ArkAccordionContentProps["children"] | - |
Наследуется от ComponentProps<typeof ArkAccordion.ItemContent>