Resizable
ドラッグで分割できるパネルです。ホバーで目覚める控えめな区切り線、リセットや折りたたみで滑らかに動くサイズ、永続化されるレイアウトに対応します。
pnpm dlx shadcn@latest add https://hextaui.com/r/resizable.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add react-resizable-panels cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/resizable.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
数値はピクセル、文字列はパーセンテージなので、defaultSize="30%" と minSize={240} のどちらも使えます。区切りは触れるまで細い線のままです。ドラッグ中はパネルがポインターにぴったり追従し、それ以外の変更(ダブルクリックでのリセット、キーボード操作、コードからの折りたたみ)はなめらかに動きます。
Collapsible
collapsible なパネルは、minSize を下回るまでドラッグすると閉じます。ボタンから usePanelRef で切り替えられ、折りたたみはアニメーションします。
サイズ表示
showSize は、ドラッグまたはキーボード操作中に、区切りの前のパネルのサイズを "percent" または "pixels" で表示します。
レイアウトを記憶する
useDefaultLayout はサイズを localStorage に保存し、次回の訪問時にアニメーションなしで復元します。各パネルに id を付けてください。
垂直
orientation="vertical" はパネルを縦に積みます。グループは上のデモのようにネストできます。
常に見えるグリップ
withHandle は、ホバー時に表示する代わりにグリップを表示したままにします。
右から左
パネルと矢印キーは文字の読み方向に従います。
| キー | アクション |
|---|---|
| ←→↑↓ | フォーカスされている区切りを、そのグループの方向に5%動かします。 |
| HomeEnd | パネルが許す限り区切りを動かします。 |
| Enter | 折りたたみ可能なパネルを折りたたむか展開します。 |
| F6 | グループ内の次の区切りに移動します。Shift で戻ります。 |
- 各区切りはフォーカス可能な
separatorで、その前のパネルのサイズを報告します。 - サイズ表示は装飾です。スクリーンリーダーには separator 自身の値が伝えられます。
- 視差効果の軽減が有効な場合、サイズは即座に変化し、区切りはアニメーションしません。
| プロパティ | 型 | デフォルト |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
defaultLayout | Layout | – |
onLayoutChangeドラッグ中を含むすべての変更。 | (layout) => void | – |
onLayoutChanged変更が落ち着いたとき。 | (layout, meta) => void | – |
disabled | boolean | false |
groupRef | Ref<GroupImperativeHandle> | – |
| 属性 | 説明 |
|---|---|
data-slot="resizable-panel-group" | グループ。 |
data-ready | マウント後に設定され、以降サイズはアニメーションします。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
defaultSize | number | string | – |
minSize | number | string | – |
maxSize | number | string | – |
collapsible | boolean | false |
collapsedSize | number | string | 0 |
onResize | (size, id, previous) => void | – |
panelRef | Ref<PanelImperativeHandle> | – |
idレイアウトを記憶するために必要です。 | string | – |
| プロパティ | 型 | デフォルト |
|---|---|---|
withHandleグリップを常に表示します。 | boolean | false |
showSize | boolean | "percent" | "pixels" | false |
disableDoubleClickダブルクリックでパネルがリセットされないようにします。 | boolean | false |
disabled | boolean | false |
| 属性 | 説明 |
|---|---|
data-slot="resizable-handle" | 区切り。 |
data-separator | "inactive"、"hover"、"active"、"focus"、"disabled"。 |
data-slot="resizable-handle-grip" | グリップのピル。 |
usePanelRef と useGroupRef は collapse、expand、resize、setLayout を提供します。useDefaultLayout はグループのレイアウトを永続化します。
- Accordionそれぞれがパネルを表示する見出しの積み重ねです。途中で反転できる高さのモーションを持ち、閉じている間もパネルの内容を検索できます。
- Aspect ratioメディアの読み込み前も形を保ち、読み込み中はシマー表示になり、メディアをフェードインさせ、失敗時はフォールバックを表示するボックスです。
- Carouselネイティブのスクロールスナップによるスライドです。タッチでの慣性、マウスドラッグ、矢印キー、ドット、サムネイル、適切なタイミングで一時停止する自動再生に対応します。
- Collapsible高さのモーションで表示と非表示を切り替えるパネルです。途中で反転でき、レイアウトが跳ねません。
- Scroll area最小限のスクロールバーを備えたネイティブスクロールです。端は続きがある側だけフェードし、最後の項目を半分で切って見せるピークも任意で使えます。
- Separatorコンテンツを水平または垂直に区切る細線です。ラベルを付けたり、見た目だけの線として装飾モードにしたりできます。
使用しているブロック
Resizable の上に構築されるブロック。
- Artifactモデルが作成したものを表示する、AIチャットの横のパネルです。Webページ、SVG、ドキュメント、コードがリアルタイムでストリーミングされ、その後サンドボックス化されたプレビューに切り替わります。比較して復元できるバージョン、サイズを変更できる分割、スマートフォンでのボトムシートを備えています。
- Diff Reviewエージェントによる編集を、反映される前にファイルをまたいで確認します。件数つきのファイルツリー、変更ごと、ファイルごと、またはすべてに対する承認と却下、任意の行や範囲に付けてエージェントへ返せるコメント、ユニファイドビューとスプリットビュー、単語単位のハイライト、取り消し、ストリーミングされる編集、チャット向けの「Edited 4 files」サマリーを備えています。