Drawer

Maintainer:
igor0226
GitHub
resizable
disableEscapeKeyDown
disableOutsideClick
hideVeil
placement
import {Drawer} from '@gravity-ui/uikit';

Drawer - компонент, который позволяет отображать содержимое в виде боковой панели. Он может быть использован для отображения навигации, инструментов или дополнительного контента. Компонент реализован с помощью React и включает CSS-переходы для плавных анимаций.

Использование

Ниже приводится простой пример использования компонента Drawer:

import React from 'react';
import {Drawer} from '@gravity-ui/uikit';

const App = () => {
  const [isVisible, setVisible] = React.useState(false);

  return (
    <div>
      <button onClick={() => setVisible(true)}>Open Drawer</button>
      <Drawer onOpenChange={setVisible} open={isVisible}>
        <p>Content of the drawer</p>
      </Drawer>
    </div>
  );
};

export default App;

Направление (placement)

Чтобы управлять направлением Drawer, вы можете передать свойство placement в компонент. Возможные значения: left, right, top, и bottom.

<Drawer onOpenChange={setVisible} open={isVisible} placement="left">
  <p>Content of the drawer</p>
</Drawer>
<Drawer onOpenChange={setVisible} open={isVisible} placement="right">
  <p>Content of the drawer</p>
</Drawer>
<Drawer onOpenChange={setVisible} open={isVisible} placement="top">
  <p>Content of the drawer</p>
</Drawer>
<Drawer onOpenChange={setVisible} open={isVisible} placement="bottom">
  <p>Content of the drawer</p>
</Drawer>

Изменяемый размер (resizable)

Компонент Drawer может быть изменяемым размером, передав свойство resizable.

<Drawer onOpenChange={setVisible} open={isVisible} resizable>
  <p>Content of the drawer</p>
</Drawer>

Дополнительно, вы можете использовать свойство size, чтобы управлять размером Drawer и передать обработчик onResize, чтобы сохранить измененное значение.

const [size, setSize] = useState(500);

<Drawer onOpenChange={setVisible} open={isVisible} resizable size={size} onResize={setSize}>
  <p>Content of the drawer</p>
</Drawer>;

Свойства

ИмяОписаниеТипЗначение по умолчанию
classNameАтрибут class для корневого элементаstring
qaАтрибут для тестирования (data-qa)string
styleАтрибут style для корневого элементаReact.CSSProperties
aria-labelАтрибут aria-label для описания компонента Drawerstring
aria-labelledbyID элемента с видимым заголовком для Drawerstring
aria-describedbyАтрибутaria-describedby для описания компонента Drawerstring
aria-detailsАтрибут aria-details для описания компонента Drawerstring
returnFocusElement to be focused on closingboolean React.Ref<HTMLElement>true
initialFocusНачальный элемент для установки фокуса. Положительное число является индексом кликабельного элементаnumber React.Ref<HTMLElement>
placementСторона, откуда выезжает Drawerstringleft
contentClassNameАтрибут class для элемента с контентомstring
childrenReact-контентReact.ReactNode
containerDOM-элемент, в который монтируется компонент через PortalHTMLElementdocument.body
disableBodyScrollLockОтключает блокировку скролла страницы при открытииbooleanfalse
disableEscapeKeyDownОтключает закрытие по клавише Escbooleanfalse
disableOutsideClickОтключает закрытие при клике снаружиbooleanfalse
disablePortalОтключает использование Portalbooleanfalse
keepMountedНе удаляет компонент из DOM при скрытииbooleanfalse
resizableВключает возможность изменения размера через курсорbooleanfalse
openУправляет видимостью компонентаbooleanfalse
hideVeilСкрывает шторку компонентаbooleanfalse
onOpenChangeОбработчик изменения состояния видимостиFunction
onTransitionInОбработчик начала анимации открытияFunction
onTransitionOutОбработчик начала анимации закрытияFunction
onTransitionInCompleteОбработчик завершения анимации открытияFunction
onTransitionOutCompleteОбработчик завершения анимации закрытияFunction
onResizeEndОбработчик завершения изменения размераFunction
onResizeОбработчик изменения размераFunction
onResizeStartОбработчик начала изменения размераFunction
maxSizeМаксимальная ширина или высота контента в пикселяхnumber
minSizeМинимальная ширина или высота контента в пикселяхnumber
sizeШирина или высота контента в пикселях. Когда передано значение auto, Drawer подстроится под размер контентаnumber | 'auto'