リサイズ可能ResizableExperimental

キーボード操作にも対応した、リサイズ可能な分割パネルレイアウトです。

プレビュー

状態とバリエーション

水平分割

サイドバーとメイン領域のような左右分割に使います。

キャンバス

垂直分割

プレビューとログ、エディタとコンソールなど上下分割に使います。

プレビュー
コンソール

入れ子

ファイル、エディタ、ターミナルのような複合ワークスペースを作ります。

ファイル
エディタ
ターミナル

3 カラム

ナビゲーション、本文、インスペクターのような横 3 分割を構成します。

コンテンツ
インスペクター

折りたたみ可能

補助パネルを最小化できるレイアウトにします。

折りたたみ可能
メイン

プロパティ

表は横にスクロールできます
プロパティ初期値説明
direction"vertical" | "horizontal"-分割方向です。ResizablePanelGroup に指定します。
defaultLayoutRecord<string, number>-パネル ID ごとの初期比率です。ハンドルをダブルクリックした時のリセット先にも使います。
groupRefRef<GroupImperativeHandle>-現在の比率取得や setLayout によるレイアウト変更に使います。
onLayoutChange / onLayoutChanged(layout: Record<string, number>) => void-パネルサイズが変わる時、または変更完了時に呼び出されます。
defaultSizenumber | string-ResizablePanel の初期サイズです。割合で使う場合は "32%" のように単位を明示します。
minSize / maxSizenumber | string-ResizablePanel の最小/最大サイズです。割合指定では "20%" のように書きます。
collapsibleboolean-パネルを折りたためるようにします。
withHandleboolean-ResizableHandle に視覚的なグリップを表示します。

使い方

import {
  ResizableHandle,
  ResizablePanel,
  ResizablePanelGroup,
} from "@gunjo/ui";

export function ResizableWorkspace() {
  return (
    <div className="h-64 w-full max-w-2xl overflow-hidden rounded-lg border">
      <ResizablePanelGroup direction="horizontal" defaultLayout={{ sidebar: 32, canvas: 68 }} className="h-full w-full">
        <ResizablePanel id="sidebar" defaultSize="32%" minSize="20%">
          <div className="flex h-full items-center justify-center p-4">サイドバー</div>
        </ResizablePanel>
        <ResizableHandle withHandle />
        <ResizablePanel id="canvas" defaultSize="68%" minSize="40%">
          <div className="flex h-full items-center justify-center p-4">キャンバス</div>
        </ResizablePanel>
      </ResizablePanelGroup>
    </div>
  );
}

設計の判断(UIXHERO)

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