Accordion

Accordion — составной компонент сворачиваемых секций на список заголовков, под каждым — содержимое, которое раскрывается по клику.

Accordion.Root держит состояние и задаёт цвет, подачу, размер и скругление всем секциям сразу. Секция — Accordion.Item с обязательным value: по нему она раскрывается и по нему приезжает в onValueChange. Внутри секции две части: Accordion.Trigger — шапка (единственная интерактивная часть, стрелку раскрытия она рисует сама) и Accordion.Content — содержимое.

Состояние ведётся контролируемо (пара value / onValueChange) или неконтролируемо (defaultValue); и там, и там значение — массив value раскрытых секций, даже когда раскрытой может быть только одна. По умолчанию секции раскрываются по одной и одна всегда остаётся открытой: collapsible разрешает закрыть последнюю, multiple — держать раскрытыми несколько.

Клавиатура и доступность — на стороне Ark: стрелки перемещают фокус между шапками, Home и End прыгают к первой и последней, шапка связана со своим содержимым через aria-controls.

Проект виден участникам организации, в которой он создан. Отдельные документы можно открыть по ссылке — они станут доступны и без входа в аккаунт.

Анатомия

Accordion.Root
Accordion.Item
Accordion.Trigger
Content

Примеры

Несколько раскрытых секций

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

PropTypeDefault
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.

PropTypeDefault
children

Части секции: Accordion.Trigger и Accordion.Content

ArkAccordionItemProps["children"]-
value*

Значение секции — по нему она раскрывается и приезжает в onValueChange

ArkAccordionItemProps["value"]-
disabled

Отключает секцию: она тускнеет и не раскрывается, остальные работают

ArkAccordionItemProps["disabled"]-

Наследуется от ComponentProps<typeof ArkAccordion.Item>

Accordion.Trigger

Шапка секции — кнопка раскрытия. Заголовок не переносится, стрелку шапка рисует сама.

PropTypeDefault
children

Заголовок секции — текст и, при необходимости, иконки. Не переносится: длинный обрезается многоточием. Стрелку раскрытия шапка рисует сама

ArkAccordionTriggerProps["children"]-

Наследуется от ComponentProps<typeof ArkAccordion.ItemTrigger>

Accordion.Content

Содержимое секции — произвольная разметка; раскрывается и сворачивается анимацией по высоте.

PropTypeDefault
children

Содержимое секции — произвольная разметка. Показывается, когда секция раскрыта, и уезжает анимацией при сворачивании

ArkAccordionContentProps["children"]-

Наследуется от ComponentProps<typeof ArkAccordion.ItemContent>