Пропсы корня
| Проп | Тип | По умолчанию |
|---|---|---|
defaultOpen | boolean | false |
| Определяет, открыта ли выдвижная панель по умолчанию. | ||
open | boolean | — |
| Управляет тем, открыта ли выдвижная панель. Если задан, компонент становится контролируемым. | ||
onChangeOpen | (value: boolean) => void | — |
| Колбэк, вызываемый при изменении состояния открытия выдвижной панели. Получает новое состояние в виде boolean. | ||
position | DrawerPosition | 'end' |
Определяет, с какой стороны экрана появляется выдвижная панель. start и end следуют направлению письма, как логические CSS-свойства: в тексте справа налево end — это левая сторона. | ||
children | ReactNode | — |
| Содержимое для отображения внутри выдвижной панели. Обычно включает навигацию, настройки или формы. | ||
Дочерние части
DrawerTrigger
Действие, открывающее выдвижную панель (Drawer). Устанавливает aria-haspopup="dialog" и aria-expanded.
| Проп | Тип | По умолчанию |
|---|---|---|
asChild | boolean | — |
Если true, рендерит триггер как дочерний элемент через Slot. Это позволяет собственным обёрткам (например, <a>, <div>) наследовать поведение открытия выдвижной панели. | ||
ref | Ref<HTMLButtonElement> | — |
| Ref, передаваемый на нативную кнопку или элемент в слоте. Полезен для управления фокусом или интеграций. | ||
Также принимает все атрибуты <button>.
DrawerContent
Нативный модальный <dialog>, расположение которого задаёт position корня.
| Проп | Тип | По умолчанию |
|---|---|---|
ref | Ref<HTMLDialogElement> | — |
Ref, передаваемый на нативный элемент <dialog>. Полезен для измерений, фокуса или хуков анимации. | ||
shadowed | boolean | — |
| Добавляет выдвижной панели тень для глубины и отделения от фона. | ||
blurred | boolean | true |
| Размывает страницу за выдвижной панелью. | ||
overlay | boolean | true |
| Затемняет страницу за выдвижной панелью. При false страница остаётся видимой, а панель — модальной. | ||
closedBy | ModalDialogClosedBy | 'any' |
Какие действия пользователя закрывают выдвижную панель, как нативный атрибут closedby: any — клик по подложке, свайп к её краю или Escape, closerequest — только Escape, none — ничего из этого. | ||
fullWidth | boolean | — |
| Растягивает выдвижную панель на всю ширину родительского контейнера. | ||
fullHeight | boolean | — |
| Растягивает выдвижную панель на всю высоту родительского контейнера. | ||
Также принимает все атрибуты <dialog>.
- Сам не задаёт
idилиaria-labelledby: дайте ему имя черезaria-labelledby, указывающий наidвашего заголовка, или черезaria-label.onCancelиonCloseвызываются после внутренних обработчиков.refуказывает на элемент<dialog>. blurred(по умолчаниюtrue) размывает страницу за панелью.overlay(по умолчаниюtrue) затемняет страницу;falseделает::backdropпрозрачным, но панель остаётся модальной.shadowedдобавляет тень поверхности;fullWidthиfullHeightрастягивают панель.closedByзадаёт, какие действия пользователя закрывают панель, как нативный атрибутclosedby:'any'(клик по подложке, свайп пальцем к её краю илиEscape, значение по умолчанию),'closerequest'(толькоEscape) или'none'.- Закрывается при отправке
<form method="dialog">внутри неё, в том числе сclosedBy='none'. Закрытие проходит черезonChangeOpen(false), аvalueкнопки отправки становитсяreturnValueдиалога. - С
closedBy='any'свайп пальцем к краю панели перетаскивает её и закрывает, если она сдвинута больше чем на половину своего размера или после резкого взмаха. Перетаскивание мышью оставлено для выделения текста. - Остаётся смонтированной, только пока открыта и пока проигрывается переход закрытия.
DrawerClose
Закрывает панель по клику. У него нет стилей, иконки и aria-label по умолчанию: отрендерите внутри свою кнопку через asChild и подпишите её.
| Проп | Тип | По умолчанию |
|---|---|---|
asChild | boolean | — |
Если true, рендерит действие закрытия как дочерний элемент через Slot, поэтому любая ваша кнопка закрывает выдвижную панель. | ||
ref | Ref<HTMLButtonElement> | — |
| Ref, передаваемый на нижележащую кнопку. | ||
Также принимает все атрибуты <button>.
- Закрытие проходит через
onChangeOpen(false), поэтому проигрывается переход закрытия, а контролирующий родитель может оставить панель открытой. - Используйте его для отдельной кнопки закрытия, например крестика в шапке. Для кнопок, которые дают ответ панели (Cancel, Confirm,
returnValue), используйте<form method="dialog">. БезasChildон рендеритtype="button", поэтому работает и внутри вашей собственной формы, не отправляя её; сasChildзадайте своей кнопкеtype="button".
minimal-composition.tsx · 43 строки
import { useId, type CSSProperties } from 'react';
import {
Button,
Drawer,
DrawerClose,
DrawerContent,
DrawerTrigger,
Heading,
Icon,
IconButton,
Text,
} from '@vega-ui/react';Хуки
useDrawerContext
Возвращает { open, changeOpen, position } для продвинутых обёрток и собственных элементов управления.
Типы
DrawerPropsDrawerTriggerPropsDrawerContentPropsDrawerCloseProps
Модель состояния
- Состояние открытия может быть контролируемым через
openили неконтролируемым черезdefaultOpen. - Любой запрос на закрытие (клик по подложке, свайп,
Escape, клик поDrawerClose, отправка<form method="dialog">) проходит черезonChangeOpen(false); контролируемая панель остаётся открытой, покаopenне станетfalse. closedBy='none'наDrawerContentотключает закрытие кликом по подложке, свайпом иEscape; закрывайте её кнопкой в<form method="dialog">или изменениемopen.positionиспользует логические стороны, которые следуют направлению письма:'top-start','top','top-end','end-start','end','end-end','bottom-start','bottom','bottom-end','start-start','start','start-end'. В тексте справа налевоend— это левая сторона.- Пока панель открыта, прокрутка страницы заблокирована.
- Панель всегда модальная;
overlay={false}только убирает затемнение.