ポップオーバーPopoverExperimental

トリガーに紐づく補足情報、軽いフォーム、状態、短い確認を画面遷移なしで表示します。

プレビュー

状態とバリエーション

表示密度の変更

対象行の表示密度をその場で変更します。

絞り込み条件

対象行の条件ボタンからフィルター入力を開きます。

公開前の確認

公開状態の行から、短い説明と確認操作を表示します。

同期状態の詳細

同期状態の行から補助情報を表示します。

プロパティ

表は横にスクロールできます
プロパティ初期値説明
openboolean-開閉状態を制御する場合に使います。
onOpenChange(open: boolean) => void-開閉状態の変更を受け取ります。
side"top" | "right" | "bottom" | "left""bottom"表示したい方向です。
align"start" | "center" | "end""center"トリガーに対する揃え位置です。
portalContainerHTMLElement | null-docs preview やアプリ内フレームに overlay を閉じ込めるための任意コンテナです。

設計の判断

  • 既定の幅を288pxに決め打ちした。資料は「3から5項目の設定やフィルターなら Popover、それ以上なら Modal に上げる」と書いています。GUNJO の PopoverContent は幅を288pxに固定し、高さも画面に収まる分で頭打ちにしました(--radix-popper-available-height と画面の高さから2rem引いた値の、小さいほう)。中身を増やすと先に窮屈になるので、Modal へ上げる判断が画面を見た時点で付きます。
  • フォーカスの囲い込みはしない。資料は「Popover にフォーカストラップを付けると Modal と同じ重さになる」を禁止として挙げています。GUNJO は土台の Radix の Popover をそのまま使っており、開いたときのフォーカス移動と Escape と外側のクリックは受け持ちますが、Tab の囲い込みはしません。囲い込みが要るほど重い操作なら、最初から Modal を使う側の判断です。
  • 画面端の逃げ方だけ既定を変えた。collisionPadding の既定を16にしてあります。0のままだと画面の端にぴったり貼り付いて読みにくいためです。portalContainer を渡すと、画面全体ではなくその要素の中に描きます。docs の埋め込みプレビューのように、画面いっぱいに出しては困る枠の中で使うために要ります。

使用コンポーネント

いつ・なぜ使うか(UIXHERO)

「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。