@aiquants/resize-panels 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,8 +7,10 @@ React 向けのリサイズ可能なパネルレイアウトコンポーネン
7
7
  - `PanelGroup` と `Panel` と `PanelResizeHandle` を中核に、リデューサーでレイアウトと DOM 計測を同期
8
8
  - `calculateSnapThreshold` とノイズ除去ロジックでリサイズ時の揺らぎを抑え、意図しない折りたたみを防止
9
9
  - 方向指定付き `collapsible` 設定と `usePanelControls` により、ドラッグ操作と UI 操作の両方で折りたたみ / 展開を制御
10
- - `autoSaveId` を指定するとローカルストレージにパネルサイズを自動保存し、再読み込み時に復元
11
- - `showDebugInfo` を使えば `PanelDebugInfo` とグローバルオーバーレイで計測結果や制約違反を可視化
10
+ - リサイズハンドルはマウス/タッチのドラッグに加え、**矢印キーによるキーボードリサイズ**にも対応(Shift 併用で 5 倍ステップ)。マルチタッチや `pointercancel` の割込みでもドラッグ状態が壊れない
11
+ - `dir="rtl"` **RTL レイアウト**でも、ドラッグ・キーボード・ハンドル位置が視覚方向に一致
12
+ - `autoSaveId` を指定するとローカルストレージにパネルサイズを自動保存し、再読み込み時に復元(初期化確定後のサイズのみ保存)
13
+ - `showDebugInfo` を使えば `PanelDebugInfo` とグローバルオーバーレイで計測結果や制約違反を可視化(デバッグ UI は遅延読み込みで、未使用時は本番バンドルに含まれない)
12
14
 
13
15
  ## インストール
14
16
 
