Перейти к основному содержимому

Выдвижная панель

Выдвижная панель, появляющаяся с края экрана; часто применяется там, где нужно большое пространство для отображения — просмотр подробностей, заполнение форм и т. п. Отличия от Dialog: располагается у края, выезжает в заданном направлении, а размер панели действует на одну сторону (ширину или высоту).

Базовое использование​

Четыре направления и пользовательский размер
import { useState } from 'react'
import { LhButton, LhDrawer } from '@lh-ui/react'

export default function Demo() {
const [open, setOpen] = useState(false)
return (
<>
<LhButton onClick={() => setOpen(true)}>Открыть панель</LhButton>
<LhDrawer title="Заголовок панели" open={open} onClose={() => setOpen(false)}>
Содержимое панели
</LhDrawer>
</>
)
}

Props компонента Drawer​

ПропОписаниеТипДопустимые значенияПо умолчанию
childrenОсновное содержимоеReactNode——
openОтображается ли (контролируемый)boolean—false
titleЗаголовокReactNode——
directionНаправление выезда'right' | 'left' | 'top' | 'bottom'—'right'
sizeРазмер панели (число → px, строка может быть в процентах)string | number—'30%'
showCloseПоказывать ли кнопку закрытияboolean—true
maskClosableЗакрывать ли по нажатию на маскуboolean—false
closeOnEscЗакрывать ли по Escboolean—true
lockScrollБлокировать ли прокрутку body (при блокировке также захватывается фокус)boolean—true
beforeCloseПерехват перед закрытием; закрытие продолжается только после вызова done(done: () => void) => void——
zIndexz-index (если не задан, используется глобальная система возрастающих значений)number——
headerСодержимое шапки (переопределяет стандартную строку заголовка)ReactNode——
footerСодержимое нижней области (кнопки)ReactNode——
themeVarsПеременные темы на уровне компонентаRecord<string, string>——
sxСокращение для макета (применяется к панели)SxProps——

События Drawer​

СобытиеОписаниеСигнатура обратного вызоваАналог во Vue
onCloseЗапрос закрытия (маска / Esc / кнопка закрытия), срабатывает после перехвата beforeClose() => voidupdate:modelValue / close
onOpenПри открытии (после монтирования DOM, до начала анимации появления)() => voidopen
onOpenedПо завершении анимации открытия() => voidopened
onCloseStartЗапрос закрытия принят, начинается анимация ухода() => void—
onClosedПосле завершения анимации закрытия и размонтирования DOM() => voidclosed

ref​

forwardRef<LhDrawerInstance>. LhDrawerInstance предоставляет close() (с перехватом beforeClose) и isOpen.

Маска по умолчанию не пропускает нажатия

maskClosable по умолчанию false (функция canDrawerClose в core по умолчанию отклоняет нажатия на маску), чтобы избежать случайных срабатываний; в plus closeOnClickModal по умолчанию true — при миграции нужно объявить это явно.

Захват фокуса

Фокус захватывается (функция shouldDrawerTrapFocus) только при включённом lockScroll: выдвижная панель часто работает как лёгкий слой, и без блокировки прокрутки сохраняется порядок табуляции формы позади неё. При закрытии фокус возвращается.

Направление размера

Если size — число, оно нормализуется в px; для направлений влево/вправо применяется к width панели, для вверх/вниз — к height.

Стили​

import '@lh-ui/react/style/drawer'