Novi UI

Modal

作業を中断させる重さがある。確認や入力が本当に必要なときだけ使い、通知には Toast を使う。

デモ

import { Button, Modal, ModalBody, ModalFooter, ModalTitle } from '@novi-ui/raster'

<Modal isOpen={isOpen} onOpenChange={setIsOpen}>
  <ModalTitle>削除しますか</ModalTitle>
  <ModalBody>この操作は取り消せません。</ModalBody>
  <ModalFooter>
    <Button variant="outline" onPress={() => setIsOpen(false)}>キャンセル</Button>
    <Button color="danger" onPress={() => setIsOpen(false)}>削除</Button>
  </ModalFooter>
</Modal>

Props

Modal の props 一覧
名前説明
sizeNoviSize | 'full'
radius'none' | 'sm' | 'md' | 'lg' | 'full'
isOpenboolean
defaultOpenboolean
onOpenChange(isOpen: boolean) => void
isDismissableboolean背景クリックで閉じられるようにする
isKeyboardDismissDisabledbooleanEscape で閉じるのを無効にする
childrenReactNode
classNamesClassNames<typeof modalSlots>

Slot

構成部位に data-slot が出力されます。 CSS の上書きやテストはこれを狙ってください。

  • backdrop必須
  • panel必須
  • header
  • title
  • closeButton
  • body必須
  • footer

アクセシビリティ

  • 開いている間フォーカスは内側に閉じ込められ、Escape で閉じる (`isKeyboardDismissDisabled` で無効化できる)。閉じるボタンには `aria-label` がある
  • キーボードだけで操作できます。フォーカスリングはコントラスト比 3:1 以上です。
  • 本文のコントラスト比は light / dark とも 4.5:1 以上を検査で保証しています。
  • prefers-reduced-motion が有効なときはアニメーションを行いません。