Accordion

view
size
arrowPosition
multiple
import {Accordion} from '@gravity-ui/uikit';

Компонент Accordion позволяет создавать сворачиваемые панели контента, где пользователи могут показывать или скрывать разделы информации. Это полезно для организации больших объемов контента в компактном виде.

Управление состоянием аккордеона

Вы можете управлять состоянием аккордеона, используя свойства value и onUpdate корневого компонента или для каждого элемента отдельно.

Пример управления состоянием из корневого компонента:

Настройте параметры вашего приложения
Управляйте настройками уведомлений
function ControlledAccordion() {
    const [value, setValue] = React.useState('item1');

    return (
        <Accordion value={value} onUpdate={setValue}>
            <Accordion.Item summary="Настройки" value="item1">
                Настройте параметры вашего приложения
            </Accordion.Item>
            <Accordion.Item summary="Уведомления" value="item2">
                Управляйте настройками уведомлений
            </Accordion.Item>
        </Accordion>
    );
}

Пример управления состоянием для каждого элемента через свойство expanded:

Настройте параметры вашего приложения
Управляйте настройками уведомлений
function ControlledAccordion() {
    const [item1, setItem1] = React.useState(true);
    const [item2, setItem2] = React.useState(false);
    return (
        <Accordion>
            <Accordion.Item
                summary="Настройки"
                onUpdate={setItem1}
                value="item1"
                expanded={item1}
            >
                Настройте параметры вашего приложения
            </Accordion.Item>
            <Accordion.Item
                summary="Уведомления"
                onUpdate={setItem2}
                value="item2"
                expanded={item2}
            >
                Управляйте настройками уведомлений
            </Accordion.Item>
        </Accordion>
    );
}

Размер

Используйте свойство size для управления размером Accordion. Размер по умолчанию — m.

Содержимое для среднего аккордеона
Содержимое для большого аккордеона
Содержимое для очень большого аккордеона

Внешний вид

solid: Основной вид с фоном (используется по умолчанию).

top-bottom: Вид с верхней и нижней границами.

Содержимое со сплошным фоном
Больше содержимого
Содержимое с верхней и нижней границами
Больше содержимого
<Accordion view="solid">
    <Accordion.Item summary="Сплошной вид">
        Содержимое со сплошным фоном
    </Accordion.Item>
    <Accordion.Item summary="Другой элемент">
        Больше содержимого
    </Accordion.Item>
</Accordion>
<Accordion view="top-bottom">
    <Accordion.Item summary="Вид с границами">
        Содержимое с верхней и нижней границами
    </Accordion.Item>
    <Accordion.Item summary="Другой элемент">
        Больше содержимого
    </Accordion.Item>
</Accordion>

Позиция стрелки

end: Стрелка расположена в конце заголовка (используется по умолчанию).

start: Стрелка расположена в начале заголовка.

Содержимое со стрелкой в конце
Содержимое со стрелкой в начале
<Accordion arrowPosition="end">
    <Accordion.Item summary="Стрелка в конце">
        Содержимое со стрелкой в конце
    </Accordion.Item>
</Accordion>
<Accordion arrowPosition="start">
    <Accordion.Item summary="Стрелка в начале">
        Содержимое со стрелкой в начале
    </Accordion.Item>
</Accordion>

Множественное раскрытие

Свойство multiple позволяет одновременно раскрывать несколько элементов аккордеона.

Содержимое первого элемента
Содержимое второго элемента
Содержимое третьего элемента
<Accordion multiple>
    <Accordion.Item summary="Первый элемент">
        Содержимое первого элемента
    </Accordion.Item>
    <Accordion.Item summary="Второй элемент">
        Содержимое второго элемента
    </Accordion.Item>
    <Accordion.Item summary="Третий элемент">
        Содержимое третьего элемента
    </Accordion.Item>
</Accordion>

Пользовательский заголовок

Используйте компонент Accordion.Summary для создания пользовательского заголовка.

Содержимое с пользовательским компонентом заголовка
Содержимое с обычным свойством заголовка
<Accordion>
    <Accordion.Item value="custom">
        <Accordion.Summary>
            {(props) => (
                <Button {...props} view="flat" width="max">
                    <Icon data={Settings} size={16} />
                    Пользовательская кнопка заголовка
                </Button>
            )}
        </Accordion.Summary>
        Содержимое с пользовательским компонентом заголовка
    </Accordion.Item>
    <Accordion.Item summary="Обычный заголовок">
        Содержимое с обычным свойством заголовка
    </Accordion.Item>
</Accordion>

Отключенное состояние

Отдельные элементы аккордеона могут быть отключены с помощью свойства disabled.

Этот элемент активен и может быть раскрыт
Этот элемент отключен и не может быть раскрыт
<Accordion>
    <Accordion.Item summary="Активный элемент">
        Этот элемент активен и может быть раскрыт
    </Accordion.Item>
    <Accordion.Item summary="Отключенный элемент" disabled>
        Этот элемент отключен и не может быть раскрыт
    </Accordion.Item>
</Accordion>

Свойства

Accordion

НазваниеОписаниеТипПо умолчанию
sizeРазмер аккордеона"m" "l" "xl""m"
viewВнешний вид аккордеона"solid" "top-bottom""solid"
multipleРазрешить одновременное раскрытие нескольких элементовbooleanfalse
arrowPositionПозиция индикатора стрелки"start" "end""end"
defaultValueЗначение по умолчанию для неконтролируемого состоянияstring string[] undefined
valueТекущее значение для контролируемого состоянияstring string[] undefined
onUpdateФункция обратного вызова, вызываемая при изменении состоянияFunction
ariaLevelУровень заголовка для доступностиnumber3
classNameCSS классstring
qaHTML атрибут data-qa, используется для тестированияstring

Accordion.Item

НазваниеОписаниеТипПо умолчанию
valueУникальный идентификатор элементаstring
summaryЗаголовок элемента аккордеонаReact.ReactNode
expandedКонтролируемое состояние раскрытияboolean
defaultExpandedСостояние раскрытия по умолчаниюboolean
disabledОтключает элемент аккордеонаbooleanfalse
keepMountedСохранять содержимое в DOM даже при сворачиванииboolean
onUpdateФункция обратного вызова, вызываемая при изменении состояния элементаFunction
classNameCSS классstring
qaHTML атрибут data-qa, используется для тестированияstring

Accordion.Summary

НазваниеОписаниеТипПо умолчанию
childrenПользовательская функция рендеринга заголовка(props, defaultSummary) => React.ReactElement
qaHTML атрибут data-qa, используется для тестирования. Работает только если qa передан в Accordion.Itemstring${accordion-item}-summary если qa передан в Accordion.Item, disclosure-summary если нет