PathLogs UI
English

Компоненты

Dialog

Модальное окно с ловушкой фокуса и блокировкой прокрутки.

Модальное окно: портал в body, затемнение, ловушка фокуса, Escape и блокировка прокрутки страницы под ним.

Пример

Состояние живёт снаружи. Так одно и то же окно обслуживает и создание, и редактирование, не заводя себе внутреннего режима.

Пропсы

open*boolean

Показано ли окно.

onClose*() => void

Вызывается по Escape, клику по затемнению и крестику.

titlestring

Видимый заголовок окна.

headerReactNode

Свой заголовок вместо строки title — например, с иконкой и счётчиком.

labelstring

Доступное имя, когда видимого заголовка нет: окно рисует его само, но скринридеру имя всё равно нужно.

footerReactNode

Полоса действий внизу окна.

size"sm" | "md" | "lg" | "xl"

по умолчанию: "md"

Предельная ширина: 24 / 32 / 42 / 56 rem.

align"center" | "top"

по умолчанию: "center"

Прижать окно к верху — так стоит командная палитра.

busyboolean

по умолчанию: false

Идёт сохранение: закрытие заблокировано, чтобы не потерять результат.

dismissOnBackdropboolean

по умолчанию: true

Закрывать по клику на затемнение.

dismissOnEscapeboolean

по умолчанию: true

Закрывать по Escape.

Фокус и клавиатура

  • При открытии фокус уходит на первый интерактивный элемент, а если его нет — на саму панель. Без этого клавиатура осталась бы на странице под затемнением.
  • Tab с последнего элемента возвращается на первый: за пределы окна фокус не уходит.
  • При закрытии фокус возвращается туда, откуда окно открыли, — иначе после Escape клавиатура оказывалась бы в начале страницы.
  • Прокрутка страницы под окном блокируется: колесо над затемнением иначе уезжает по контенту, и, закрыв окно, пользователь оказывается не там, где был.

Окно без заголовка

Если окно рисует заголовок само (подтверждение, палитра), передайте label вместо title: шапка не появится, а доступное имя останется.

tsx
<Dialog open={open} onClose={close} label="Удалить проект?" size="sm">
  {/* собственная разметка с иконкой и заголовком */}
</Dialog>