Caroa UI

Resizable

ドラッグでサイズ変更可能なパネルコンポーネント。

インポート

import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@caroainc/ui-components/client'

react-resizable-panels のインストールが必要です。

npm install react-resizable-panels

基本的な使い方

Loading...
<ResizablePanelGroup direction="horizontal" className="max-w-md rounded-md border">
  <ResizablePanel defaultSize={50}>
    <div className="flex h-[200px] items-center justify-center p-6">
      <span className="font-semibold">パネル 1</span>
    </div>
  </ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={50}>
    <div className="flex h-[200px] items-center justify-center p-6">
      <span className="font-semibold">パネル 2</span>
    </div>
  </ResizablePanel>
</ResizablePanelGroup>

垂直方向

Loading...
<ResizablePanelGroup direction="vertical" className="min-h-[200px] max-w-md rounded-md border">
  <ResizablePanel defaultSize={25}>
    <div className="flex h-full items-center justify-center p-6">
      <span className="font-semibold">ヘッダー</span>
    </div>
  </ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={75}>
    <div className="flex h-full items-center justify-center p-6">
      <span className="font-semibold">コンテンツ</span>
    </div>
  </ResizablePanel>
</ResizablePanelGroup>

ハンドル付き

withHandle プロップを使用すると、視覚的なハンドルを表示できます。

Loading...
<ResizablePanelGroup direction="horizontal" className="max-w-md rounded-md border">
  <ResizablePanel defaultSize={50}>
    <div className="flex h-[200px] items-center justify-center p-6">
      <span className="font-semibold">パネル 1</span>
    </div>
  </ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel defaultSize={50}>
    <div className="flex h-[200px] items-center justify-center p-6">
      <span className="font-semibold">パネル 2</span>
    </div>
  </ResizablePanel>
</ResizablePanelGroup>

3パネル構成

Loading...
<ResizablePanelGroup direction="horizontal" className="max-w-md rounded-md border">
  <ResizablePanel defaultSize={25}>
    <div className="flex h-[200px] items-center justify-center p-6">
      サイドバー
    </div>
  </ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel defaultSize={50}>
    <div className="flex h-[200px] items-center justify-center p-6">
      メイン
    </div>
  </ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel defaultSize={25}>
    <div className="flex h-[200px] items-center justify-center p-6">
      詳細
    </div>
  </ResizablePanel>
</ResizablePanelGroup>

Props

ResizablePanelGroup

PropTypeDefaultDescription
direction'horizontal' | 'vertical'-パネルの配置方向
onLayout(sizes: number[]) => void-レイアウト変更時のコールバック

ResizablePanel

PropTypeDefaultDescription
defaultSizenumber-初期サイズ(パーセント)
minSizenumber-最小サイズ(パーセント)
maxSizenumber-最大サイズ(パーセント)
collapsibleboolean-折りたたみ可能かどうか
collapsedSizenumber-折りたたみ時のサイズ
onCollapse() => void-折りたたみ時のコールバック
onExpand() => void-展開時のコールバック

ResizableHandle

PropTypeDefaultDescription
withHandlebooleanfalse視覚的なハンドルを表示するかどうか

On this page