React 19 · gzip 後 8 kB · 依存なし
あなたのツールを
支える 骨組み。
両端にアイコンレール、中央はあなたのもの、その周囲にサイズ変更できるゾーン。リロードしてもレイアウトは残ります。土台はヘッドレス、見た目は自由に塗り替えられます。
サンプルを見る
実際に動いています。面と面のすき間をドラッグしたり、レールのアイコンを押したり別の半分へ動かしたり、ウィンドウの大きさを変えてみてください。
4 つの入り口
どれもブラウザで動き、ソースはすべて画面上にあります。目的に近いものから始めてください。
import { Panels, Panel } from '@pasquelin/panels'
import '@pasquelin/panels/styles.css'
<Panels<PanelId>>
<Panel<PanelId> id="files" zone="left" title="Files">
<FileTree />
</Panel>
<Panel<PanelId> id="notes" zone="right" opens={380}>
<Notes />
</Panel>
<Panels.Center>
<YourApp />
</Panels.Center>
</Panels>
ヒント。 同じゾーンと同じ半分を共有するパネルは交代で表示され、レールが切り替えます。二つ目に secondary の半分を与えれば、一つ目の下に重なって並びます。 ここではレールのアイコンを別の半分へドラッグすることもできます。
最小構成 を開く →
function Layout() {
return (
<Panels<PanelId>>
<Panel<PanelId> id="sites" zone="left" title="Sites">
<SiteList />
</Panel>
<Panels.Center>
<Outlet />
</Panels.Center>
</Panels>
)
}
ヒント。 パネルはレイアウトルート側、アウトレットより上で宣言してください。ページごとに宣言すると移動のたびにアンマウントされ、保持していた状態を失います。
React Router を開く →
import { DockviewCenter } from '@pasquelin/panels/dockview'
<Panels.Center>
<DockviewCenter
documents={{ editor: Editor }}
empty={NothingOpen}
onReady={setApi}
/>
</Panels.Center>
ヒント。 dockview エントリーポイントから読み込めば、その重さはタブを使うプロジェクトにしかかかりません。パネルが中央に入ることはありません。ドキュメントには名前が、パネルにはアイコンがあります。
ドキュメントタブ を開く →
.pnl-root {
--pnl-chassis: #2e2b26;
--pnl-panel: #1b1916;
--pnl-accent: #d99a2b;
--pnl-radius: 12px;
--pnl-rail: 60px;
}
ヒント。 任意の祖先要素にアクセントトークンを設定すれば、骨組みは自分の色を押しつけず、あなたのブランドを受け継ぎます。さらに先へ進みたい場合、各部品は個別に差し替えられます。
塗り替え を開く →
API のすべて
多くはありません。それが狙いです。知るべきことは 6 つ。
- 宣言する
-
パネルは記述子です。どこに掛かり、何という名前で、何を描くか。
<Panel id="files" zone="left" title="Files" icon={<Icon />}>
<FileTree />
</Panel>
- 操作する
-
パネルを動かしたいヘッダー、ショートカット、メニューのための単一のフック。
const { reveal, close, toggle, isShown } = usePanels<PanelId>()
- 並べ替える
-
プロパティ 1 つで、レールのアイコンを別の半分へドラッグできます。置いた場所はほかのレイアウトとともに記憶されます。
<Panels<PanelId> draggablePanels>
- React の外から操作する
-
ストアを自分で作れば、ソケットやネイティブメニュー、ワーカーからパネルを開けます。
const store = createPanelsStore<PanelId>()
socket.on('alert', () => store.getState().show('alerts'))
- 塗り替える
-
すべての値がカスタムプロパティ。アクセントを決めればレールが従います。
.pnl-root {
--pnl-panel: #101418;
--pnl-accent: #47965c;
--pnl-radius: 10px;
}
- ロジックだけ使う
-
コンポーネントは何も描かないフックの上に建っています。その上に自分の枠を描いてください。
const zone = useZone('left')
useContainerFit(ref)