@@ -118,7 +120,7 @@ export const Example = () => (
118
120
  ### PanelGroup の主なプロパティ
119
121
 
120
122
  | プロパティ | 型 | 説明 |
121
- |-------------|----|------|
123
+ | --- | --- | --- |
122
124
  | `id` | `string` | `data-panel-group-id` にも反映される識別子。複数グループを並べる場合は指定を推奨 |
123
125
  | `direction` | `'horizontal' \| 'vertical'` | パネルの配置方向 |
124
126
  | `className` / `style` | `string` / `React.CSSProperties` | コンテナの見た目を調整するための追加スタイル |
@@ -130,7 +132,7 @@ export const Example = () => (
130
132
  ### Panel の主なプロパティ
131
133
 
132
134
  | プロパティ | 型 | 説明 |
133
- |-------------|----|------|
135
+ | --- | --- | --- |
134
136
  | `id` | `string` | パネル識別子。省略時はランダム生成だが、SSR との整合のため明示指定を推奨 |
135
137
  | `defaultSize` | `{ value: number; unit: 'pixels' \| 'percentage' } \| number` | 初期サイズ。数値のみの場合はパーセンテージとして扱う |
136
138
  | `minSize` / `maxSize` | `FlexibleSize` | パネルの最小・最大サイズ制約。ピクセル・割合で指定可能 |
@@ -142,13 +144,15 @@ export const Example = () => (
142
144
  ### PanelResizeHandle の主なプロパティ
143
145
 
144
146
  | プロパティ | 型 | 説明 |
145
- |-------------|----|------|
147
+ | --- | --- | --- |
146
148
  | `id` | `string` | ハンドル識別子。省略時はランダム生成 |
147
- | `disabled` | `boolean` | `true` にするとドラッグ操作を無効化 |
148
- | `onDragging` | `(isDragging: boolean) => void` | ドラッグ開始 / 終了ごとに呼び出されるコールバック |
149
+ | `disabled` | `boolean` | `true` にするとドラッグ・キーボード操作を無効化 |
150
+ | `onDragging` | `(isDragging: boolean) => void` | ドラッグ開始 / 終了ごとに呼び出されるコールバック(`pointercancel` 等の割込みでも終了時に発火) |
149
151
  | `className` / `style` | `string` / `React.CSSProperties` | ハンドル見た目を追加カスタマイズ |
150
152
  | `children` | `React.ReactNode` | 独自のハンドルインジケーターを描画する場合に使用 |
151
153
 
154
+ > ハンドルは `<button>` としてレンダリングされ、フォーカス時に矢印キー(水平なら `←` / `→`、垂直なら `↑` / `↓`)でリサイズできます。`Shift` 併用で 1 押下あたりの移動量が 5 倍になります。`dir="rtl"` のコンテナ内ではドラッグ・キーボードの方向が視覚方向に合わせて反転します。
155
+
152
156
  ## フックとユーティリティ
153
157
 
154
158
  - `useResizablePanels`: `PanelGroup` 内部実装でも利用しているフック。カスタムコンテナを作る場合に役立ちます。
@@ -165,6 +169,8 @@ export const Example = () => (
165
169
 
166
170
  `PanelGroup` の `showDebugInfo` を有効にすると、各 `Panel` に `PanelDebugInfo` が表示され、折りたたみ状態・計測サイズ・保持中の割合が即座に確認できます。同時にグローバルオーバーレイが開き、コンテナの実測サイズ、制約違反の有無、ハンドル厚み(`PANEL_HANDLE_THICKNESS` で定義された 8px)なども一覧できます。
167
171
 
172
+ グローバルオーバーレイとそのストアは `React.lazy` + dynamic import で遅延読み込みされるため、`showDebugInfo` を一度も使わないアプリの本番バンドルにはデバッグ UI もストア購読も含まれません。
173
+
168
174
  ## スナップとノイズ対策・最終整合の挙動
169
175
 
170
176
  `PanelResizeHandle` と `Panel` の両方で `calculateSnapThreshold` を利用し、コンテナサイズに応じたゼロスナップ閾値を共有しています。`Panel` および `PanelGroup` では、サブピクセル単位の微小なノイズ(0.5px 未満の揺れ)を無視するフィルタリングと、動作停止後に正確な真値を反映する **最終整合メカニズム(デバウンス同期)** を導入しています。これにより、スクロールやリサイズ中のチラつきを抑えつつ、最終的な表示状態と内部状態の完全な一致を保証します。
@@ -0,0 +1,252 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { useState as A } from "react";
3
+ import { createPortal as P } from "react-dom";
4
+ import { useDebugOverlayOwnerId as R, useDebugOverlaySnapshot as T } from "./debugOverlayStore-Cntyxboe.js";
5
+ import { P as Y } from "./index-BzgId8aQ.js";
6
+ const a = (s, n) => typeof s != "number" || !Number.isFinite(s) ? "—" : `${(s < 0 ? 0 : s).toFixed(8)}${n}`, w = {
7
+ position: "fixed",
8
+ left: "50%",
9
+ bottom: "20px",
10
+ transform: "translate(-50%, 0)",
11
+ zIndex: 100,
12
+ maxWidth: "min(90vw, 1120px)",
13
+ width: "100%",
14
+ borderRadius: "14px",
15
+ backgroundColor: "rgba(15, 23, 42, 0.72)",
16
+ color: "#e2e8f0",
17
+ fontFamily: "monospace",
18
+ fontSize: "11px",
19
+ lineHeight: 1.6,
20
+ boxShadow: "0 22px 45px rgba(15,23,42,0.45)",
21
+ border: "1px solid rgba(148, 163, 184, 0.22)",
22
+ backdropFilter: "blur(10px)",
23
+ WebkitBackdropFilter: "blur(10px)",
24
+ pointerEvents: "auto",
25
+ overflow: "auto"
26
+ }, C = {
27
+ display: "flex",
28
+ justifyContent: "space-between",
29
+ alignItems: "center",
30
+ flexWrap: "wrap",
31
+ gap: "12px"
32
+ }, D = {
33
+ display: "flex",
34
+ flexDirection: "column",
35
+ gap: "4px"
36
+ }, N = {
37
+ padding: "6px 10px",
38
+ borderRadius: "9999px",
39
+ border: "1px solid rgba(148, 163, 184, 0.35)",
40
+ color: "#e2e8f0",
41
+ fontWeight: 600,
42
+ fontSize: "10px",
43
+ letterSpacing: "0.03em",
44
+ textTransform: "uppercase",
45
+ cursor: "pointer",
46
+ transition: "background-color 0.18s ease, border-color 0.18s ease"
47
+ }, k = {
48
+ padding: "10px 12px",
49
+ borderRadius: "10px",
50
+ backgroundColor: "rgba(30, 41, 59, 0.55)",
51
+ border: "1px solid rgba(148, 163, 184, 0.18)",
52
+ display: "flex",
53
+ flexDirection: "column",
54
+ gap: "10px"
55
+ }, I = {
56
+ padding: "8px 10px",
57
+ borderRadius: "8px",
58
+ backgroundColor: "rgba(15, 23, 42, 0.55)",
59
+ border: "1px solid rgba(148, 163, 184, 0.16)",
60
+ display: "flex",
61
+ flexDirection: "column",
62
+ gap: "4px"
63
+ }, x = {
64
+ display: "flex",
65
+ justifyContent: "space-between",
66
+ alignItems: "center",
67
+ gap: "6px"
68
+ }, V = {
69
+ display: "grid",
70
+ gridTemplateColumns: "auto 1fr",
71
+ gap: "2px 10px",
72
+ color: "#e2e8f0"
73
+ }, H = {
74
+ padding: "2px 6px",
75
+ borderRadius: "9999px",
76
+ fontSize: "10px",
77
+ textTransform: "uppercase"
78
+ }, M = ({ groupId: s }) => R() !== s ? null : /* @__PURE__ */ e(W, {}), W = () => {
79
+ const n = T().groups, [o, g] = A(!0);
80
+ if (n.length === 0 || typeof document > "u")
81
+ return null;
82
+ const u = n.reduce((r, d) => r + d.panels.length, 0), h = n.reduce((r, d) => r + (d.handles?.length ?? 0), 0), m = () => g((r) => !r), f = /* @__PURE__ */ t(
83
+ "div",
84
+ {
85
+ style: {
86
+ ...w,
87
+ padding: o ? "10px 18px" : "14px 18px",
88
+ maxHeight: o ? "52px" : "min(65vh, 520px)",
89
+ transition: "max-height 0.24s ease, padding 0.24s ease"
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ t(
93
+ "div",
94
+ {
95
+ style: {
96
+ ...C,
97
+ marginBottom: o ? 0 : "12px"
98
+ },
99
+ children: [
100
+ /* @__PURE__ */ t("div", { style: D, children: [
101
+ /* @__PURE__ */ e(
102
+ "span",
103
+ {
104
+ style: {
105
+ fontWeight: 700,
106
+ fontSize: "12px",
107
+ letterSpacing: "0.03em"
108
+ },
109
+ children: "Panel Overview"
110
+ }
111
+ ),
112
+ /* @__PURE__ */ t("span", { style: { color: "#cbd5f5" }, children: [
113
+ "groups: ",
114
+ n.length,
115
+ " / panels: ",
116
+ u,
117
+ " / resizers: ",
118
+ h
119
+ ] })
120
+ ] }),
121
+ /* @__PURE__ */ e(
122
+ "button",
123
+ {
124
+ type: "button",
125
+ onClick: m,
126
+ style: {
127
+ ...N,
128
+ backgroundColor: o ? "rgba(59, 130, 246, 0.2)" : "rgba(71, 85, 105, 0.45)"
129
+ },
130
+ title: o ? "Panel Overview を開く" : "Panel Overview を閉じる",
131
+ children: o ? "開く" : "閉じる"
132
+ }
133
+ )
134
+ ]
135
+ }
136
+ ),
137
+ !o && /* @__PURE__ */ e(
138
+ "div",
139
+ {
140
+ style: {
141
+ display: "flex",
142
+ flexDirection: "column",
143
+ gap: "12px",
144
+ maxHeight: "45vh",
145
+ overflowY: "auto",
146
+ paddingRight: "6px"
147
+ },
148
+ children: n.map((r, d) => {
149
+ const l = r.direction === "horizontal" ? r.containerSize.width : r.containerSize.height;
150
+ return /* @__PURE__ */ t("div", { style: k, children: [
151
+ /* @__PURE__ */ t(
152
+ "div",
153
+ {
154
+ style: {
155
+ ...x,
156
+ flexWrap: "wrap",
157
+ gap: "10px",
158
+ color: "#dbeafe"
159
+ },
160
+ children: [
161
+ /* @__PURE__ */ t(
162
+ "span",
163
+ {
164
+ style: {
165
+ fontWeight: 600,
166
+ fontSize: "11px",
167
+ letterSpacing: "0.02em",
168
+ textTransform: "uppercase"
169
+ },
170
+ children: [
171
+ "group ",
172
+ d + 1,
173
+ ": ",
174
+ r.displayName
175
+ ]
176
+ }
177
+ ),
178
+ /* @__PURE__ */ t("span", { children: [
179
+ "direction: ",
180
+ r.direction,
181
+ " / container: ",
182
+ a(r.containerSize.width, "px"),
183
+ " × ",
184
+ a(r.containerSize.height, "px")
185
+ ] })
186
+ ]
187
+ }
188
+ ),
189
+ /* @__PURE__ */ e(
190
+ "div",
191
+ {
192
+ style: {
193
+ display: "grid",
194
+ gridTemplateColumns: "repeat(auto-fill, minmax(220px, 1fr))",
195
+ gap: "10px"
196
+ },
197
+ children: r.panels.map((i, b) => {
198
+ const c = i.measuredPixelSize ?? i.size, y = i.size, S = a(y, "px"), v = i.percentageSize ?? (l > 0 ? i.size / l * 100 : void 0), E = i.measuredPercentageSize !== void 0 ? i.measuredPercentageSize : l > 0 ? c / l * 100 : void 0, p = i.collapsed || c <= Y, z = i.collapsed ? "collapsed" : p ? "hidden" : "visible", O = a(v, "%"), L = a(E, "%"), _ = a(c, "px");
199
+ return /* @__PURE__ */ t("div", { style: I, children: [
200
+ /* @__PURE__ */ t("div", { style: x, children: [
201
+ /* @__PURE__ */ e("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis" }, children: i.id }),
202
+ /* @__PURE__ */ e(
203
+ "span",
204
+ {
205
+ style: {
206
+ ...H,
207
+ backgroundColor: i.collapsed ? "rgba(251, 113, 133, 0.25)" : p ? "rgba(250, 204, 21, 0.25)" : "rgba(74, 222, 128, 0.25)",
208
+ color: i.collapsed ? "#fecdd3" : p ? "#fef08a" : "#bbf7d0"
209
+ },
210
+ children: z
211
+ }
212
+ )
213
+ ] }),
214
+ /* @__PURE__ */ t("div", { style: V, children: [
215
+ /* @__PURE__ */ e("span", { children: "size (state):" }),
216
+ /* @__PURE__ */ e("span", { children: S }),
217
+ /* @__PURE__ */ e("span", { children: "size (measured):" }),
218
+ /* @__PURE__ */ e("span", { children: _ }),
219
+ /* @__PURE__ */ e("span", { children: "percentage (state):" }),
220
+ /* @__PURE__ */ e("span", { children: O }),
221
+ /* @__PURE__ */ e("span", { children: "percentage (measured):" }),
222
+ /* @__PURE__ */ e("span", { children: L }),
223
+ /* @__PURE__ */ e("span", { children: "unit:" }),
224
+ /* @__PURE__ */ e("span", { children: i.sizeUnit }),
225
+ /* @__PURE__ */ e("span", { children: "min:" }),
226
+ /* @__PURE__ */ e("span", { children: i.minSize !== void 0 ? JSON.stringify(i.minSize) : "—" }),
227
+ /* @__PURE__ */ e("span", { children: "auto min:" }),
228
+ /* @__PURE__ */ e("span", { children: i.autoMinSize !== void 0 ? JSON.stringify(i.autoMinSize) : "—" }),
229
+ /* @__PURE__ */ e("span", { children: "max:" }),
230
+ /* @__PURE__ */ e("span", { children: i.maxSize !== void 0 ? JSON.stringify(i.maxSize) : "—" }),
231
+ /* @__PURE__ */ e("span", { children: "priority:" }),
232
+ /* @__PURE__ */ e("span", { children: i.pixelAdjustPriority ?? "—" }),
233
+ /* @__PURE__ */ e("span", { children: "flex priority:" }),
234
+ /* @__PURE__ */ e("span", { children: i.flexAdjustPriority ?? "—" })
235
+ ] })
236
+ ] }, i.id || b);
237
+ })
238
+ }
239
+ )
240
+ ] }, r.groupId);
241
+ })
242
+ }
243
+ )
244
+ ]
245
+ }
246
+ );
247
+ return P(f, document.body);
248
+ };
249
+ export {
250
+ W as GlobalDebugOverlay,
251
+ M as GlobalDebugOverlayGate
252
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),A=require("react"),R=require("react-dom"),x=require("./debugOverlayStore-Dkl-fHoa.cjs"),P=require("./index-xTV-c0PN.cjs"),o=(n,r)=>typeof n!="number"||!Number.isFinite(n)?"—":`${(n<0?0:n).toFixed(8)}${r}`,T={position:"fixed",left:"50%",bottom:"20px",transform:"translate(-50%, 0)",zIndex:100,maxWidth:"min(90vw, 1120px)",width:"100%",borderRadius:"14px",backgroundColor:"rgba(15, 23, 42, 0.72)",color:"#e2e8f0",fontFamily:"monospace",fontSize:"11px",lineHeight:1.6,boxShadow:"0 22px 45px rgba(15,23,42,0.45)",border:"1px solid rgba(148, 163, 184, 0.22)",backdropFilter:"blur(10px)",WebkitBackdropFilter:"blur(10px)",pointerEvents:"auto",overflow:"auto"},Y={display:"flex",justifyContent:"space-between",alignItems:"center",flexWrap:"wrap",gap:"12px"},w={display:"flex",flexDirection:"column",gap:"4px"},D={padding:"6px 10px",borderRadius:"9999px",border:"1px solid rgba(148, 163, 184, 0.35)",color:"#e2e8f0",fontWeight:600,fontSize:"10px",letterSpacing:"0.03em",textTransform:"uppercase",cursor:"pointer",transition:"background-color 0.18s ease, border-color 0.18s ease"},C={padding:"10px 12px",borderRadius:"10px",backgroundColor:"rgba(30, 41, 59, 0.55)",border:"1px solid rgba(148, 163, 184, 0.18)",display:"flex",flexDirection:"column",gap:"10px"},N={padding:"8px 10px",borderRadius:"8px",backgroundColor:"rgba(15, 23, 42, 0.55)",border:"1px solid rgba(148, 163, 184, 0.16)",display:"flex",flexDirection:"column",gap:"4px"},p={display:"flex",justifyContent:"space-between",alignItems:"center",gap:"6px"},k={display:"grid",gridTemplateColumns:"auto 1fr",gap:"2px 10px",color:"#e2e8f0"},G={padding:"2px 6px",borderRadius:"9999px",fontSize:"10px",textTransform:"uppercase"},I=({groupId:n})=>x.useDebugOverlayOwnerId()!==n?null:e.jsx(u,{}),u=()=>{const r=x.useDebugOverlaySnapshot().groups,[t,g]=A.useState(!0);if(r.length===0||typeof document>"u")return null;const b=r.reduce((i,a)=>i+a.panels.length,0),h=r.reduce((i,a)=>i+(a.handles?.length??0),0),m=()=>g(i=>!i),f=e.jsxs("div",{style:{...T,padding:t?"10px 18px":"14px 18px",maxHeight:t?"52px":"min(65vh, 520px)",transition:"max-height 0.24s ease, padding 0.24s ease"},children:[e.jsxs("div",{style:{...Y,marginBottom:t?0:"12px"},children:[e.jsxs("div",{style:w,children:[e.jsx("span",{style:{fontWeight:700,fontSize:"12px",letterSpacing:"0.03em"},children:"Panel Overview"}),e.jsxs("span",{style:{color:"#cbd5f5"},children:["groups: ",r.length," / panels: ",b," / resizers: ",h]})]}),e.jsx("button",{type:"button",onClick:m,style:{...D,backgroundColor:t?"rgba(59, 130, 246, 0.2)":"rgba(71, 85, 105, 0.45)"},title:t?"Panel Overview を開く":"Panel Overview を閉じる",children:t?"開く":"閉じる"})]}),!t&&e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"12px",maxHeight:"45vh",overflowY:"auto",paddingRight:"6px"},children:r.map((i,a)=>{const l=i.direction==="horizontal"?i.containerSize.width:i.containerSize.height;return e.jsxs("div",{style:C,children:[e.jsxs("div",{style:{...p,flexWrap:"wrap",gap:"10px",color:"#dbeafe"},children:[e.jsxs("span",{style:{fontWeight:600,fontSize:"11px",letterSpacing:"0.02em",textTransform:"uppercase"},children:["group ",a+1,": ",i.displayName]}),e.jsxs("span",{children:["direction: ",i.direction," / container: ",o(i.containerSize.width,"px")," × ",o(i.containerSize.height,"px")]})]}),e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(220px, 1fr))",gap:"10px"},children:i.panels.map((s,y)=>{const d=s.measuredPixelSize??s.size,S=s.size,j=o(S,"px"),v=s.percentageSize??(l>0?s.size/l*100:void 0),O=s.measuredPercentageSize!==void 0?s.measuredPercentageSize:l>0?d/l*100:void 0,c=s.collapsed||d<=P.PANEL_SNAP_THRESHOLD,E=s.collapsed?"collapsed":c?"hidden":"visible",z=o(v,"%"),L=o(O,"%"),_=o(d,"px");return e.jsxs("div",{style:N,children:[e.jsxs("div",{style:p,children:[e.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},children:s.id}),e.jsx("span",{style:{...G,backgroundColor:s.collapsed?"rgba(251, 113, 133, 0.25)":c?"rgba(250, 204, 21, 0.25)":"rgba(74, 222, 128, 0.25)",color:s.collapsed?"#fecdd3":c?"#fef08a":"#bbf7d0"},children:E})]}),e.jsxs("div",{style:k,children:[e.jsx("span",{children:"size (state):"}),e.jsx("span",{children:j}),e.jsx("span",{children:"size (measured):"}),e.jsx("span",{children:_}),e.jsx("span",{children:"percentage (state):"}),e.jsx("span",{children:z}),e.jsx("span",{children:"percentage (measured):"}),e.jsx("span",{children:L}),e.jsx("span",{children:"unit:"}),e.jsx("span",{children:s.sizeUnit}),e.jsx("span",{children:"min:"}),e.jsx("span",{children:s.minSize!==void 0?JSON.stringify(s.minSize):"—"}),e.jsx("span",{children:"auto min:"}),e.jsx("span",{children:s.autoMinSize!==void 0?JSON.stringify(s.autoMinSize):"—"}),e.jsx("span",{children:"max:"}),e.jsx("span",{children:s.maxSize!==void 0?JSON.stringify(s.maxSize):"—"}),e.jsx("span",{children:"priority:"}),e.jsx("span",{children:s.pixelAdjustPriority??"—"}),e.jsx("span",{children:"flex priority:"}),e.jsx("span",{children:s.flexAdjustPriority??"—"})]})]},s.id||y)})})]},i.groupId)})})]});return R.createPortal(f,document.body)};exports.GlobalDebugOverlay=u;exports.GlobalDebugOverlayGate=I;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @file Global debug overlay for resizable panel groups.
3
+ * リサイズパネルグループ用のグローバルデバッグオーバーレイ。
4
+ *
5
+ * PanelGroup 本体から dynamic import で遅延読み込みされる。
6
+ * showDebugInfo を使わないアプリのバンドルにオーバーレイ UI とストア購読を含めないための分離。
7
+ */
8
+ /**
9
+ * Render the overlay only for the group that currently owns it.
10
+ * オーバーレイの所有権を持つグループの場合のみ描画するゲート。
11
+ * 所有権ストアの購読をこの遅延モジュール内へ閉じ込め、非デバッグ利用時の購読を発生させない。
12
+ */
13
+ export declare const GlobalDebugOverlayGate: ({ groupId }: {
14
+ groupId: string;
15
+ }) => import("react").JSX.Element | null;
16
+ /**
17
+ * Render global debug overlay displaying state for all active panel groups.
18
+ * すべてのアクティブなパネルグループの状態を表示するグローバルデバッグオーバーレイを描画。
19
+ */
20
+ export declare const GlobalDebugOverlay: () => import('react').ReactPortal | null;
21
+ //# sourceMappingURL=GlobalDebugOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalDebugOverlay.d.ts","sourceRoot":"","sources":["../src/GlobalDebugOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyGH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,uCAMtE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,0CA2J9B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../src/Panel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAA6C,UAAU,EAAE,MAAM,SAAS,CAAA;AA6FpF;;;GAGG;AACH,eAAO,MAAM,KAAK,mOACwO,UAAU,iCA8dnQ,CAAA"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../src/Panel.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAA6C,UAAU,EAAE,MAAM,SAAS,CAAA;AA6FpF;;;GAGG;AACH,eAAO,MAAM,KAAK,mOACwO,UAAU,iCA+gBnQ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelGroup.d.ts","sourceRoot":"","sources":["../src/PanelGroup.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwK9C;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,gCAuJhD,CAAA"}
1
+ {"version":3,"file":"PanelGroup.d.ts","sourceRoot":"","sources":["../src/PanelGroup.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AA2E9C;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,gCA2KhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelResizeHandle.d.ts","sourceRoot":"","sources":["../src/PanelResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EASH,KAAK,sBAAsB,EAE9B,MAAM,SAAS,CAAA;AAGhB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iGAA2E,sBAAsB,iCA6jB7H,CAAA"}
1
+ {"version":3,"file":"PanelResizeHandle.d.ts","sourceRoot":"","sources":["../src/PanelResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAUH,KAAK,sBAAsB,EAE9B,MAAM,SAAS,CAAA;AAGhB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iGAA2E,sBAAsB,iCAkrB7H,CAAA"}
@@ -0,0 +1,141 @@
1
+ import { useSyncExternalStore as x } from "react";
2
+ const D = (s) => JSON.stringify(
3
+ s.map((e) => ({
4
+ id: e.id,
5
+ size: e.size,
6
+ percentageSize: e.percentageSize ?? null,
7
+ preferredPercentageSize: e.preferredPercentageSize ?? null,
8
+ preferredPixelSize: e.preferredPixelSize ?? null,
9
+ sizeUnit: e.sizeUnit,
10
+ originalPixelSize: e.originalPixelSize ?? null,
11
+ minSize: e.minSize ?? null,
12
+ maxSize: e.maxSize ?? null,
13
+ autoMinSize: e.autoMinSize ?? null,
14
+ collapseFromStart: e.collapseFromStart,
15
+ collapseFromEnd: e.collapseFromEnd,
16
+ collapsedByDirection: e.collapsedByDirection ?? null,
17
+ collapsed: e.collapsed ?? !1,
18
+ sizeBeforeCollapse: e.sizeBeforeCollapse ?? null,
19
+ preferredPercentageSizeBeforeCollapse: e.preferredPercentageSizeBeforeCollapse ?? null,
20
+ preferredPixelSizeBeforeCollapse: e.preferredPixelSizeBeforeCollapse ?? null,
21
+ measuredPixelSizeBeforeCollapse: e.measuredPixelSizeBeforeCollapse ?? null,
22
+ pixelAdjustPriority: e.pixelAdjustPriority ?? null,
23
+ flexAdjustPriority: e.flexAdjustPriority ?? null,
24
+ measuredPixelSize: e.measuredPixelSize ?? null,
25
+ measuredPercentageSize: e.measuredPercentageSize ?? null
26
+ }))
27
+ ), k = (s) => JSON.stringify(
28
+ s.map((e) => ({
29
+ id: e.id,
30
+ thickness: e.thickness,
31
+ visible: e.visible,
32
+ direction: e.direction,
33
+ startPanelId: e.startPanelId ?? null,
34
+ endPanelId: e.endPanelId ?? null
35
+ }))
36
+ ), H = () => {
37
+ const s = /* @__PURE__ */ new Set(), e = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set();
38
+ let c = null, v = 0, u = !0, h = [], P = {
39
+ ownerId: null,
40
+ groups: h
41
+ };
42
+ const y = () => {
43
+ for (const i of s)
44
+ i();
45
+ }, p = () => {
46
+ u = !0, y();
47
+ }, z = () => {
48
+ const i = c;
49
+ if (i && d.has(i))
50
+ return !1;
51
+ c = null;
52
+ const r = d.values().next();
53
+ return r.done || (c = r.value), i !== c;
54
+ };
55
+ return {
56
+ subscribe: (i) => (s.add(i), () => {
57
+ s.delete(i);
58
+ }),
59
+ getSnapshot: () => (z() && (u = !0), u && (h = Array.from(e.values()).sort((r, n) => r.index - n.index).map(({ serializedPanels: r, serializedHandles: n, ...S }) => S), P = {
60
+ ownerId: c,
61
+ groups: h
62
+ }, u = !1), P),
63
+ getOwnerId: () => (z() && (u = !0), c),
64
+ enableGroup: (i) => {
65
+ const r = d.size;
66
+ d.add(i), d.size !== r && z() && p();
67
+ },
68
+ disableGroup: (i) => {
69
+ d.delete(i) && z() && p();
70
+ },
71
+ updateGroup: (i, r) => {
72
+ const n = e.get(i), S = n?.index ?? v++, m = D(r.panels), b = k(r.handles), G = n?.displayName !== r.displayName, C = n?.direction !== r.direction, O = n ? n.containerSize.width !== r.containerSize.width || n.containerSize.height !== r.containerSize.height : !0;
73
+ let f = n?.serializedPanels !== m;
74
+ if (!f && n)
75
+ if (n.panels.length !== r.panels.length)
76
+ f = !0;
77
+ else
78
+ for (let o = 0; o < r.panels.length; o += 1) {
79
+ const l = n.panels[o], t = r.panels[o];
80
+ if (!(l && t)) {
81
+ f = !0;
82
+ break;
83
+ }
84
+ if (l.id !== t.id || l.size !== t.size || l.percentageSize !== t.percentageSize || l.collapsed !== t.collapsed || l.measuredPixelSize !== t.measuredPixelSize || l.measuredPercentageSize !== t.measuredPercentageSize) {
85
+ f = !0;
86
+ break;
87
+ }
88
+ }
89
+ let g = n?.serializedHandles !== b;
90
+ if (!g && n)
91
+ if (n.handles.length !== r.handles.length)
92
+ g = !0;
93
+ else
94
+ for (let o = 0; o < r.handles.length; o += 1) {
95
+ const l = n.handles[o], t = r.handles[o];
96
+ if (!(l && t)) {
97
+ g = !0;
98
+ break;
99
+ }
100
+ if (l.id !== t.id || l.thickness !== t.thickness || l.visible !== t.visible || l.direction !== t.direction || l.startPanelId !== t.startPanelId || l.endPanelId !== t.endPanelId) {
101
+ g = !0;
102
+ break;
103
+ }
104
+ }
105
+ if (!n && r.panels.length === 0 && r.handles.length === 0 || n && !G && !C && !O && !f && !g)
106
+ return;
107
+ const w = r.panels.map((o) => ({ ...o })), I = r.handles.map((o) => ({ ...o })), B = { ...r.containerSize };
108
+ e.set(i, {
109
+ groupId: i,
110
+ displayName: r.displayName,
111
+ direction: r.direction,
112
+ containerSize: B,
113
+ panels: w,
114
+ handles: I,
115
+ index: S,
116
+ serializedPanels: m,
117
+ serializedHandles: b
118
+ }), p();
119
+ },
120
+ removeGroup: (i) => {
121
+ const r = e.delete(i), n = d.delete(i), S = z();
122
+ (r || n || S) && p();
123
+ }
124
+ };
125
+ }, a = H(), U = () => x(a.subscribe, a.getOwnerId, a.getOwnerId), q = () => x(a.subscribe, a.getSnapshot, a.getSnapshot), K = (s) => {
126
+ a.enableGroup(s);
127
+ }, L = (s) => {
128
+ a.disableGroup(s);
129
+ }, Q = (s, e) => {
130
+ a.updateGroup(s, e);
131
+ }, R = (s) => {
132
+ a.removeGroup(s);
133
+ };
134
+ export {
135
+ L as disableDebugOverlayGroup,
136
+ K as enableDebugOverlayGroup,
137
+ R as removeDebugOverlayGroup,
138
+ Q as updateDebugOverlayGroup,
139
+ U as useDebugOverlayOwnerId,
140
+ q as useDebugOverlaySnapshot
141
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),B=s=>JSON.stringify(s.map(e=>({id:e.id,size:e.size,percentageSize:e.percentageSize??null,preferredPercentageSize:e.preferredPercentageSize??null,preferredPixelSize:e.preferredPixelSize??null,sizeUnit:e.sizeUnit,originalPixelSize:e.originalPixelSize??null,minSize:e.minSize??null,maxSize:e.maxSize??null,autoMinSize:e.autoMinSize??null,collapseFromStart:e.collapseFromStart,collapseFromEnd:e.collapseFromEnd,collapsedByDirection:e.collapsedByDirection??null,collapsed:e.collapsed??!1,sizeBeforeCollapse:e.sizeBeforeCollapse??null,preferredPercentageSizeBeforeCollapse:e.preferredPercentageSizeBeforeCollapse??null,preferredPixelSizeBeforeCollapse:e.preferredPixelSizeBeforeCollapse??null,measuredPixelSizeBeforeCollapse:e.measuredPixelSizeBeforeCollapse??null,pixelAdjustPriority:e.pixelAdjustPriority??null,flexAdjustPriority:e.flexAdjustPriority??null,measuredPixelSize:e.measuredPixelSize??null,measuredPercentageSize:e.measuredPercentageSize??null}))),k=s=>JSON.stringify(s.map(e=>({id:e.id,thickness:e.thickness,visible:e.visible,direction:e.direction,startPanelId:e.startPanelId??null,endPanelId:e.endPanelId??null}))),H=()=>{const s=new Set,e=new Map,d=new Set;let c=null,v=0,u=!0,b=[],h={ownerId:null,groups:b};const x=()=>{for(const i of s)i()},f=()=>{u=!0,x()},g=()=>{const i=c;if(i&&d.has(i))return!1;c=null;const r=d.values().next();return r.done||(c=r.value),i!==c};return{subscribe:i=>(s.add(i),()=>{s.delete(i)}),getSnapshot:()=>(g()&&(u=!0),u&&(b=Array.from(e.values()).sort((r,n)=>r.index-n.index).map(({serializedPanels:r,serializedHandles:n,...S})=>S),h={ownerId:c,groups:b},u=!1),h),getOwnerId:()=>(g()&&(u=!0),c),enableGroup:i=>{const r=d.size;d.add(i),d.size!==r&&g()&&f()},disableGroup:i=>{d.delete(i)&&g()&&f()},updateGroup:(i,r)=>{const n=e.get(i),S=n?.index??v++,P=B(r.panels),m=k(r.handles),O=n?.displayName!==r.displayName,G=n?.direction!==r.direction,C=n?n.containerSize.width!==r.containerSize.width||n.containerSize.height!==r.containerSize.height:!0;let z=n?.serializedPanels!==P;if(!z&&n)if(n.panels.length!==r.panels.length)z=!0;else for(let o=0;o<r.panels.length;o+=1){const l=n.panels[o],t=r.panels[o];if(!(l&&t)){z=!0;break}if(l.id!==t.id||l.size!==t.size||l.percentageSize!==t.percentageSize||l.collapsed!==t.collapsed||l.measuredPixelSize!==t.measuredPixelSize||l.measuredPercentageSize!==t.measuredPercentageSize){z=!0;break}}let p=n?.serializedHandles!==m;if(!p&&n)if(n.handles.length!==r.handles.length)p=!0;else for(let o=0;o<r.handles.length;o+=1){const l=n.handles[o],t=r.handles[o];if(!(l&&t)){p=!0;break}if(l.id!==t.id||l.thickness!==t.thickness||l.visible!==t.visible||l.direction!==t.direction||l.startPanelId!==t.startPanelId||l.endPanelId!==t.endPanelId){p=!0;break}}if(!n&&r.panels.length===0&&r.handles.length===0||n&&!O&&!G&&!C&&!z&&!p)return;const w=r.panels.map(o=>({...o})),D=r.handles.map(o=>({...o})),I={...r.containerSize};e.set(i,{groupId:i,displayName:r.displayName,direction:r.direction,containerSize:I,panels:w,handles:D,index:S,serializedPanels:P,serializedHandles:m}),f()},removeGroup:i=>{const r=e.delete(i),n=d.delete(i),S=g();(r||n||S)&&f()}}},a=H(),N=()=>y.useSyncExternalStore(a.subscribe,a.getOwnerId,a.getOwnerId),j=()=>y.useSyncExternalStore(a.subscribe,a.getSnapshot,a.getSnapshot),A=s=>{a.enableGroup(s)},E=s=>{a.disableGroup(s)},F=(s,e)=>{a.updateGroup(s,e)},M=s=>{a.removeGroup(s)};exports.disableDebugOverlayGroup=E;exports.enableDebugOverlayGroup=A;exports.removeDebugOverlayGroup=M;exports.updateDebugOverlayGroup=F;exports.useDebugOverlayOwnerId=N;exports.useDebugOverlaySnapshot=j;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAkF,MAAM,OAAO,CAAA;AAG1H,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAM5J;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,2DAAmE,eAAe;;;;;;;;;;;+BA0gBvE,eAAe;8BA8ChB,MAAM;+BA6BlC,MAAM,WAAW,MAAM,YAAY,MAAM,aAAa,MAAM;4BAoFhE,MAAM,QAAQ,sBAAsB;0BAapC,MAAM,QAAQ,sBAAsB,eAAe,MAAM;uBAazD,MAAM;0CAWsC,MAAM,eAAe,gBAAgB,GAAG,IAAI;;4CAsD1C,MAAM,eAAe,sBAAsB,GAAG,IAAI;;;;;CA2E5G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM;;;;;qBAKjC,sBAAsB;mBAOtB,sBAAsB,eAAe,MAAM;mBAO3C,sBAAsB,eAAe,MAAM;CAsBzD,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAkF,MAAM,OAAO,CAAA;AAG1H,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAM5J;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,2DAAmE,eAAe;;;;;;;;;;;+BA8iBvE,eAAe;8BAgDhB,MAAM;+BAmClC,MAAM,WAAW,MAAM,YAAY,MAAM,aAAa,MAAM;4BAoFhE,MAAM,QAAQ,sBAAsB;0BAapC,MAAM,QAAQ,sBAAsB,eAAe,MAAM;uBAazD,MAAM;0CAWsC,MAAM,eAAe,gBAAgB,GAAG,IAAI;;4CAiE1C,MAAM,eAAe,sBAAsB,GAAG,IAAI;;;;;CA2E5G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM;;;;;qBAKjC,sBAAsB;mBAOtB,sBAAsB,eAAe,MAAM;mBAO3C,sBAAsB,eAAe,MAAM;CAsBzD,CAAA"}