@aiquants/resize-panels 1.5.1 → 1.7.0

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/dist/index.js ADDED
@@ -0,0 +1,2279 @@
1
+ import { createContext as vt, useContext as Mt, useCallback as Se, useMemo as ae, useReducer as wt, useState as Me, useRef as J, useEffect as se, useLayoutEffect as Xe, memo as it, useId as zt, useSyncExternalStore as ht } from "react";
2
+ import { jsx as I, jsxs as fe } from "react/jsx-runtime";
3
+ import { twMerge as $e } from "tailwind-merge";
4
+ import { createPortal as Et } from "react-dom";
5
+ const gt = vt(null), rt = () => {
6
+ const t = Mt(gt);
7
+ if (!t)
8
+ throw new Error("usePanelGroup must be used within a PanelGroup");
9
+ return t;
10
+ }, xt = (t, e = 0) => {
11
+ if (!Number.isFinite(t))
12
+ return t;
13
+ const n = 10 ** e, d = t * n, r = Math.floor(d), c = d - r, i = Number.EPSILON * Math.max(1, Math.abs(d));
14
+ return c < 0.5 - i ? r / n : c > 0.5 + i ? (r + 1) / n : (r % 2 === 0 ? r : r + 1) / n;
15
+ }, St = 12, nt = 8, Bt = 8, Rt = 8, mt = 0.05, Pt = 10, It = 0.05, Ft = 20, Nt = 0.05, ot = 0, bt = 6, Ce = (t, e) => e <= 0 ? 0 : xt(t / e * 100, bt), We = (t, e) => !t || e <= 0 ? 0 : t / 100 * e, Qe = (t, e = "percentage") => {
16
+ if (t !== void 0)
17
+ return typeof t == "number" ? { value: t, unit: e } : t;
18
+ }, st = (t, e) => t ? t.unit === "percentage" ? t.value / 100 * e : t.value : 0, te = (t, e, n) => t ? typeof t == "number" ? t / 100 * n : t.unit === "pixels" ? t.value : t.value / 100 * n : e, me = (t, e, n) => Math.min(Math.max(t, e), n), et = (t) => {
19
+ if (!Number.isFinite(t) || t <= 0)
20
+ return ot;
21
+ const e = t * mt, n = Math.min(St, Pt, e);
22
+ return Math.max(ot, n);
23
+ }, Ct = (t, e, n, d = {}) => {
24
+ if (Math.abs(e) <= 0)
25
+ return e;
26
+ const r = d.enforceAutoMinSize ?? !1, c = t.map((s, a) => ({ panel: s, index: a })).filter(({ panel: s }) => !s.collapsed && (s.sizeUnit === "pixels" || s.originalPixelSize !== void 0));
27
+ if (c.length === 0)
28
+ return e;
29
+ const i = e > 0, p = [...c].sort((s, a) => {
30
+ const o = s.panel.pixelAdjustPriority ?? s.index + 1, h = a.panel.pixelAdjustPriority ?? a.index + 1;
31
+ return o === h ? i ? a.index - s.index : s.index - a.index : i ? h - o : o - h;
32
+ });
33
+ let u = e;
34
+ const z = (s) => {
35
+ for (const { index: a } of p) {
36
+ if (Math.abs(u) <= 0)
37
+ break;
38
+ const o = t[a];
39
+ if (!o || o.collapsed)
40
+ continue;
41
+ const h = Qe(o.minSize, "pixels"), b = Qe(o.maxSize, "pixels"), m = h ? st(h, n) : 0, v = b ? st(b, n) : n, x = r ? te(o.autoMinSize, 0, n) : 0, C = Math.max(m, x), S = o.preferredPixelSize !== void 0 ? me(o.preferredPixelSize, C, v) : o.size, D = o.collapseFromStart || o.collapseFromEnd;
42
+ if (u > 0) {
43
+ if (Math.abs(o.size) <= 0 && (o.percentageSize ?? 0) <= 0)
44
+ continue;
45
+ const re = Math.max(o.size, S), de = s ? Math.min(v, re) : v, j = Math.max(0, de - o.size);
46
+ if (j <= 0)
47
+ continue;
48
+ const _ = Math.min(j, u);
49
+ if (_ <= 0)
50
+ continue;
51
+ const E = o.size + _, oe = Ce(E, n), U = D ? E : o.sizeBeforeCollapse, V = D ? o.measuredPixelSizeBeforeCollapse ?? o.measuredPixelSize ?? E : o.measuredPixelSizeBeforeCollapse;
52
+ t[a] = {
53
+ ...o,
54
+ size: E,
55
+ percentageSize: oe,
56
+ sizeBeforeCollapse: U,
57
+ measuredPixelSizeBeforeCollapse: V,
58
+ measuredPixelSize: void 0,
59
+ measuredPercentageSize: void 0
60
+ }, u -= _;
61
+ } else {
62
+ const X = s ? S : C, re = Math.max(0, o.size - X);
63
+ if (re <= 0)
64
+ continue;
65
+ const de = Math.min(re, Math.abs(u));
66
+ if (de <= 0)
67
+ continue;
68
+ const j = o.size - de, _ = Ce(j, n), E = D ? j : o.sizeBeforeCollapse, oe = D ? o.measuredPixelSizeBeforeCollapse ?? o.measuredPixelSize ?? j : o.measuredPixelSizeBeforeCollapse;
69
+ t[a] = {
70
+ ...o,
71
+ size: j,
72
+ percentageSize: _,
73
+ sizeBeforeCollapse: E,
74
+ measuredPixelSizeBeforeCollapse: oe,
75
+ measuredPixelSize: void 0,
76
+ measuredPercentageSize: void 0
77
+ }, u += de;
78
+ }
79
+ }
80
+ };
81
+ return z(!0), (i && u > 0 || !i && u < 0) && z(!1), u;
82
+ }, Ve = (t) => {
83
+ if (!t)
84
+ return 0;
85
+ const e = parseFloat(t);
86
+ return Number.isFinite(e) ? e : 0;
87
+ }, Oe = (t, e) => {
88
+ const n = t.getBoundingClientRect(), d = typeof window < "u" ? window.getComputedStyle(t) : null, r = d ? Ve(d.borderLeftWidth) + Ve(d.borderRightWidth) : 0, c = d ? Ve(d.borderTopWidth) + Ve(d.borderBottomWidth) : 0;
89
+ if (e === "horizontal") {
90
+ const z = n.width > 0 ? n.width : t.offsetWidth, s = n.width > 0 ? Math.max(0, n.width - r) : t.clientWidth, a = t.offsetWidth > 0 ? t.offsetWidth : t.clientWidth + r;
91
+ return {
92
+ inner: s > 0 ? s : Math.max(0, t.clientWidth),
93
+ outer: z > 0 ? z : Math.max(0, a)
94
+ };
95
+ }
96
+ const i = n.height > 0 ? n.height : t.offsetHeight, p = n.height > 0 ? Math.max(0, n.height - c) : t.clientHeight, u = t.offsetHeight > 0 ? t.offsetHeight : t.clientHeight + c;
97
+ return {
98
+ inner: p > 0 ? p : Math.max(0, t.clientHeight),
99
+ outer: i > 0 ? i : Math.max(0, u)
100
+ };
101
+ }, At = (t, e) => {
102
+ try {
103
+ localStorage.setItem(`panel-layout-${t}`, JSON.stringify(e));
104
+ } catch (n) {
105
+ console.warn("Failed to save panel layout:", n);
106
+ }
107
+ }, Lt = (t) => {
108
+ try {
109
+ const e = localStorage.getItem(`panel-layout-${t}`);
110
+ return e ? JSON.parse(e) : null;
111
+ } catch (e) {
112
+ return console.warn("Failed to load panel layout:", e), null;
113
+ }
114
+ };
115
+ var qe = /* @__PURE__ */ ((t) => (t[t.DEBUG = 0] = "DEBUG", t[t.INFO = 1] = "INFO", t[t.WARN = 2] = "WARN", t[t.ERROR = 3] = "ERROR", t[t.NONE = 4] = "NONE", t))(qe || {});
116
+ const Ee = class Ee {
117
+ /**
118
+ * @constructor
119
+ * @param {LogLevel} [level=LogLevel.WARN] - The minimum log level to output.
120
+ * @param {string} [prefix="[resize-panels]"] - The prefix to add to all log messages.
121
+ * @param {ILogger} [impl=console] - The implementation to use for logging.
122
+ */
123
+ constructor(e = 2, n = "[resize-panels]", d = console) {
124
+ this.level = e, this.prefix = n, this.impl = d;
125
+ }
126
+ /**
127
+ * @method setLevel
128
+ * @description Updates the current log level for the static instance.
129
+ * @description 静的インスタンスの現在のログレベルを更新します。
130
+ * @param {LogLevel} level - The new log level.
131
+ */
132
+ static setLevel(e) {
133
+ Ee.instance.setLevel(e);
134
+ }
135
+ /**
136
+ * @method setLevel
137
+ * @description Updates the current log level.
138
+ * @description 現在のログレベルを更新します。
139
+ * @param {LogLevel} level - The new log level.
140
+ */
141
+ setLevel(e) {
142
+ this.level = e;
143
+ }
144
+ /**
145
+ * @method setImplementation
146
+ * @description Updates the logger implementation for the static instance.
147
+ * @description 静的インスタンスのロガーの実装を更新します。
148
+ * @param {ILogger} impl - The new logger implementation.
149
+ */
150
+ static setImplementation(e) {
151
+ Ee.instance.setImplementation(e);
152
+ }
153
+ /**
154
+ * @method setImplementation
155
+ * @description Updates the logger implementation.
156
+ * @description ロガーの実装を更新します。
157
+ * @param {ILogger} impl - The new logger implementation.
158
+ */
159
+ setImplementation(e) {
160
+ this.impl = e;
161
+ }
162
+ /**
163
+ * @method setPrefix
164
+ * @description Updates the log prefix for the static instance.
165
+ * @description 静的インスタンスのログのプレフィックスを更新します。
166
+ * @param {string} prefix - The new prefix.
167
+ */
168
+ static setPrefix(e) {
169
+ Ee.instance.setPrefix(e);
170
+ }
171
+ /**
172
+ * @method setPrefix
173
+ * @description Updates the log prefix.
174
+ * @description ログのプレフィックスを更新します。
175
+ * @param {string} prefix - The new prefix.
176
+ */
177
+ setPrefix(e) {
178
+ this.prefix = e;
179
+ }
180
+ formatMessage(e) {
181
+ return typeof e == "string" ? [`${this.prefix} ${e}`] : [this.prefix, e];
182
+ }
183
+ static debug(e, ...n) {
184
+ Ee.instance.debug(e, ...n);
185
+ }
186
+ debug(e, ...n) {
187
+ this.level <= 0 && this.impl.debug(...this.formatMessage(e), ...n);
188
+ }
189
+ static info(e, ...n) {
190
+ Ee.instance.info(e, ...n);
191
+ }
192
+ info(e, ...n) {
193
+ this.level <= 1 && this.impl.info(...this.formatMessage(e), ...n);
194
+ }
195
+ static warn(e, ...n) {
196
+ Ee.instance.warn(e, ...n);
197
+ }
198
+ warn(e, ...n) {
199
+ this.level <= 2 && this.impl.warn(...this.formatMessage(e), ...n);
200
+ }
201
+ static error(e, ...n) {
202
+ Ee.instance.error(e, ...n);
203
+ }
204
+ error(e, ...n) {
205
+ this.level <= 3 && this.impl.error(...this.formatMessage(e), ...n);
206
+ }
207
+ };
208
+ Ee.instance = new Ee(2, "[resize-panels]");
209
+ let je = Ee;
210
+ const ze = new je(qe.INFO, "[resize-panels]"), ve = (t) => t.map((e) => ({
211
+ id: e.id,
212
+ size: e.size,
213
+ percentageSize: e.percentageSize,
214
+ preferredPercentageSize: e.preferredPercentageSize,
215
+ sizeBeforeCollapse: e.sizeBeforeCollapse,
216
+ percentageSizeBeforeCollapse: e.percentageSizeBeforeCollapse,
217
+ preferredPercentageSizeBeforeCollapse: e.preferredPercentageSizeBeforeCollapse,
218
+ measuredPercentageSize: e.measuredPercentageSize,
219
+ excludeFromAutoGrowth: e.excludeFromAutoGrowth ?? !1,
220
+ collapsed: e.collapsed ?? !1,
221
+ collapseFromStart: e.collapseFromStart,
222
+ collapseFromEnd: e.collapseFromEnd,
223
+ collapsedByDirection: e.collapsedByDirection ?? null
224
+ })), Ye = (t) => t ? ve([t])[0] : null, De = (t) => t ? !!(t.collapseFromStart || t.collapseFromEnd) : !1, Ke = (t, e) => {
225
+ if (!Number.isFinite(e) || e <= 0)
226
+ return t;
227
+ const n = t.map((u) => ({ ...u })), d = [];
228
+ for (let u = 0; u < n.length; u += 1) {
229
+ const z = n[u];
230
+ if (z.collapsed) {
231
+ n[u] = {
232
+ ...z,
233
+ size: 0,
234
+ percentageSize: 0
235
+ };
236
+ continue;
237
+ }
238
+ const s = Math.max(0, te(z.minSize, 0, e)), a = Math.max(0, te(z.autoMinSize, 0, e)), o = Math.max(s, a), h = Math.max(1e-3, o), b = te(z.maxSize, e, e), m = Math.max(o, b), v = z.sizeUnit === "pixels" || z.originalPixelSize !== void 0, x = Math.max(0, z.size);
239
+ let C = o;
240
+ if (v) {
241
+ const D = z.preferredPixelSize ?? z.size ?? z.originalPixelSize ?? o;
242
+ C = me(D, o, m);
243
+ } else {
244
+ const D = z.preferredPercentageSize ?? z.percentageSize ?? Ce(z.size, e), X = We(D, e);
245
+ C = me(X, o, m);
246
+ }
247
+ const S = !v && (z.excludeFromAutoGrowth ?? !1) && x <= h;
248
+ d.push({
249
+ index: u,
250
+ isPixelPanel: v,
251
+ minSize: o,
252
+ maxSize: m,
253
+ preferredSize: C,
254
+ priority: z.pixelAdjustPriority ?? u + 1,
255
+ flexPriority: v ? void 0 : z.flexAdjustPriority,
256
+ excludeFromGrowth: S
257
+ });
258
+ }
259
+ if (d.length === 0)
260
+ return n;
261
+ const r = /* @__PURE__ */ new Map();
262
+ let c = 0;
263
+ for (const u of d)
264
+ r.set(u.index, u.minSize), c += u.minSize;
265
+ let i = e - c;
266
+ const p = (u, z) => {
267
+ if (z <= 0)
268
+ return 0;
269
+ const s = r.get(u.index) ?? u.minSize, a = Math.max(0, u.maxSize - s);
270
+ if (a <= 0)
271
+ return 0;
272
+ const o = Math.min(z, a);
273
+ return r.set(u.index, s + o), o;
274
+ };
275
+ if (i > 0) {
276
+ const u = (s) => {
277
+ for (; i > 1e-6; ) {
278
+ let o = 0;
279
+ const h = [];
280
+ for (const v of s) {
281
+ if (!v.isPixelPanel && v.excludeFromGrowth)
282
+ continue;
283
+ const x = r.get(v.index) ?? v.minSize, C = Math.min(v.preferredSize, v.maxSize), S = Math.max(0, C - x);
284
+ S > 1e-6 && (o += S, h.push({ descriptor: v, capacity: S }));
285
+ }
286
+ if (h.length === 0 || o <= 1e-6)
287
+ break;
288
+ let b = 0;
289
+ const m = i;
290
+ for (const v of h) {
291
+ if (i <= 1e-6)
292
+ break;
293
+ if (!v.descriptor.isPixelPanel && v.descriptor.excludeFromGrowth)
294
+ continue;
295
+ const x = m * v.capacity / o, C = Math.min(v.capacity, x);
296
+ if (C <= 0)
297
+ continue;
298
+ const S = p(v.descriptor, C);
299
+ S > 0 && (i -= S, b += S);
300
+ }
301
+ if (b <= 1e-6)
302
+ break;
303
+ }
304
+ }, z = d.filter((s) => s.isPixelPanel);
305
+ z.sort((s, a) => a.priority - s.priority);
306
+ for (const s of z) {
307
+ if (i <= 0)
308
+ break;
309
+ const a = r.get(s.index) ?? s.minSize, o = Math.min(s.preferredSize, s.maxSize), h = Math.max(0, o - a);
310
+ if (h <= 0)
311
+ continue;
312
+ const b = p(s, Math.min(h, i));
313
+ b > 0 && (i -= b);
314
+ }
315
+ if (i > 0) {
316
+ const s = d.filter((a) => !a.isPixelPanel);
317
+ if (s.length > 0) {
318
+ const a = s.filter((o) => o.flexPriority !== void 0 && !o.excludeFromGrowth);
319
+ if (a.length > 0) {
320
+ a.sort((o, h) => (h.flexPriority ?? 0) - (o.flexPriority ?? 0));
321
+ for (const o of a) {
322
+ if (i <= 0)
323
+ break;
324
+ if (o.excludeFromGrowth)
325
+ continue;
326
+ const h = r.get(o.index) ?? o.minSize, b = Math.min(o.preferredSize, o.maxSize), m = Math.max(0, b - h);
327
+ if (m <= 0)
328
+ continue;
329
+ const v = p(o, Math.min(m, i));
330
+ v > 0 && (i -= v);
331
+ }
332
+ }
333
+ if (i > 0) {
334
+ const o = a.length > 0 ? s.filter((h) => h.flexPriority === void 0 && !h.excludeFromGrowth) : s.filter((h) => !h.excludeFromGrowth);
335
+ o.length > 0 && u(o);
336
+ }
337
+ }
338
+ }
339
+ }
340
+ if (i > 0) {
341
+ let u = i;
342
+ for (; ; ) {
343
+ let z = 0;
344
+ const s = [];
345
+ for (const o of d) {
346
+ if (!o.isPixelPanel && o.excludeFromGrowth)
347
+ continue;
348
+ const h = r.get(o.index) ?? o.minSize, b = o.isPixelPanel ? Math.min(o.maxSize, o.preferredSize) : o.maxSize, m = Math.max(0, b - h);
349
+ m > 0 && (s.push(o), z += m);
350
+ }
351
+ if (z <= 0)
352
+ break;
353
+ const a = i;
354
+ for (const o of s) {
355
+ if (i <= 0)
356
+ break;
357
+ if (!o.isPixelPanel && o.excludeFromGrowth)
358
+ continue;
359
+ const h = r.get(o.index) ?? o.minSize, b = o.isPixelPanel ? Math.min(o.maxSize, o.preferredSize) : o.maxSize, m = Math.max(0, b - h);
360
+ if (m <= 0)
361
+ continue;
362
+ const v = a * m / z, x = p(o, Math.min(m, v));
363
+ x > 0 && (i -= x);
364
+ }
365
+ if (i <= 1e-6 || Math.abs(u - i) <= 1e-6)
366
+ break;
367
+ u = i;
368
+ }
369
+ i = Math.max(0, i);
370
+ }
371
+ if (i < 0) {
372
+ let u = i;
373
+ const z = d.filter((s) => s.isPixelPanel);
374
+ for (z.sort((s, a) => s.priority - a.priority); !(i >= 0); ) {
375
+ let s = !1;
376
+ for (const a of z) {
377
+ if (i >= 0)
378
+ break;
379
+ const o = r.get(a.index) ?? a.minSize, h = me(a.preferredSize, a.minSize, a.maxSize), b = Math.max(0, o - h);
380
+ if (b > 0 && i < 0) {
381
+ const v = Math.min(b, Math.abs(i));
382
+ r.set(a.index, o - v), i += v, s = !0;
383
+ continue;
384
+ }
385
+ const m = Math.max(0, o - a.minSize);
386
+ if (m > 0 && i < 0) {
387
+ const v = Math.min(m, Math.abs(i));
388
+ r.set(a.index, o - v), i += v, s = !0;
389
+ }
390
+ }
391
+ if (!s || Math.abs(u - i) <= 1e-6)
392
+ break;
393
+ u = i;
394
+ }
395
+ }
396
+ for (const u of d) {
397
+ const z = r.get(u.index) ?? u.minSize, s = n[u.index], a = De(s), o = a ? z : s.sizeBeforeCollapse, h = a ? s.measuredPixelSizeBeforeCollapse ?? s.measuredPixelSize ?? z : s.measuredPixelSizeBeforeCollapse, b = e > 0 ? Ce(z, e) : 0;
398
+ n[u.index] = {
399
+ ...s,
400
+ size: z,
401
+ percentageSize: b,
402
+ preferredPercentageSize: s.preferredPercentageSize,
403
+ preferredPixelSize: u.isPixelPanel ? s.preferredPixelSize ?? z : s.preferredPixelSize,
404
+ sizeBeforeCollapse: o,
405
+ measuredPixelSizeBeforeCollapse: h,
406
+ measuredPixelSize: void 0,
407
+ measuredPercentageSize: void 0
408
+ };
409
+ }
410
+ return Le(n);
411
+ }, Le = (t) => {
412
+ let e = 0;
413
+ for (const r of t)
414
+ r.collapsed || (e += Math.max(r.size, 0));
415
+ if (e <= 0) {
416
+ let r = !1;
417
+ const c = t.map((i) => (i.percentageSize ?? 0) !== 0 ? (r = !0, {
418
+ ...i,
419
+ percentageSize: 0,
420
+ measuredPercentageSize: i.measuredPercentageSize !== void 0 ? 0 : i.measuredPercentageSize
421
+ }) : !i.collapsed && i.sizeBeforeCollapse !== i.size ? (r = !0, {
422
+ ...i,
423
+ sizeBeforeCollapse: i.size
424
+ }) : i);
425
+ return r ? c : t;
426
+ }
427
+ let n = !1;
428
+ const d = t.map((r) => {
429
+ if (r.collapsed)
430
+ return (r.percentageSize ?? 0) !== 0 ? (n = !0, {
431
+ ...r,
432
+ percentageSize: 0,
433
+ measuredPercentageSize: r.measuredPercentageSize !== void 0 ? 0 : r.measuredPercentageSize
434
+ }) : r;
435
+ const c = Ce(r.size, e), i = r.measuredPercentageSize, z = (i !== void 0 ? Math.abs(i - c) : 1 / 0) < 1e-4 && i !== void 0 ? i : c, s = xt(z, bt), o = Math.abs((r.percentageSize ?? 0) - s) > 0 || r.percentageSize === void 0, h = r.sizeBeforeCollapse === void 0 || r.sizeBeforeCollapse !== r.size, b = De(r), m = b && h, v = r.measuredPixelSize ?? r.size, x = b && (r.measuredPixelSizeBeforeCollapse === void 0 || r.measuredPixelSizeBeforeCollapse !== v);
436
+ if (!(o || m || x))
437
+ return r;
438
+ n = !0;
439
+ const C = m ? r.size : r.sizeBeforeCollapse, S = x ? v : r.measuredPixelSizeBeforeCollapse;
440
+ return {
441
+ ...r,
442
+ percentageSize: s,
443
+ sizeBeforeCollapse: C,
444
+ measuredPixelSizeBeforeCollapse: S,
445
+ collapsedByDirection: r.collapsed ? r.collapsedByDirection ?? null : null
446
+ };
447
+ });
448
+ return n ? d : t;
449
+ }, Ze = (t, e) => {
450
+ if (e <= 0)
451
+ return !1;
452
+ const n = [];
453
+ let d = 0;
454
+ for (let s = 0; s < t.length; s += 1) {
455
+ const a = t[s];
456
+ !a || a.collapsed || (n.push(s), d += a.size);
457
+ }
458
+ if (n.length === 0)
459
+ return !1;
460
+ let r = e - d;
461
+ if (Math.abs(r) <= 0)
462
+ return !1;
463
+ let c = !1;
464
+ const i = (s) => {
465
+ const a = t[s], o = te(a.minSize, 0, e), h = te(a.autoMinSize, 0, e), b = Math.max(o, h), m = te(a.maxSize, e, e), v = a.sizeUnit === "percentage" && a.originalPixelSize === void 0;
466
+ return {
467
+ index: s,
468
+ minSize: b,
469
+ maxSize: m,
470
+ isFlexible: v
471
+ };
472
+ }, p = (s, a) => {
473
+ if (!Number.isFinite(a) || Math.abs(a) <= 0)
474
+ return;
475
+ const o = t[s];
476
+ if (!o)
477
+ return;
478
+ const h = Math.max(0, o.size + a);
479
+ if (Math.abs(h - o.size) <= 0)
480
+ return;
481
+ const b = Ce(h, e), m = De(o), v = m ? h : o.sizeBeforeCollapse, x = m ? o.measuredPixelSizeBeforeCollapse ?? o.measuredPixelSize ?? h : o.measuredPixelSizeBeforeCollapse;
482
+ t[s] = {
483
+ ...o,
484
+ size: h,
485
+ percentageSize: b,
486
+ sizeBeforeCollapse: v,
487
+ measuredPixelSizeBeforeCollapse: x,
488
+ measuredPixelSize: void 0,
489
+ measuredPercentageSize: void 0
490
+ }, r -= a, c = !0;
491
+ }, u = (s) => {
492
+ for (const a of s) {
493
+ if (Math.abs(r) <= 0)
494
+ break;
495
+ const o = t[a.index];
496
+ if (!o || o.collapsed)
497
+ continue;
498
+ const h = o.size;
499
+ if (r > 0) {
500
+ const b = Math.max(0, a.maxSize - h);
501
+ if (b <= 0)
502
+ continue;
503
+ const m = Math.min(b, r);
504
+ if (m <= 0)
505
+ continue;
506
+ p(a.index, m);
507
+ } else {
508
+ const b = Math.max(0, h - a.minSize);
509
+ if (b <= 0)
510
+ continue;
511
+ const m = Math.min(b, Math.abs(r));
512
+ if (m <= 0)
513
+ continue;
514
+ p(a.index, -m);
515
+ }
516
+ }
517
+ }, z = n.map((s) => i(s)).filter((s) => s.isFlexible);
518
+ if (z.length > 0 && u(z), Math.abs(r) > 0) {
519
+ const s = r;
520
+ r = Ct(t, r, e, { enforceAutoMinSize: !0 }), Math.abs(r - s) > 0 && (c = !0);
521
+ }
522
+ return c;
523
+ }, at = (t, e, n) => {
524
+ if (!(t.sizeUnit === "pixels" || t.originalPixelSize !== void 0) || t.pixelAdjustPriority !== void 0)
525
+ return t;
526
+ const r = e.filter((i, p) => p !== n && (i.sizeUnit === "pixels" || i.originalPixelSize !== void 0)).map((i) => i.pixelAdjustPriority).filter((i) => i !== void 0), c = r.length > 0 ? Math.max(...r) + 1 : 1;
527
+ return {
528
+ ...t,
529
+ pixelAdjustPriority: c
530
+ };
531
+ }, Dt = (t, e) => {
532
+ switch (e.type) {
533
+ case "REGISTER_PANEL": {
534
+ ze.debug("REGISTER_PANEL", e.panel);
535
+ const n = t.findIndex((c) => c.id === e.panel.id);
536
+ if (n >= 0) {
537
+ const c = [...t], i = t[n], p = {
538
+ ...i,
539
+ minSize: e.panel.minSize,
540
+ maxSize: e.panel.maxSize,
541
+ collapseFromStart: e.panel.collapseFromStart,
542
+ collapseFromEnd: e.panel.collapseFromEnd,
543
+ collapsedByDirection: e.panel.collapsedByDirection !== void 0 ? e.panel.collapsedByDirection : i.collapsedByDirection,
544
+ sizeUnit: e.panel.sizeUnit,
545
+ originalPixelSize: e.panel.originalPixelSize,
546
+ preferredPercentageSize: e.panel.preferredPercentageSize !== void 0 ? e.panel.preferredPercentageSize : i.preferredPercentageSize,
547
+ preferredPercentageSizeBeforeCollapse: e.panel.preferredPercentageSizeBeforeCollapse !== void 0 ? e.panel.preferredPercentageSizeBeforeCollapse : i.preferredPercentageSizeBeforeCollapse,
548
+ percentageSizeBeforeCollapse: e.panel.percentageSizeBeforeCollapse !== void 0 ? e.panel.percentageSizeBeforeCollapse : i.percentageSizeBeforeCollapse,
549
+ pixelAdjustPriority: e.panel.pixelAdjustPriority !== void 0 ? e.panel.pixelAdjustPriority : i.pixelAdjustPriority,
550
+ autoMinSize: e.panel.autoMinSize !== void 0 ? e.panel.autoMinSize : i.autoMinSize,
551
+ excludeFromAutoGrowth: e.panel.excludeFromAutoGrowth !== void 0 ? e.panel.excludeFromAutoGrowth : i.excludeFromAutoGrowth
552
+ }, u = at(p, t, n);
553
+ return ze.debug("register panel (update)", {
554
+ panelId: u.id,
555
+ incoming: Ye(e.panel),
556
+ previous: Ye(i),
557
+ next: Ye(u)
558
+ }), c[n] = u, c;
559
+ }
560
+ const d = { ...e.panel }, r = at(d, t);
561
+ return ze.debug("register panel (insert)", {
562
+ panelId: r.id,
563
+ incoming: Ye(r),
564
+ previousLength: t.length
565
+ }), [...t, r];
566
+ }
567
+ case "UNREGISTER_PANEL": {
568
+ ze.debug("UNREGISTER_PANEL", e.id);
569
+ const n = t.filter((r) => r.id !== e.id), d = Le(n);
570
+ return ze.debug("unregister panel", {
571
+ panelId: e.id,
572
+ previous: ve(t),
573
+ filtered: ve(n),
574
+ next: ve(d)
575
+ }), d;
576
+ }
577
+ case "RESIZE_PANELS": {
578
+ ze.debug("RESIZE_PANELS", e.leftId, e.rightId, e.leftSize, e.rightSize);
579
+ const n = t.findIndex((G) => G.id === e.leftId), d = t.findIndex((G) => G.id === e.rightId);
580
+ if (n === -1 || d === -1) return t;
581
+ const r = [...t], c = r[n], i = r[d];
582
+ if (c.collapsed || i.collapsed || e.leftSize === c.size && e.rightSize === i.size)
583
+ return t;
584
+ const p = e.containerSize ?? t.reduce((G, le) => G + le.size, 0), u = te(c.minSize, 0, p), z = te(c.maxSize, p, p), s = te(i.minSize, 0, p), a = te(i.maxSize, p, p), o = c.size + i.size, h = t.reduce((G, le) => le.collapsed ? G : G + le.size, 0), b = h - o, m = u + s, v = z + a, x = me(e.leftSize + e.rightSize, m, v);
585
+ let C = p > 0 ? p - b : x;
586
+ Number.isFinite(C) || (C = x);
587
+ const S = me(Math.max(x, C), m, v), D = (G) => ({
588
+ min: Math.max(u, G - a),
589
+ max: Math.min(z, G - s)
590
+ }), X = (G) => ({
591
+ min: Math.max(s, G - z),
592
+ max: Math.min(a, G - u)
593
+ }), re = Math.abs(e.leftSize - c.size), de = Math.abs(e.rightSize - i.size), j = re >= de;
594
+ let _ = c.size, E = i.size;
595
+ if (j) {
596
+ const G = D(S);
597
+ if (G.min > G.max)
598
+ return t;
599
+ const le = me(e.leftSize, G.min, G.max), P = S - le;
600
+ if (P < s || P > a)
601
+ return t;
602
+ _ = le, E = P;
603
+ } else {
604
+ const G = X(S);
605
+ if (G.min > G.max)
606
+ return t;
607
+ const le = me(e.rightSize, G.min, G.max), P = S - le;
608
+ if (P < u || P > z)
609
+ return t;
610
+ E = le, _ = P;
611
+ }
612
+ const oe = _ + E;
613
+ if (S !== oe)
614
+ return t;
615
+ const U = h - c.size - i.size + oe, V = p > 0 ? p : U, O = V > 0 ? Ce(_, V) : 0, Y = V > 0 ? Ce(E, V) : 0, y = c.sizeUnit === "pixels" || c.originalPixelSize !== void 0 ? _ : c.preferredPixelSize, N = i.sizeUnit === "pixels" || i.originalPixelSize !== void 0 ? E : i.preferredPixelSize, be = te(c.autoMinSize, 0, p), ce = te(i.autoMinSize, 0, p), Pe = Math.max(1e-3, be), he = Math.max(1e-3, ce), ue = c.sizeUnit === "percentage" && c.originalPixelSize === void 0, pe = i.sizeUnit === "percentage" && i.originalPixelSize === void 0;
616
+ let ge = c.excludeFromAutoGrowth, ye = i.excludeFromAutoGrowth;
617
+ ue && (_ <= Pe ? ge = !0 : _ > Pe && (ge = !1)), pe && (E <= he ? ye = !0 : E > he && (ye = !1));
618
+ const Be = De(c), Re = De(i);
619
+ return r[n] = {
620
+ ...c,
621
+ size: _,
622
+ percentageSize: O,
623
+ preferredPercentageSize: O > 0 ? O : c.preferredPercentageSize,
624
+ preferredPixelSize: y,
625
+ sizeBeforeCollapse: Be ? _ : c.sizeBeforeCollapse,
626
+ measuredPixelSize: void 0,
627
+ measuredPercentageSize: void 0,
628
+ excludeFromAutoGrowth: ge
629
+ }, r[d] = {
630
+ ...i,
631
+ size: E,
632
+ percentageSize: Y,
633
+ preferredPercentageSize: Y > 0 ? Y : i.preferredPercentageSize,
634
+ preferredPixelSize: N,
635
+ sizeBeforeCollapse: Re ? E : i.sizeBeforeCollapse,
636
+ measuredPixelSize: void 0,
637
+ measuredPercentageSize: void 0,
638
+ excludeFromAutoGrowth: ye
639
+ }, p > 0 && Ze(r, p) ? Le(r) : r;
640
+ }
641
+ case "SET_PANELS": {
642
+ ze.debug("SET_PANELS", e.panels);
643
+ const n = e.panels.map((u) => {
644
+ const z = u.sizeUnit === "pixels" || u.originalPixelSize !== void 0, s = u.preferredPercentageSize !== void 0 ? u.preferredPercentageSize : u.percentageSize, a = u.preferredPixelSize !== void 0 ? u.preferredPixelSize : z ? u.size : u.preferredPixelSize;
645
+ return {
646
+ ...u,
647
+ preferredPercentageSize: s,
648
+ preferredPixelSize: a
649
+ };
650
+ }), d = ve(t), r = ve(n), c = Le(n), i = ve(c);
651
+ let p = d.length === i.length;
652
+ if (p)
653
+ for (let u = 0; u < i.length; u += 1) {
654
+ const z = i[u], s = d[u];
655
+ if (!s) {
656
+ p = !1;
657
+ break;
658
+ }
659
+ if (!(s.id === z.id && s.size === z.size && s.percentageSize === z.percentageSize && s.sizeBeforeCollapse === z.sizeBeforeCollapse && s.measuredPercentageSize === z.measuredPercentageSize && s.collapsed === z.collapsed)) {
660
+ p = !1;
661
+ break;
662
+ }
663
+ }
664
+ return p ? (ze.debug("set panels skipped (no diff)", {
665
+ previous: d,
666
+ incoming: r,
667
+ next: i,
668
+ previousLength: d.length,
669
+ incomingLength: r.length
670
+ }), t) : (ze.debug("set panels", {
671
+ previous: d,
672
+ incoming: r,
673
+ next: i,
674
+ previousLength: d.length,
675
+ incomingLength: r.length
676
+ }), c);
677
+ }
678
+ case "CONTAINER_RESIZED": {
679
+ if (ze.debug("CONTAINER_RESIZED", e.containerSize), e.containerSize <= 0)
680
+ return ze.debug("container resized skipped (non-positive size)", {
681
+ containerSize: e.containerSize,
682
+ panels: ve(t)
683
+ }), t;
684
+ ze.debug("container resized (before)", {
685
+ containerSize: e.containerSize,
686
+ panels: ve(t)
687
+ });
688
+ const n = Ke(t, e.containerSize);
689
+ if (ze.debug("container resized (after recalc)", {
690
+ containerSize: e.containerSize,
691
+ panels: ve(n)
692
+ }), e.containerSize > 0 && Ze(n, e.containerSize)) {
693
+ const d = Le(n);
694
+ return ze.debug("container resized (after reconcile)", {
695
+ containerSize: e.containerSize,
696
+ panels: ve(d)
697
+ }), d;
698
+ }
699
+ return ze.debug("container resized (final)", {
700
+ containerSize: e.containerSize,
701
+ panels: ve(n)
702
+ }), n;
703
+ }
704
+ case "COLLAPSE_PANEL": {
705
+ ze.debug("COLLAPSE_PANEL", e.id);
706
+ const n = t.findIndex((o) => o.id === e.id);
707
+ if (n === -1)
708
+ return t;
709
+ const d = t[n], r = e.from === "start" ? d.collapseFromStart : d.collapseFromEnd;
710
+ if (!(De(d) && r) || d.collapsed)
711
+ return t;
712
+ const i = d.size, p = d.measuredPixelSize ?? i, u = d.percentageSize ?? d.preferredPercentageSize ?? 0, z = {
713
+ ...d,
714
+ collapsed: !0,
715
+ collapsedByDirection: e.from,
716
+ sizeBeforeCollapse: i,
717
+ percentageSizeBeforeCollapse: u,
718
+ preferredPercentageSizeBeforeCollapse: d.preferredPercentageSize ?? u,
719
+ preferredPixelSizeBeforeCollapse: d.preferredPixelSize ?? i,
720
+ measuredPixelSizeBeforeCollapse: p,
721
+ size: 0,
722
+ percentageSize: 0,
723
+ preferredPercentageSize: d.preferredPercentageSize,
724
+ measuredPixelSize: d.measuredPixelSize !== void 0 ? 0 : d.measuredPixelSize,
725
+ measuredPercentageSize: d.measuredPercentageSize !== void 0 ? 0 : d.measuredPercentageSize
726
+ }, s = [...t];
727
+ s[n] = z;
728
+ const a = Ke(s, e.containerSize);
729
+ return e.containerSize > 0 && Ze(a, e.containerSize) ? Le(a) : a;
730
+ }
731
+ case "EXPAND_PANEL": {
732
+ ze.debug("EXPAND_PANEL", e.id, e.targetSize);
733
+ const n = t.findIndex((S) => S.id === e.id);
734
+ if (n === -1)
735
+ return t;
736
+ const d = e.containerSize, r = t[n], c = e.from === "start" ? r.collapseFromStart : r.collapseFromEnd;
737
+ if (!(De(r) && c && r.collapsed) || r.collapsedByDirection && r.collapsedByDirection !== e.from)
738
+ return t;
739
+ const p = [e.targetSize, r.sizeBeforeCollapse, r.measuredPixelSizeBeforeCollapse, r.preferredPixelSizeBeforeCollapse, r.originalPixelSize].find((S) => S !== void 0) ?? 0, u = te(r.minSize, 0, d), z = te(r.maxSize, d, d), s = me(p, u, z), a = Ce(s, d), o = r.measuredPixelSizeBeforeCollapse ?? s, h = Ce(o, d), b = r.preferredPercentageSizeBeforeCollapse ?? r.percentageSizeBeforeCollapse ?? a, m = r.preferredPixelSizeBeforeCollapse ?? r.preferredPixelSize ?? s, v = {
740
+ ...r,
741
+ collapsed: !1,
742
+ collapsedByDirection: null,
743
+ size: s,
744
+ percentageSize: a,
745
+ preferredPercentageSize: b,
746
+ preferredPixelSize: m,
747
+ sizeBeforeCollapse: s,
748
+ percentageSizeBeforeCollapse: void 0,
749
+ preferredPercentageSizeBeforeCollapse: void 0,
750
+ preferredPixelSizeBeforeCollapse: void 0,
751
+ measuredPixelSize: s,
752
+ measuredPixelSizeBeforeCollapse: o,
753
+ measuredPercentageSize: h
754
+ }, x = [...t];
755
+ x[n] = v;
756
+ const C = Ke(x, d);
757
+ return d > 0 && Ze(C, d) ? Le(C) : C;
758
+ }
759
+ default:
760
+ return t;
761
+ }
762
+ }, Ue = new je(qe.INFO, "[resize-panels]"), Ot = ({ direction: t, style: e, onLayout: n, autoSaveId: d, showDebugInfo: r = !1 }) => {
763
+ const [c, i] = wt(Dt, []), [p, u] = Me({ width: 0, height: 0 }), [z, s] = Me(!1), [a, o] = Me(!1), [h, b] = Me(null), [m, v] = Me({}), [x, C] = Me({}), S = J(null), D = J(n), X = J(!1), re = J(0), de = J(p), j = J(p), _ = J(z), E = J(h?.reason ?? null), oe = J({}), U = J(null), V = J(null), O = J(null), Y = J({ width: 0, height: 0 }), y = J({ width: 0, height: 0 }), N = J({}), be = J({}), ce = Se((l) => l.map((g) => ({ ...g })), []);
764
+ se(() => {
765
+ j.current = p;
766
+ }, [p]), se(() => {
767
+ _.current = z;
768
+ }, [z]), se(() => {
769
+ E.current = h?.reason ?? null;
770
+ }, [h?.reason]), se(() => {
771
+ if (h)
772
+ return;
773
+ const l = t === "horizontal" ? p.width : p.height;
774
+ !Number.isFinite(l) || l <= 4 || c.length !== 0 && (U.current = ce(c));
775
+ }, [h, c, t, p.width, p.height, ce]), se(() => {
776
+ const l = V.current;
777
+ if (h) {
778
+ V.current = h;
779
+ return;
780
+ }
781
+ if (l && !h && U.current) {
782
+ V.current = null;
783
+ const g = ce(U.current);
784
+ i({ type: "SET_PANELS", panels: g });
785
+ return;
786
+ }
787
+ V.current = h;
788
+ }, [h, ce]), Xe(() => {
789
+ if (!S.current) return;
790
+ const l = new ResizeObserver((g) => {
791
+ for (const w of g) {
792
+ const M = w.target, A = M ? Oe(M, "horizontal") : null, B = M ? Oe(M, "vertical") : null, H = A ? A.inner : 0, Z = B ? B.inner : 0, T = w.contentRect.width, R = w.contentRect.height, F = H > 0 ? H : T, k = Z > 0 ? Z : R;
793
+ Y.current = { width: F, height: k };
794
+ const Q = y.current, ne = Math.abs(Q.width - F) >= 0.5, K = Math.abs(Q.height - k) >= 0.5;
795
+ ne || K ? (O.current && (clearTimeout(O.current), O.current = null), !z && F > 0 && k > 0 && s(!0), u({ width: F, height: k }), y.current = { width: F, height: k }) : (O.current && clearTimeout(O.current), O.current = setTimeout(() => {
796
+ const W = Y.current;
797
+ u(W), y.current = W, O.current = null;
798
+ }, 150));
799
+ }
800
+ });
801
+ return l.observe(S.current), () => {
802
+ l.disconnect(), O.current && clearTimeout(O.current);
803
+ };
804
+ }, [z]), se(() => () => {
805
+ Object.values(N.current).forEach(clearTimeout);
806
+ }, []), Xe(() => {
807
+ const l = de.current, g = p, w = t === "horizontal" ? Math.abs(l.width - g.width) >= 0.5 : Math.abs(l.height - g.height) >= 0.5;
808
+ if (a && w) {
809
+ const M = t === "horizontal" ? g.width : g.height;
810
+ i({ type: "CONTAINER_RESIZED", containerSize: M, direction: t });
811
+ }
812
+ de.current = g;
813
+ }, [p, a, t]);
814
+ const Pe = Se(() => {
815
+ Ue.debug("panels[0]?.id", c[0]?.id);
816
+ const l = c.some((f) => {
817
+ if (f.collapsed || f.sizeUnit !== "percentage")
818
+ return !1;
819
+ const ee = f.collapseFromStart || f.collapseFromEnd ? f.sizeBeforeCollapse ?? f.measuredPixelSizeBeforeCollapse ?? f.originalPixelSize ?? f.measuredPixelSize ?? 0 : f.measuredPixelSize ?? f.originalPixelSize ?? f.size, ie = f.percentageSize !== void 0 && f.percentageSize > 0;
820
+ return f.size <= 0 && (ee > 0 || ie);
821
+ }), g = t === "horizontal" ? p.width : p.height, w = g > 0;
822
+ if (h || !w || !(c.length > 0 && (c.length !== re.current || !a || l)))
823
+ return;
824
+ const B = c.filter((f) => !f.collapsed && (f.originalPixelSize !== void 0 || f.sizeUnit === "pixels")).reduce((f, L) => {
825
+ const ee = L.preferredPixelSize ?? L.originalPixelSize ?? L.size;
826
+ return f + Math.max(0, ee ?? 0);
827
+ }, 0), H = c.filter((f) => f.sizeUnit === "percentage" && !f.collapsed), Z = H.map((f) => f.id), T = H.map((f) => {
828
+ const L = f.preferredPercentageSize ?? f.percentageSize;
829
+ return L !== void 0 && L > 0 ? We(L, g) : f.size > 0 ? f.size : 0;
830
+ }), R = T.reduce((f, L) => f + L, 0), F = g - B, k = Math.max(0, F), Q = k > 0, ne = c.map((f) => {
831
+ if (f.collapsed) {
832
+ const L = f.sizeBeforeCollapse ?? f.measuredPixelSizeBeforeCollapse ?? f.originalPixelSize ?? (f.sizeUnit === "pixels" ? f.size : void 0), ee = f.sizeUnit === "percentage" && f.percentageSize !== void 0 ? We(f.percentageSize, g) : void 0, ie = L ?? ee ?? 0, xe = f.measuredPixelSizeBeforeCollapse ?? f.measuredPixelSize ?? ie;
833
+ return {
834
+ ...f,
835
+ size: 0,
836
+ percentageSize: 0,
837
+ preferredPercentageSize: f.preferredPercentageSize,
838
+ sizeBeforeCollapse: ie,
839
+ percentageSizeBeforeCollapse: f.percentageSizeBeforeCollapse ?? f.percentageSize ?? f.preferredPercentageSize ?? 0,
840
+ preferredPercentageSizeBeforeCollapse: f.preferredPercentageSizeBeforeCollapse ?? f.preferredPercentageSize ?? f.percentageSize ?? void 0,
841
+ preferredPixelSizeBeforeCollapse: f.preferredPixelSizeBeforeCollapse ?? f.preferredPixelSize ?? ie,
842
+ measuredPixelSizeBeforeCollapse: xe
843
+ };
844
+ }
845
+ if (f.sizeUnit === "pixels" || f.originalPixelSize !== void 0) {
846
+ const L = f.size, ee = g > 0 ? Ce(L, g) : 0, ie = {
847
+ ...f,
848
+ size: L,
849
+ percentageSize: ee,
850
+ preferredPixelSize: f.preferredPixelSize ?? f.originalPixelSize ?? L,
851
+ preferredPercentageSize: f.preferredPercentageSize !== void 0 ? f.preferredPercentageSize : ee > 0 ? ee : void 0
852
+ };
853
+ if (f.collapseFromStart || f.collapseFromEnd) {
854
+ const xe = f.sizeBeforeCollapse ?? L, Ne = f.measuredPixelSizeBeforeCollapse ?? f.measuredPixelSize ?? xe;
855
+ ie.sizeBeforeCollapse = xe, ie.measuredPixelSizeBeforeCollapse = Ne, ie.preferredPixelSizeBeforeCollapse = f.preferredPixelSizeBeforeCollapse ?? f.preferredPixelSize ?? xe;
856
+ }
857
+ return ie;
858
+ }
859
+ if (f.sizeUnit === "percentage") {
860
+ const L = Z.indexOf(f.id), ee = L !== -1 ? T[L] : 0, ie = te(f.minSize, 0, g), xe = te(f.maxSize, g, g), Ne = Math.max(
861
+ ie,
862
+ f.sizeBeforeCollapse ?? 0,
863
+ f.measuredPixelSizeBeforeCollapse ?? 0,
864
+ f.measuredPixelSize ?? 0,
865
+ f.originalPixelSize ?? 0,
866
+ f.size > 0 ? f.size : 0,
867
+ f.percentageSize !== void 0 ? We(f.percentageSize, g) : 0,
868
+ 1
869
+ ), ke = ee > 0 ? ee : Ne;
870
+ let Ae;
871
+ if (!Q)
872
+ Ae = ie;
873
+ else if (L !== -1 && R > 0) {
874
+ const we = ke / R, Ie = k * we;
875
+ Ae = me(Ie, ie, xe);
876
+ } else {
877
+ const we = f.percentageSize !== void 0 ? We(f.percentageSize, g) : f.size, Ie = we > 0 ? we : ke;
878
+ Ae = me(Ie, ie, xe);
879
+ }
880
+ const Ge = g > 0 ? Ce(Ae, g) : 0, Te = {
881
+ ...f,
882
+ size: Ae,
883
+ percentageSize: Ge,
884
+ preferredPercentageSize: f.preferredPercentageSize !== void 0 ? f.preferredPercentageSize : Ge > 0 ? Ge : void 0
885
+ };
886
+ if (f.collapseFromStart || f.collapseFromEnd) {
887
+ const we = f.sizeBeforeCollapse ?? Ae, Ie = f.measuredPixelSizeBeforeCollapse ?? f.measuredPixelSize ?? we;
888
+ Te.sizeBeforeCollapse = we, Te.measuredPixelSizeBeforeCollapse = Ie, Te.preferredPixelSizeBeforeCollapse = f.preferredPixelSizeBeforeCollapse ?? f.preferredPixelSize ?? we;
889
+ }
890
+ return Te;
891
+ }
892
+ return f;
893
+ }), K = [];
894
+ for (let f = 0; f < ne.length; f += 1) {
895
+ const L = ne[f];
896
+ L.sizeUnit === "percentage" && !L.collapsed && K.push(f);
897
+ }
898
+ const W = K.reduce((f, L) => f + ne[L].size, 0), q = F - W;
899
+ Math.abs(q) > 0 && Ct(ne, q, g, { enforceAutoMinSize: !0 }), i({ type: "SET_PANELS", panels: ne }), re.current = c.length, o(!0);
900
+ }, [c, t, p.width, p.height, a, h]);
901
+ se(() => {
902
+ const l = t === "horizontal" ? p.width : p.height, g = l > 0, w = g && c.length > 0, M = w ? c.reduce((R, F) => {
903
+ if (F.collapsed)
904
+ return R;
905
+ const k = te(F.minSize, 0, l);
906
+ return R + Math.max(0, k);
907
+ }, 0) : null, A = w ? c.reduce((R, F) => {
908
+ if (F.collapsed)
909
+ return R;
910
+ const k = te(F.maxSize, l, l);
911
+ return R + Math.max(0, k);
912
+ }, 0) : null, B = M ?? h?.totalMinimumSize ?? null, H = A ?? h?.totalMaximumSize ?? null;
913
+ if (!g) {
914
+ h && b((R) => !R || R.availableContainerSize === l ? R : {
915
+ reason: R.reason,
916
+ // totalMinimumSize: previous.totalMinimumSize,
917
+ // totalMaximumSize: previous.totalMaximumSize,
918
+ totalMinimumSize: null,
919
+ totalMaximumSize: null,
920
+ availableContainerSize: l
921
+ });
922
+ return;
923
+ }
924
+ const Z = B !== null && B - l > Number.EPSILON, T = H !== null && l - H > Number.EPSILON;
925
+ if (Z || T) {
926
+ const F = {
927
+ reason: Z ? "minimum-exceeded" : "maximum-insufficient",
928
+ totalMinimumSize: B,
929
+ totalMaximumSize: H,
930
+ availableContainerSize: l
931
+ };
932
+ b((k) => k && k.reason === F.reason && Math.abs((k.totalMinimumSize ?? 0) - (F.totalMinimumSize ?? 0)) <= Number.EPSILON && Math.abs((k.totalMaximumSize ?? 0) - (F.totalMaximumSize ?? 0)) <= Number.EPSILON && Math.abs(k.availableContainerSize - F.availableContainerSize) <= Number.EPSILON ? k : F);
933
+ return;
934
+ }
935
+ if (h) {
936
+ const R = h.reason === "minimum-exceeded", F = h.reason === "maximum-insufficient";
937
+ (!R || B !== null) && (!F || H !== null) && !Z && !T && b((W) => W && null);
938
+ }
939
+ }, [c, t, p.width, p.height, h]), se(() => {
940
+ Pe();
941
+ }, [Pe]), se(() => {
942
+ D.current = n;
943
+ }, [n]);
944
+ const he = ae(() => c.map((l) => l.size), [c]);
945
+ Xe(() => {
946
+ he.length > 0 && D.current && D.current(he);
947
+ }, [he]), se(() => {
948
+ if (d && he.length > 0) {
949
+ const l = setTimeout(() => {
950
+ At(d, he);
951
+ }, 200);
952
+ return () => clearTimeout(l);
953
+ }
954
+ }, [d, he]), se(() => {
955
+ if (!d || c.length === 0 || X.current)
956
+ return;
957
+ const l = t === "horizontal" ? p.width : p.height;
958
+ if (l <= 0)
959
+ return;
960
+ const g = Lt(d);
961
+ if (g && g.length === c.length) {
962
+ const w = c.map((M, A) => {
963
+ const B = te(M.minSize, 0, l), H = te(M.maxSize, l, l), Z = me(g[A], B, H), T = Ce(Z, l), R = M.sizeUnit === "pixels" || M.originalPixelSize !== void 0 ? Z : M.preferredPixelSize;
964
+ return {
965
+ ...M,
966
+ size: Z,
967
+ percentageSize: T,
968
+ preferredPercentageSize: T > 0 ? T : M.preferredPercentageSize,
969
+ preferredPixelSize: R
970
+ };
971
+ });
972
+ i({ type: "SET_PANELS", panels: w }), X.current = !0;
973
+ }
974
+ }, [d, c, p.width, p.height, t]);
975
+ const ue = Se((l) => {
976
+ const g = j.current, w = oe.current, M = JSON.stringify({
977
+ id: l.id,
978
+ size: l.size ?? null,
979
+ percentageSize: l.percentageSize ?? null,
980
+ preferredPercentageSize: l.preferredPercentageSize ?? null,
981
+ preferredPixelSize: l.preferredPixelSize ?? null,
982
+ sizeUnit: l.sizeUnit,
983
+ originalPixelSize: l.originalPixelSize ?? null,
984
+ minSize: l.minSize ?? null,
985
+ maxSize: l.maxSize ?? null,
986
+ collapseFromStart: l.collapseFromStart,
987
+ collapseFromEnd: l.collapseFromEnd,
988
+ collapsed: l.collapsed ?? !1,
989
+ collapsedByDirection: l.collapsedByDirection ?? null,
990
+ sizeBeforeCollapse: l.sizeBeforeCollapse ?? null,
991
+ percentageSizeBeforeCollapse: l.percentageSizeBeforeCollapse ?? null,
992
+ preferredPercentageSizeBeforeCollapse: l.preferredPercentageSizeBeforeCollapse ?? null,
993
+ preferredPixelSizeBeforeCollapse: l.preferredPixelSizeBeforeCollapse ?? null,
994
+ pixelAdjustPriority: l.pixelAdjustPriority ?? null
995
+ });
996
+ if (w[l.id] === M) {
997
+ Ue.debug("useResizablePanels.registerPanel skipped", {
998
+ panelId: l.id,
999
+ reason: "duplicate-registration"
1000
+ });
1001
+ return;
1002
+ }
1003
+ w[l.id] = M, Ue.debug("useResizablePanels.registerPanel", {
1004
+ panelId: l.id,
1005
+ containerReady: _.current,
1006
+ violationReason: E.current,
1007
+ containerSize: {
1008
+ width: g.width,
1009
+ height: g.height
1010
+ }
1011
+ }), i({ type: "REGISTER_PANEL", panel: l });
1012
+ }, []), pe = Se((l) => {
1013
+ const g = j.current;
1014
+ Ue.debug("useResizablePanels.unregisterPanel", {
1015
+ panelId: l,
1016
+ containerReady: _.current,
1017
+ violationReason: E.current,
1018
+ containerSize: {
1019
+ width: g.width,
1020
+ height: g.height
1021
+ }
1022
+ }), i({ type: "UNREGISTER_PANEL", id: l }), delete oe.current[l], v((w) => {
1023
+ if (!(l in w))
1024
+ return w;
1025
+ const M = { ...w };
1026
+ return delete M[l], M;
1027
+ });
1028
+ }, []), ge = Se(
1029
+ (l, g, w, M) => {
1030
+ const A = t === "horizontal" ? p.width : p.height, B = c.find((W) => W.id === l), H = c.find((W) => W.id === g);
1031
+ if (!(B && H)) {
1032
+ i({ type: "RESIZE_PANELS", leftId: l, rightId: g, leftSize: w, rightSize: M, containerSize: A });
1033
+ return;
1034
+ }
1035
+ if (B.collapsed || H.collapsed)
1036
+ return;
1037
+ const Z = te(B.minSize, 0, A), T = te(B.maxSize, A, A), R = te(H.minSize, 0, A), F = te(H.maxSize, A, A);
1038
+ let k = me(w, Z, T), Q = me(M, R, F);
1039
+ const ne = k + Q, K = w + M;
1040
+ if (Math.abs(ne - K) > 1e-9) {
1041
+ const W = K - ne;
1042
+ if (W > 0) {
1043
+ const q = T - k, f = F - Q, L = q + f;
1044
+ if (L > 0) {
1045
+ const ee = Math.min(W * (q / L), q), ie = Math.min(W - ee, f);
1046
+ k += ee, Q += ie;
1047
+ }
1048
+ } else if (W < 0) {
1049
+ const q = Math.abs(W), f = k - Z, L = Q - R, ee = f + L;
1050
+ if (ee > 0) {
1051
+ const ie = Math.min(q * (f / ee), f), xe = Math.min(q - ie, L);
1052
+ k -= ie, Q -= xe;
1053
+ }
1054
+ }
1055
+ }
1056
+ k = me(k, Z, T), Q = me(Q, R, F), Math.abs(k + Q - K) > 1e-9 && Ue.error("Total size after constraints should be close to the original total size.", { constrainedLeftSize: k, constrainedRightSize: Q, originalTotalSize: K }), i({ type: "RESIZE_PANELS", leftId: l, rightId: g, leftSize: k, rightSize: Q, containerSize: A });
1057
+ },
1058
+ [t, p.width, p.height, c]
1059
+ ), ye = Se(
1060
+ (l, g) => {
1061
+ const w = t === "horizontal" ? p.width : p.height;
1062
+ i({ type: "COLLAPSE_PANEL", id: l, from: g, containerSize: w });
1063
+ },
1064
+ [t, p.width, p.height]
1065
+ ), Be = Se(
1066
+ (l, g, w) => {
1067
+ const M = t === "horizontal" ? p.width : p.height;
1068
+ i({ type: "EXPAND_PANEL", id: l, from: g, containerSize: M, targetSize: w });
1069
+ },
1070
+ [t, p.width, p.height]
1071
+ ), Re = Se(
1072
+ (l) => c.find((g) => g.id === l),
1073
+ [c]
1074
+ ), G = Se((l, g) => {
1075
+ v((w) => {
1076
+ if (g === null) {
1077
+ if (!(l in w))
1078
+ return w;
1079
+ const H = { ...w };
1080
+ return delete H[l], H;
1081
+ }
1082
+ const M = w[l], A = M && Math.abs(M.pixelSize - g.pixelSize) < 0.1, B = M && Math.abs(M.percentageSize - g.percentageSize) < 0.01;
1083
+ return A && B ? (N.current[l] && clearTimeout(N.current[l]), be.current[l] = g, N.current[l] = setTimeout(() => {
1084
+ const H = be.current[l];
1085
+ H && v((Z) => ({
1086
+ ...Z,
1087
+ [l]: H
1088
+ })), delete N.current[l];
1089
+ }, 200), w) : (N.current[l] && (clearTimeout(N.current[l]), delete N.current[l]), {
1090
+ ...w,
1091
+ [l]: g
1092
+ });
1093
+ });
1094
+ }, []), le = Se((l, g) => {
1095
+ C((w) => {
1096
+ if (g === null) {
1097
+ if (!(l in w))
1098
+ return w;
1099
+ const A = { ...w };
1100
+ return delete A[l], A;
1101
+ }
1102
+ const M = w[l];
1103
+ return M && Math.abs(M.thickness - g.thickness) <= 0.25 && M.visible === g.visible && M.direction === g.direction && M.startPanelId === g.startPanelId && M.endPanelId === g.endPanelId ? w : {
1104
+ ...w,
1105
+ [l]: g
1106
+ };
1107
+ });
1108
+ }, []), P = ae(
1109
+ () => ({
1110
+ direction: t,
1111
+ panels: c,
1112
+ containerSize: p,
1113
+ isContainerReady: z,
1114
+ showDebugInfo: r,
1115
+ registerPanel: ue,
1116
+ unregisterPanel: pe,
1117
+ resizePanels: ge,
1118
+ collapsePanel: ye,
1119
+ expandPanel: Be,
1120
+ getPanel: Re,
1121
+ reportPanelMeasurement: G,
1122
+ panelMeasurements: m,
1123
+ reportHandleMeasurement: le,
1124
+ handleMeasurements: x,
1125
+ layoutConstraintViolation: h
1126
+ }),
1127
+ [t, c, p, z, r, ue, pe, ge, ye, Be, Re, G, m, le, x, h]
1128
+ ), $ = ae(
1129
+ () => ({
1130
+ display: "flex",
1131
+ flexDirection: t === "horizontal" ? "row" : "column",
1132
+ alignItems: "stretch",
1133
+ width: "100%",
1134
+ height: "100%",
1135
+ minWidth: "0px",
1136
+ minHeight: "0px",
1137
+ position: "relative",
1138
+ overflow: "hidden",
1139
+ // リサイズハンドルのはみ出しでスクロールバーを表示させない
1140
+ ...e
1141
+ }),
1142
+ [t, e]
1143
+ );
1144
+ return {
1145
+ groupRef: S,
1146
+ contextValue: P,
1147
+ groupStyle: $
1148
+ };
1149
+ }, di = (t) => {
1150
+ const { getPanel: e, collapsePanel: n, expandPanel: d } = rt(), r = e(t), c = Se(
1151
+ (u) => {
1152
+ n(t, u);
1153
+ },
1154
+ [n, t]
1155
+ ), i = Se(
1156
+ (u, z) => {
1157
+ d(t, u, z);
1158
+ },
1159
+ [d, t]
1160
+ ), p = Se(
1161
+ (u, z) => {
1162
+ r?.collapsed ? i(u, z) : c(u);
1163
+ },
1164
+ [r?.collapsed, c, i]
1165
+ );
1166
+ return ae(
1167
+ () => ({
1168
+ panel: r,
1169
+ isCollapsed: r?.collapsed ?? !1,
1170
+ canCollapseFromStart: r?.collapseFromStart ?? !1,
1171
+ canCollapseFromEnd: r?.collapseFromEnd ?? !1,
1172
+ collapse: c,
1173
+ expand: i,
1174
+ toggle: p
1175
+ }),
1176
+ [r, c, i, p]
1177
+ );
1178
+ }, Tt = ({ panel: t, measuredPixelSize: e, measuredPercentageSize: n, containerAxisSize: d, containerLabel: r }) => {
1179
+ const c = t?.size, i = typeof c == "number" && Number.isFinite(c) ? `${c.toFixed(3)}px` : "-", p = t?.percentageSize !== void 0 ? `${t.percentageSize.toFixed(3)}%` : "-", u = Number.isFinite(e) ? `${e.toFixed(3)}px` : "-", z = Number.isFinite(n) ? `${n.toFixed(3)}%` : "-", s = Number.isFinite(d) ? `${d.toFixed(3)}px` : "-", a = `${i} / ${p}`, o = `${u} / ${z}`, h = t?.sizeUnit === "pixels" ? "Fixed" : "Flexible", b = [h, `${r}: ${s}`, `size (state): ${a}`, `size (measured): ${o}`];
1180
+ return {
1181
+ stateValueDisplay: a,
1182
+ measuredValueDisplay: o,
1183
+ containerDisplay: s,
1184
+ headlineLabel: h,
1185
+ titleText: b.join(`
1186
+ `)
1187
+ };
1188
+ }, _t = it(({ panel: t, measuredPixelSize: e, measuredPercentageSize: n, containerAxisSize: d, direction: r }) => {
1189
+ const c = r === "horizontal" ? "container width" : "container height", { stateValueDisplay: i, measuredValueDisplay: p, containerDisplay: u, headlineLabel: z, titleText: s } = ae(
1190
+ () => Tt({
1191
+ panel: t,
1192
+ measuredPixelSize: e,
1193
+ measuredPercentageSize: n,
1194
+ containerAxisSize: d,
1195
+ containerLabel: c
1196
+ }),
1197
+ [t, e, n, d, c]
1198
+ ), a = {
1199
+ position: "absolute",
1200
+ top: "2px",
1201
+ right: "4px",
1202
+ backgroundColor: "rgba(30, 41, 59, 0.6)",
1203
+ color: "#fff",
1204
+ padding: "4px 8px",
1205
+ borderRadius: "6px",
1206
+ fontSize: "11px",
1207
+ fontFamily: "monospace",
1208
+ pointerEvents: "auto",
1209
+ zIndex: 10,
1210
+ boxShadow: "0 2px 4px rgba(0,0,0,0.3)",
1211
+ border: "1px solid rgba(255,255,255,0.1)",
1212
+ maxWidth: "calc(100% - 12px)",
1213
+ minWidth: "60px",
1214
+ width: "fit-content",
1215
+ overflow: "hidden"
1216
+ }, o = {
1217
+ display: "flex",
1218
+ flexDirection: "column",
1219
+ gap: "1px",
1220
+ minWidth: "0",
1221
+ width: "100%"
1222
+ }, h = {
1223
+ display: "flex",
1224
+ justifyContent: "flex-start",
1225
+ alignItems: "center",
1226
+ gap: "6px",
1227
+ fontSize: "10px",
1228
+ color: "#ccc",
1229
+ whiteSpace: "nowrap",
1230
+ overflow: "hidden",
1231
+ textOverflow: "ellipsis",
1232
+ minWidth: "0",
1233
+ width: "100%"
1234
+ }, b = {
1235
+ display: "flex",
1236
+ justifyContent: "space-between",
1237
+ alignItems: "center",
1238
+ gap: "6px",
1239
+ whiteSpace: "nowrap",
1240
+ overflow: "hidden",
1241
+ textOverflow: "ellipsis",
1242
+ minWidth: "0",
1243
+ width: "100%"
1244
+ }, m = {
1245
+ marginLeft: "auto",
1246
+ fontVariantNumeric: "tabular-nums",
1247
+ whiteSpace: "nowrap"
1248
+ };
1249
+ return /* @__PURE__ */ I("div", { style: a, title: s, children: /* @__PURE__ */ fe("div", { style: o, children: [
1250
+ /* @__PURE__ */ I("div", { style: h, children: /* @__PURE__ */ I("span", { children: z }) }),
1251
+ /* @__PURE__ */ fe("div", { style: b, children: [
1252
+ /* @__PURE__ */ I("span", { children: c }),
1253
+ /* @__PURE__ */ I("span", { style: m, children: u })
1254
+ ] }),
1255
+ /* @__PURE__ */ fe("div", { style: b, children: [
1256
+ /* @__PURE__ */ I("span", { children: "size (state)" }),
1257
+ /* @__PURE__ */ I("span", { style: m, children: i })
1258
+ ] }),
1259
+ /* @__PURE__ */ fe("div", { style: b, children: [
1260
+ /* @__PURE__ */ I("span", { children: "size (measured)" }),
1261
+ /* @__PURE__ */ I("span", { style: m, children: p })
1262
+ ] })
1263
+ ] }) });
1264
+ }), tt = new je(qe.INFO, "[resize-panels]"), kt = {
1265
+ both: {
1266
+ collapseFromStart: !0,
1267
+ collapseFromEnd: !0
1268
+ },
1269
+ start: {
1270
+ collapseFromStart: !0,
1271
+ collapseFromEnd: !1
1272
+ },
1273
+ end: {
1274
+ collapseFromStart: !1,
1275
+ collapseFromEnd: !0
1276
+ }
1277
+ }, Gt = (t) => {
1278
+ if (!t)
1279
+ return {
1280
+ collapseFromStart: !1,
1281
+ collapseFromEnd: !1
1282
+ };
1283
+ const e = kt[t.from];
1284
+ if (!e)
1285
+ throw new Error("Invalid collapsible configuration: unsupported 'from' value");
1286
+ return e;
1287
+ }, lt = ({ ref: t, setState: e, panelIdRef: n, label: d, timerRef: r }) => (c) => {
1288
+ if (!Number.isFinite(c))
1289
+ return;
1290
+ const i = c < 0 ? 0 : c, p = d === "pixel" ? 0.1 : 0.01;
1291
+ if (Math.abs(t.current - i) < p) {
1292
+ r && (r.current && clearTimeout(r.current), r.current = setTimeout(() => {
1293
+ t.current = i, e(i), r.current = null;
1294
+ }, 200));
1295
+ return;
1296
+ }
1297
+ r?.current && (clearTimeout(r.current), r.current = null), t.current = i, tt.debug(`commit ${d}`, {
1298
+ panelId: n.current,
1299
+ [d]: i
1300
+ }), e(i);
1301
+ }, ui = it(
1302
+ ({ id: t, defaultSize: e = { value: 50, unit: "percentage" }, minSize: n, maxSize: d, autoMinSize: r, className: c, style: i, children: p, order: u = 0, collapsible: z, defaultCollapsed: s = !1, pixelAdjustPriority: a, flexAdjustPriority: o, contentOverflow: h = "auto" }) => {
1303
+ const { direction: b, registerPanel: m, unregisterPanel: v, getPanel: x, showDebugInfo: C, isContainerReady: S, reportPanelMeasurement: D, containerSize: X } = rt(), re = J(null), de = zt(), j = J(t || `panel-${de}`), _ = ae(() => Gt(z), [z]), E = _.collapseFromStart || _.collapseFromEnd, oe = ae(() => E ? _.collapseFromStart ? "start" : _.collapseFromEnd ? "end" : null : null, [E, _.collapseFromStart, _.collapseFromEnd]), U = E && s, V = ae(() => Qe(e), [e]), O = V?.unit === "pixels", Y = O ? void 0 : V?.value, y = x(j.current), N = !!y?.collapsed, be = (y?.size ?? 0) <= 0, ce = N || be, [Pe, he] = Me(() => O && V ? V.value : y?.size !== void 0 ? y.size : 0), [ue, pe] = Me(() => !O && V ? V.value : y?.percentageSize !== void 0 ? y.percentageSize : 0), ge = J(Pe), ye = J(ue), Be = J(null), Re = J(null);
1304
+ se(() => () => {
1305
+ Be.current && clearTimeout(Be.current), Re.current && clearTimeout(Re.current);
1306
+ }, []);
1307
+ const G = ae(
1308
+ () => lt({
1309
+ ref: ge,
1310
+ setState: he,
1311
+ panelIdRef: j,
1312
+ label: "pixel",
1313
+ timerRef: Be
1314
+ }),
1315
+ []
1316
+ ), le = ae(
1317
+ () => lt({
1318
+ ref: ye,
1319
+ setState: pe,
1320
+ panelIdRef: j,
1321
+ label: "percentage",
1322
+ timerRef: Re
1323
+ }),
1324
+ []
1325
+ ), P = Se(() => {
1326
+ ge.current !== 0 && (ge.current = 0, he(0)), ye.current !== 0 && (ye.current = 0, pe(0));
1327
+ }, []);
1328
+ se(() => {
1329
+ if (!S)
1330
+ return;
1331
+ let T = 0;
1332
+ if (O && V) {
1333
+ let q = V.value;
1334
+ n && typeof n == "object" && n.unit === "pixels" && (q = Math.max(q, n.value)), d && typeof d == "object" && d.unit === "pixels" && (q = Math.min(q, d.value)), T = q;
1335
+ }
1336
+ const R = U, F = R ? oe : null;
1337
+ s && !E && tt.warn("Panel defaultCollapsed is ignored because collapsible configuration is not provided.");
1338
+ const k = E && R && O ? T : void 0, Q = E ? Y : void 0, ne = O ? T : void 0, K = {
1339
+ id: j.current,
1340
+ size: R ? 0 : T,
1341
+ percentageSize: R ? 0 : Y,
1342
+ preferredPercentageSize: Y,
1343
+ preferredPixelSize: ne,
1344
+ sizeUnit: V?.unit || "percentage",
1345
+ originalPixelSize: O ? T : void 0,
1346
+ minSize: n,
1347
+ maxSize: d,
1348
+ collapseFromStart: _.collapseFromStart,
1349
+ collapseFromEnd: _.collapseFromEnd,
1350
+ collapsedByDirection: F,
1351
+ collapsed: R,
1352
+ sizeBeforeCollapse: k,
1353
+ percentageSizeBeforeCollapse: Q,
1354
+ preferredPercentageSizeBeforeCollapse: E ? Y : void 0,
1355
+ preferredPixelSizeBeforeCollapse: E ? ne : void 0,
1356
+ pixelAdjustPriority: a,
1357
+ flexAdjustPriority: o,
1358
+ autoMinSize: r
1359
+ };
1360
+ m(K);
1361
+ }, [
1362
+ r,
1363
+ _.collapseFromEnd,
1364
+ _.collapseFromStart,
1365
+ s,
1366
+ V,
1367
+ o,
1368
+ E,
1369
+ S,
1370
+ O,
1371
+ d,
1372
+ n,
1373
+ a,
1374
+ oe,
1375
+ Y,
1376
+ m,
1377
+ U
1378
+ ]), se(() => () => {
1379
+ v(j.current), D(j.current, null);
1380
+ }, [v, D]);
1381
+ const $ = y?.size ?? 0;
1382
+ se(() => {
1383
+ const T = re.current;
1384
+ if (!T) return;
1385
+ const R = () => {
1386
+ if (!y)
1387
+ return;
1388
+ const K = T.parentElement;
1389
+ if (!K) return;
1390
+ const W = T.getBoundingClientRect(), q = Oe(K, "horizontal"), f = Oe(K, "vertical"), L = b === "horizontal" ? W.width : W.height, ee = b === "horizontal" ? q.inner : f.inner, ie = et(ee);
1391
+ if (ce) {
1392
+ P();
1393
+ return;
1394
+ }
1395
+ const xe = y.size ?? 0, Ne = Math.max(2, ie * 0.5);
1396
+ if (xe > ie && L < Ne) {
1397
+ tt.debug("skip noisy measurement", {
1398
+ panelId: j.current,
1399
+ expectedPanelSize: xe,
1400
+ measured: L,
1401
+ noiseThreshold: Ne
1402
+ });
1403
+ return;
1404
+ }
1405
+ if (L > 0) {
1406
+ G(L), ee > 0 && le(L / ee * 100);
1407
+ return;
1408
+ }
1409
+ y.size !== void 0 && G(y.size), y.percentageSize !== void 0 ? le(y.percentageSize) : y.sizeUnit === "pixels" && y.size !== void 0 && ee > 0 && le(y.size / ee * 100);
1410
+ }, F = new ResizeObserver(() => {
1411
+ R();
1412
+ });
1413
+ F.observe(T), R();
1414
+ const k = [], Q = new MutationObserver(() => {
1415
+ (() => {
1416
+ if (!re.current) return !1;
1417
+ const W = re.current.getBoundingClientRect();
1418
+ return (b === "horizontal" ? W.width : W.height) !== ge.current;
1419
+ })() && setTimeout(R, 0);
1420
+ }), ne = T.parentElement;
1421
+ return ne && Q.observe(ne, {
1422
+ childList: !0,
1423
+ subtree: !0,
1424
+ attributes: !0,
1425
+ attributeFilter: ["style", "class"]
1426
+ }), () => {
1427
+ F.disconnect(), Q.disconnect();
1428
+ for (const K of k)
1429
+ clearTimeout(K);
1430
+ };
1431
+ }, [le, G, y, b, ce, P]);
1432
+ const l = y?.size, g = y?.percentageSize, w = y?.sizeUnit;
1433
+ se(() => {
1434
+ if (y) {
1435
+ if (ce) {
1436
+ P();
1437
+ return;
1438
+ }
1439
+ if (l !== void 0 && G(l), g !== void 0)
1440
+ le(g);
1441
+ else if (w === "pixels" && l !== void 0) {
1442
+ const T = re.current, R = T?.parentElement;
1443
+ if (T && R) {
1444
+ const { width: F, height: k } = T.getBoundingClientRect(), Q = R.clientWidth, ne = R.clientHeight, K = b === "horizontal" ? F : k, W = b === "horizontal" ? Q : ne;
1445
+ if (K > 0 && W > 0) {
1446
+ const q = K / W * 100;
1447
+ le(q);
1448
+ }
1449
+ }
1450
+ }
1451
+ }
1452
+ }, [le, G, y, g, l, w, b, ce, P]), se(() => {
1453
+ D(j.current, {
1454
+ pixelSize: Pe,
1455
+ percentageSize: ue
1456
+ });
1457
+ }, [D, Pe, ue]);
1458
+ const M = () => ce ? "0px" : y?.originalPixelSize !== void 0 ? `${$}px` : y?.percentageSize !== void 0 ? `${y.percentageSize}%` : `${$}px`, A = y?.sizeUnit === "percentage" && !y?.collapsed ? 1 : 0, B = {
1459
+ flexBasis: M(),
1460
+ flexGrow: 0,
1461
+ flexShrink: A,
1462
+ overflow: "hidden",
1463
+ position: "relative",
1464
+ boxSizing: "border-box",
1465
+ minHeight: "0px",
1466
+ minWidth: "0px",
1467
+ ...i
1468
+ };
1469
+ b === "horizontal" ? (B.height = "100%", B.minWidth = 0) : (B.width = "100%", B.minHeight = 0), ce && (b === "horizontal" ? (B.width = "0px", B.minWidth = "0px") : (B.height = "0px", B.minHeight = "0px"), B.flexGrow = 0, B.flexShrink = 0, B.pointerEvents = "none", B.visibility = "hidden", N && (B.display = "none"));
1470
+ const H = b === "horizontal" ? X.width : X.height, Z = ae(
1471
+ () => ({
1472
+ position: "absolute",
1473
+ inset: "0px",
1474
+ overflow: h,
1475
+ display: "flex",
1476
+ flexDirection: "column",
1477
+ width: "100%",
1478
+ height: "100%",
1479
+ minWidth: "0px",
1480
+ minHeight: "0px"
1481
+ }),
1482
+ [h]
1483
+ );
1484
+ return /* @__PURE__ */ fe(
1485
+ "div",
1486
+ {
1487
+ ref: re,
1488
+ className: $e("panel", c),
1489
+ style: B,
1490
+ "data-panel-id": j.current,
1491
+ "data-panel-size": $,
1492
+ "data-panel-size-unit": y?.sizeUnit || "percentage",
1493
+ "data-panel-pixel-size": y?.sizeUnit === "pixels" ? y?.originalPixelSize : null,
1494
+ "data-panel-order": u,
1495
+ "data-panel-collapsible": E,
1496
+ "data-panel-collapse-start": _.collapseFromStart,
1497
+ "data-panel-collapse-end": _.collapseFromEnd,
1498
+ "data-panel-collapsed": y?.collapsed,
1499
+ "aria-hidden": ce,
1500
+ children: [
1501
+ /* @__PURE__ */ I("div", { style: Z, children: p }),
1502
+ C && /* @__PURE__ */ I(_t, { panel: y, measuredPixelSize: Pe, measuredPercentageSize: ue, containerAxisSize: H, direction: b })
1503
+ ]
1504
+ }
1505
+ );
1506
+ }
1507
+ ), Ht = (t) => JSON.stringify(
1508
+ t.map((e) => ({
1509
+ id: e.id,
1510
+ size: e.size,
1511
+ percentageSize: e.percentageSize ?? null,
1512
+ preferredPercentageSize: e.preferredPercentageSize ?? null,
1513
+ preferredPixelSize: e.preferredPixelSize ?? null,
1514
+ sizeUnit: e.sizeUnit,
1515
+ originalPixelSize: e.originalPixelSize ?? null,
1516
+ minSize: e.minSize ?? null,
1517
+ maxSize: e.maxSize ?? null,
1518
+ autoMinSize: e.autoMinSize ?? null,
1519
+ collapseFromStart: e.collapseFromStart,
1520
+ collapseFromEnd: e.collapseFromEnd,
1521
+ collapsedByDirection: e.collapsedByDirection ?? null,
1522
+ collapsed: e.collapsed ?? !1,
1523
+ sizeBeforeCollapse: e.sizeBeforeCollapse ?? null,
1524
+ preferredPercentageSizeBeforeCollapse: e.preferredPercentageSizeBeforeCollapse ?? null,
1525
+ preferredPixelSizeBeforeCollapse: e.preferredPixelSizeBeforeCollapse ?? null,
1526
+ measuredPixelSizeBeforeCollapse: e.measuredPixelSizeBeforeCollapse ?? null,
1527
+ pixelAdjustPriority: e.pixelAdjustPriority ?? null,
1528
+ flexAdjustPriority: e.flexAdjustPriority ?? null,
1529
+ measuredPixelSize: e.measuredPixelSize ?? null,
1530
+ measuredPercentageSize: e.measuredPercentageSize ?? null
1531
+ }))
1532
+ ), Ut = (t) => JSON.stringify(
1533
+ t.map((e) => ({
1534
+ id: e.id,
1535
+ thickness: e.thickness,
1536
+ visible: e.visible,
1537
+ direction: e.direction,
1538
+ startPanelId: e.startPanelId ?? null,
1539
+ endPanelId: e.endPanelId ?? null
1540
+ }))
1541
+ ), Wt = () => {
1542
+ const t = /* @__PURE__ */ new Set(), e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set();
1543
+ let d = null, r = 0, c = !0, i = [], p = {
1544
+ ownerId: null,
1545
+ groups: i
1546
+ };
1547
+ const u = () => {
1548
+ for (const x of t)
1549
+ x();
1550
+ }, z = () => {
1551
+ c = !0, u();
1552
+ }, s = () => {
1553
+ const x = d;
1554
+ if (x && n.has(x))
1555
+ return !1;
1556
+ d = null;
1557
+ const C = n.values().next();
1558
+ return C.done || (d = C.value), x !== d;
1559
+ };
1560
+ return {
1561
+ subscribe: (x) => (t.add(x), () => {
1562
+ t.delete(x);
1563
+ }),
1564
+ getSnapshot: () => (s() && (c = !0), c && (i = Array.from(e.values()).sort((C, S) => C.index - S.index).map(({ serializedPanels: C, serializedHandles: S, ...D }) => D), p = {
1565
+ ownerId: d,
1566
+ groups: i
1567
+ }, c = !1), p),
1568
+ getOwnerId: () => (s() && (c = !0), d),
1569
+ enableGroup: (x) => {
1570
+ const C = n.size;
1571
+ n.add(x), n.size !== C && s() && z();
1572
+ },
1573
+ disableGroup: (x) => {
1574
+ n.delete(x) && s() && z();
1575
+ },
1576
+ updateGroup: (x, C) => {
1577
+ const S = e.get(x), D = S?.index ?? r++, X = Ht(C.panels), re = Ut(C.handles), de = S?.displayName !== C.displayName, j = S?.direction !== C.direction, _ = S ? S.containerSize.width !== C.containerSize.width || S.containerSize.height !== C.containerSize.height : !0;
1578
+ let E = S?.serializedPanels !== X;
1579
+ if (!E && S)
1580
+ if (S.panels.length !== C.panels.length)
1581
+ E = !0;
1582
+ else
1583
+ for (let Y = 0; Y < C.panels.length; Y += 1) {
1584
+ const y = S.panels[Y], N = C.panels[Y];
1585
+ if (!(y && N)) {
1586
+ E = !0;
1587
+ break;
1588
+ }
1589
+ if (y.id !== N.id || y.size !== N.size || y.percentageSize !== N.percentageSize || y.collapsed !== N.collapsed || y.measuredPixelSize !== N.measuredPixelSize || y.measuredPercentageSize !== N.measuredPercentageSize) {
1590
+ E = !0;
1591
+ break;
1592
+ }
1593
+ }
1594
+ let oe = S?.serializedHandles !== re;
1595
+ if (!oe && S)
1596
+ if (S.handles.length !== C.handles.length)
1597
+ oe = !0;
1598
+ else
1599
+ for (let Y = 0; Y < C.handles.length; Y += 1) {
1600
+ const y = S.handles[Y], N = C.handles[Y];
1601
+ if (!(y && N)) {
1602
+ oe = !0;
1603
+ break;
1604
+ }
1605
+ if (y.id !== N.id || y.thickness !== N.thickness || y.visible !== N.visible || y.direction !== N.direction || y.startPanelId !== N.startPanelId || y.endPanelId !== N.endPanelId) {
1606
+ oe = !0;
1607
+ break;
1608
+ }
1609
+ }
1610
+ if (!S && C.panels.length === 0 && C.handles.length === 0 || S && !de && !j && !_ && !E && !oe)
1611
+ return;
1612
+ const U = C.panels.map((Y) => ({ ...Y })), V = C.handles.map((Y) => ({ ...Y })), O = { ...C.containerSize };
1613
+ e.set(x, {
1614
+ groupId: x,
1615
+ displayName: C.displayName,
1616
+ direction: C.direction,
1617
+ containerSize: O,
1618
+ panels: U,
1619
+ handles: V,
1620
+ index: D,
1621
+ serializedPanels: X,
1622
+ serializedHandles: re
1623
+ }), z();
1624
+ },
1625
+ removeGroup: (x) => {
1626
+ const C = e.delete(x), S = n.delete(x), D = s();
1627
+ (C || S || D) && z();
1628
+ }
1629
+ };
1630
+ }, Fe = Wt(), $t = () => ht(Fe.subscribe, Fe.getOwnerId, Fe.getOwnerId), jt = () => ht(Fe.subscribe, Fe.getSnapshot, Fe.getSnapshot), Vt = (t) => {
1631
+ Fe.enableGroup(t);
1632
+ }, ct = (t) => {
1633
+ Fe.disableGroup(t);
1634
+ }, Yt = (t, e) => {
1635
+ Fe.updateGroup(t, e);
1636
+ }, dt = (t) => {
1637
+ Fe.removeGroup(t);
1638
+ };
1639
+ let ut = 0;
1640
+ const Zt = () => (ut += 1, `panel-group-${ut}`), _e = (t, e) => typeof t != "number" || !Number.isFinite(t) ? "—" : `${(t < 0 ? 0 : t).toFixed(8)}${e}`, Xt = {
1641
+ position: "fixed",
1642
+ left: "50%",
1643
+ bottom: "20px",
1644
+ transform: "translate(-50%, 0)",
1645
+ zIndex: 100,
1646
+ maxWidth: "min(90vw, 1120px)",
1647
+ width: "100%",
1648
+ borderRadius: "14px",
1649
+ backgroundColor: "rgba(15, 23, 42, 0.72)",
1650
+ color: "#e2e8f0",
1651
+ fontFamily: "monospace",
1652
+ fontSize: "11px",
1653
+ lineHeight: 1.6,
1654
+ boxShadow: "0 22px 45px rgba(15,23,42,0.45)",
1655
+ border: "1px solid rgba(148, 163, 184, 0.22)",
1656
+ backdropFilter: "blur(10px)",
1657
+ WebkitBackdropFilter: "blur(10px)",
1658
+ pointerEvents: "auto",
1659
+ overflow: "auto"
1660
+ }, qt = {
1661
+ display: "flex",
1662
+ justifyContent: "space-between",
1663
+ alignItems: "center",
1664
+ flexWrap: "wrap",
1665
+ gap: "12px"
1666
+ }, Jt = {
1667
+ display: "flex",
1668
+ flexDirection: "column",
1669
+ gap: "4px"
1670
+ }, Kt = {
1671
+ padding: "6px 10px",
1672
+ borderRadius: "9999px",
1673
+ border: "1px solid rgba(148, 163, 184, 0.35)",
1674
+ color: "#e2e8f0",
1675
+ fontWeight: 600,
1676
+ fontSize: "10px",
1677
+ letterSpacing: "0.03em",
1678
+ textTransform: "uppercase",
1679
+ cursor: "pointer",
1680
+ transition: "background-color 0.18s ease, border-color 0.18s ease"
1681
+ }, Qt = {
1682
+ padding: "10px 12px",
1683
+ borderRadius: "10px",
1684
+ backgroundColor: "rgba(30, 41, 59, 0.55)",
1685
+ border: "1px solid rgba(148, 163, 184, 0.18)",
1686
+ display: "flex",
1687
+ flexDirection: "column",
1688
+ gap: "10px"
1689
+ }, ei = {
1690
+ padding: "8px 10px",
1691
+ borderRadius: "8px",
1692
+ backgroundColor: "rgba(15, 23, 42, 0.55)",
1693
+ border: "1px solid rgba(148, 163, 184, 0.16)",
1694
+ display: "flex",
1695
+ flexDirection: "column",
1696
+ gap: "4px"
1697
+ }, ft = {
1698
+ display: "flex",
1699
+ justifyContent: "space-between",
1700
+ alignItems: "center",
1701
+ gap: "6px"
1702
+ }, ti = {
1703
+ display: "grid",
1704
+ gridTemplateColumns: "auto 1fr",
1705
+ gap: "2px 10px",
1706
+ color: "#e2e8f0"
1707
+ }, ii = {
1708
+ padding: "2px 6px",
1709
+ borderRadius: "9999px",
1710
+ fontSize: "10px",
1711
+ textTransform: "uppercase"
1712
+ }, ri = (t) => {
1713
+ const e = t.reason === "minimum-exceeded", n = e ? "Layout unavailable: minimum panel sizes exceed the container." : "Layout unavailable: panels cannot fill the container with their maximum sizes.", d = e ? `Min required: ${Math.ceil(t.totalMinimumSize ?? 0)}px | Available: ${Math.floor(t.availableContainerSize)}px` : `Max total: ${Math.floor(t.totalMaximumSize ?? 0)}px | Needed: ${Math.floor(t.availableContainerSize)}px`;
1714
+ return { summary: n, detail: d };
1715
+ }, ni = (t, e) => {
1716
+ let n = !1;
1717
+ const d = t.map((r) => {
1718
+ const c = e[r.id];
1719
+ return !c || r.measuredPixelSize === c.pixelSize && r.measuredPercentageSize === c.percentageSize ? r : (n = !0, {
1720
+ ...r,
1721
+ measuredPixelSize: c.pixelSize,
1722
+ measuredPercentageSize: c.percentageSize
1723
+ });
1724
+ });
1725
+ return n ? d : t;
1726
+ }, pt = (t, e, n) => {
1727
+ const d = Oe(t, "horizontal"), r = Oe(t, "vertical"), c = t.getBoundingClientRect(), i = d.inner > 0 ? d.inner : e ?? c.width, p = r.inner > 0 ? r.inner : n ?? c.height;
1728
+ return { width: i, height: p };
1729
+ }, fi = (t) => {
1730
+ const { id: e, className: n, style: d, children: r, direction: c } = t, { groupRef: i, contextValue: p, groupStyle: u } = Ot(t), [z, s] = Me({ width: 0, height: 0 }), a = p.layoutConstraintViolation, o = !!a, h = ae(() => {
1731
+ if (!a)
1732
+ return null;
1733
+ const { summary: U, detail: V } = ri(a);
1734
+ return /* @__PURE__ */ fe(
1735
+ "div",
1736
+ {
1737
+ className: "flex w-full flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-slate-300 border-dashed bg-slate-100/70 px-6 py-8 text-center text-slate-600 text-sm dark:border-slate-600 dark:bg-slate-800/50 dark:text-slate-200",
1738
+ "data-panel-group-placeholder": "constraint-violation",
1739
+ children: [
1740
+ /* @__PURE__ */ I("span", { children: U }),
1741
+ /* @__PURE__ */ I("span", { className: "text-slate-500 text-xs dark:text-slate-400", children: V })
1742
+ ]
1743
+ }
1744
+ );
1745
+ }, [a]), m = J(e ?? Zt()).current, v = e ?? m, x = p.showDebugInfo && p.panels.length > 0, C = x ? p.panels : [], S = x ? p.panelMeasurements : {}, D = ae(() => {
1746
+ if (!x)
1747
+ return [];
1748
+ const U = Object.values(p.handleMeasurements);
1749
+ return U.length <= 1 ? U : U.slice().sort((V, O) => V.id.localeCompare(O.id));
1750
+ }, [p.handleMeasurements, x]), X = p.containerSize, re = z.width > 0 ? z.width : X.width, de = z.height > 0 ? z.height : X.height, j = $t(), _ = x && j === m;
1751
+ Xe(() => {
1752
+ if (!x) {
1753
+ s({ width: 0, height: 0 });
1754
+ return;
1755
+ }
1756
+ if (typeof window > "u" || typeof ResizeObserver > "u")
1757
+ return;
1758
+ const U = i.current;
1759
+ if (!U)
1760
+ return;
1761
+ const V = (Y) => {
1762
+ s((y) => y.width === Y.width && y.height === Y.height ? y : Y);
1763
+ }, O = new ResizeObserver((Y) => {
1764
+ for (const y of Y) {
1765
+ if (y.target !== U)
1766
+ continue;
1767
+ const N = pt(U, y.contentRect.width, y.contentRect.height);
1768
+ V(N);
1769
+ }
1770
+ });
1771
+ return O.observe(U), V(pt(U)), () => {
1772
+ O.disconnect();
1773
+ };
1774
+ }, [i, x]);
1775
+ const E = ae(() => ni(C, S), [C, S]);
1776
+ se(() => {
1777
+ if (!x) {
1778
+ ct(m), dt(m);
1779
+ return;
1780
+ }
1781
+ return Vt(m), () => {
1782
+ ct(m), dt(m);
1783
+ };
1784
+ }, [x, m]), se(() => {
1785
+ x && Yt(m, {
1786
+ displayName: v,
1787
+ direction: c,
1788
+ containerSize: {
1789
+ width: re,
1790
+ height: de
1791
+ },
1792
+ panels: E,
1793
+ handles: D
1794
+ });
1795
+ }, [x, m, v, c, re, de, E, D]);
1796
+ const oe = ae(() => {
1797
+ const U = {
1798
+ ...u,
1799
+ ...d
1800
+ };
1801
+ return U.position || (U.position = "relative"), U;
1802
+ }, [u, d]);
1803
+ return /* @__PURE__ */ fe(gt.Provider, { value: p, children: [
1804
+ /* @__PURE__ */ fe("div", { ref: i, className: $e("panel-group", c === "horizontal" ? "flex-row" : "flex-col", n), style: oe, "data-panel-group-id": e, "data-panel-group-direction": c, children: [
1805
+ r,
1806
+ o && h ? /* @__PURE__ */ I(
1807
+ "div",
1808
+ {
1809
+ className: "pointer-events-auto",
1810
+ style: {
1811
+ position: "absolute",
1812
+ inset: 0,
1813
+ zIndex: 40,
1814
+ display: "flex",
1815
+ flexDirection: "column",
1816
+ alignItems: "center",
1817
+ justifyContent: "center",
1818
+ backgroundColor: "rgba(248, 250, 252, 0.82)",
1819
+ backdropFilter: "blur(2px)"
1820
+ },
1821
+ children: h
1822
+ }
1823
+ ) : null
1824
+ ] }),
1825
+ _ && /* @__PURE__ */ I(oi, {})
1826
+ ] });
1827
+ }, oi = () => {
1828
+ const e = jt().groups, [n, d] = Me(!0);
1829
+ if (e.length === 0 || typeof document > "u")
1830
+ return null;
1831
+ const r = e.reduce((u, z) => u + z.panels.length, 0), c = e.reduce((u, z) => u + (z.handles?.length ?? 0), 0), i = () => d((u) => !u), p = /* @__PURE__ */ fe(
1832
+ "div",
1833
+ {
1834
+ style: {
1835
+ ...Xt,
1836
+ padding: n ? "10px 18px" : "14px 18px",
1837
+ maxHeight: n ? "52px" : "min(65vh, 520px)",
1838
+ transition: "max-height 0.24s ease, padding 0.24s ease"
1839
+ },
1840
+ children: [
1841
+ /* @__PURE__ */ fe(
1842
+ "div",
1843
+ {
1844
+ style: {
1845
+ ...qt,
1846
+ marginBottom: n ? 0 : "12px"
1847
+ },
1848
+ children: [
1849
+ /* @__PURE__ */ fe("div", { style: Jt, children: [
1850
+ /* @__PURE__ */ I(
1851
+ "span",
1852
+ {
1853
+ style: {
1854
+ fontWeight: 700,
1855
+ fontSize: "12px",
1856
+ letterSpacing: "0.03em"
1857
+ },
1858
+ children: "Panel Overview"
1859
+ }
1860
+ ),
1861
+ /* @__PURE__ */ fe("span", { style: { color: "#cbd5f5" }, children: [
1862
+ "groups: ",
1863
+ e.length,
1864
+ " / panels: ",
1865
+ r,
1866
+ " / resizers: ",
1867
+ c
1868
+ ] })
1869
+ ] }),
1870
+ /* @__PURE__ */ I(
1871
+ "button",
1872
+ {
1873
+ type: "button",
1874
+ onClick: i,
1875
+ style: {
1876
+ ...Kt,
1877
+ backgroundColor: n ? "rgba(59, 130, 246, 0.2)" : "rgba(71, 85, 105, 0.45)"
1878
+ },
1879
+ title: n ? "Panel Overview を開く" : "Panel Overview を閉じる",
1880
+ children: n ? "開く" : "閉じる"
1881
+ }
1882
+ )
1883
+ ]
1884
+ }
1885
+ ),
1886
+ !n && /* @__PURE__ */ I(
1887
+ "div",
1888
+ {
1889
+ style: {
1890
+ display: "flex",
1891
+ flexDirection: "column",
1892
+ gap: "12px",
1893
+ maxHeight: "45vh",
1894
+ overflowY: "auto",
1895
+ paddingRight: "6px"
1896
+ },
1897
+ children: e.map((u, z) => {
1898
+ const s = u.direction === "horizontal" ? u.containerSize.width : u.containerSize.height;
1899
+ return /* @__PURE__ */ fe("div", { style: Qt, children: [
1900
+ /* @__PURE__ */ fe(
1901
+ "div",
1902
+ {
1903
+ style: {
1904
+ ...ft,
1905
+ flexWrap: "wrap",
1906
+ gap: "10px",
1907
+ color: "#dbeafe"
1908
+ },
1909
+ children: [
1910
+ /* @__PURE__ */ fe(
1911
+ "span",
1912
+ {
1913
+ style: {
1914
+ fontWeight: 600,
1915
+ fontSize: "11px",
1916
+ letterSpacing: "0.02em",
1917
+ textTransform: "uppercase"
1918
+ },
1919
+ children: [
1920
+ "group ",
1921
+ z + 1,
1922
+ ": ",
1923
+ u.displayName
1924
+ ]
1925
+ }
1926
+ ),
1927
+ /* @__PURE__ */ fe("span", { children: [
1928
+ "direction: ",
1929
+ u.direction,
1930
+ " / container: ",
1931
+ _e(u.containerSize.width, "px"),
1932
+ " × ",
1933
+ _e(u.containerSize.height, "px")
1934
+ ] })
1935
+ ]
1936
+ }
1937
+ ),
1938
+ /* @__PURE__ */ I(
1939
+ "div",
1940
+ {
1941
+ style: {
1942
+ display: "grid",
1943
+ gridTemplateColumns: "repeat(auto-fill, minmax(220px, 1fr))",
1944
+ gap: "10px"
1945
+ },
1946
+ children: u.panels.map((a, o) => {
1947
+ const h = a.measuredPixelSize ?? a.size, b = a.size, m = _e(b, "px"), v = a.percentageSize ?? (s > 0 ? a.size / s * 100 : void 0), x = a.measuredPercentageSize !== void 0 ? a.measuredPercentageSize : s > 0 ? h / s * 100 : void 0, C = a.collapsed || h <= St, S = a.collapsed ? "collapsed" : C ? "hidden" : "visible", D = _e(v, "%"), X = _e(x, "%"), re = _e(h, "px");
1948
+ return /* @__PURE__ */ fe("div", { style: ei, children: [
1949
+ /* @__PURE__ */ fe("div", { style: ft, children: [
1950
+ /* @__PURE__ */ I("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis" }, children: a.id }),
1951
+ /* @__PURE__ */ I(
1952
+ "span",
1953
+ {
1954
+ style: {
1955
+ ...ii,
1956
+ backgroundColor: a.collapsed ? "rgba(251, 113, 133, 0.25)" : C ? "rgba(250, 204, 21, 0.25)" : "rgba(74, 222, 128, 0.25)",
1957
+ color: a.collapsed ? "#fecdd3" : C ? "#fef08a" : "#bbf7d0"
1958
+ },
1959
+ children: S
1960
+ }
1961
+ )
1962
+ ] }),
1963
+ /* @__PURE__ */ fe("div", { style: ti, children: [
1964
+ /* @__PURE__ */ I("span", { children: "size (state):" }),
1965
+ /* @__PURE__ */ I("span", { children: m }),
1966
+ /* @__PURE__ */ I("span", { children: "size (measured):" }),
1967
+ /* @__PURE__ */ I("span", { children: re }),
1968
+ /* @__PURE__ */ I("span", { children: "percentage (state):" }),
1969
+ /* @__PURE__ */ I("span", { children: D }),
1970
+ /* @__PURE__ */ I("span", { children: "percentage (measured):" }),
1971
+ /* @__PURE__ */ I("span", { children: X }),
1972
+ /* @__PURE__ */ I("span", { children: "unit:" }),
1973
+ /* @__PURE__ */ I("span", { children: a.sizeUnit }),
1974
+ /* @__PURE__ */ I("span", { children: "min:" }),
1975
+ /* @__PURE__ */ I("span", { children: a.minSize !== void 0 ? JSON.stringify(a.minSize) : "—" }),
1976
+ /* @__PURE__ */ I("span", { children: "auto min:" }),
1977
+ /* @__PURE__ */ I("span", { children: a.autoMinSize !== void 0 ? JSON.stringify(a.autoMinSize) : "—" }),
1978
+ /* @__PURE__ */ I("span", { children: "max:" }),
1979
+ /* @__PURE__ */ I("span", { children: a.maxSize !== void 0 ? JSON.stringify(a.maxSize) : "—" }),
1980
+ /* @__PURE__ */ I("span", { children: "priority:" }),
1981
+ /* @__PURE__ */ I("span", { children: a.pixelAdjustPriority ?? "—" }),
1982
+ /* @__PURE__ */ I("span", { children: "flex priority:" }),
1983
+ /* @__PURE__ */ I("span", { children: a.flexAdjustPriority ?? "—" })
1984
+ ] })
1985
+ ] }, a.id || o);
1986
+ })
1987
+ }
1988
+ )
1989
+ ] }, u.groupId);
1990
+ })
1991
+ }
1992
+ )
1993
+ ]
1994
+ }
1995
+ );
1996
+ return Et(p, document.body);
1997
+ }, pi = it(({ id: t, disabled: e = !1, className: n, style: d, children: r, onDragging: c }) => {
1998
+ const { direction: i, resizePanels: p, getPanel: u, collapsePanel: z, expandPanel: s, panels: a, reportHandleMeasurement: o, containerSize: h, layoutConstraintViolation: b } = rt(), [m, v] = Me(!1), x = J(null), C = J(null), S = J(""), D = J(""), [X, re] = Me({ left: null, right: null }), de = zt(), j = J(t ?? `resize-handle-${de}`), _ = J(null), E = t ?? j.current, oe = !!b, U = e || oe;
1999
+ se(() => {
2000
+ if (x.current) {
2001
+ const P = x.current.parentElement;
2002
+ if (P) {
2003
+ C.current = P;
2004
+ const $ = Array.from(P.children), l = x.current, g = $.indexOf(l);
2005
+ if (g > 0 && g < $.length - 1) {
2006
+ let w = null, M = null;
2007
+ for (let A = g - 1; A >= 0; A -= 1) {
2008
+ const B = $[A];
2009
+ if (B.dataset.panelId) {
2010
+ w = B;
2011
+ break;
2012
+ }
2013
+ }
2014
+ for (let A = g + 1; A < $.length; A += 1) {
2015
+ const B = $[A];
2016
+ if (B.dataset.panelId) {
2017
+ M = B;
2018
+ break;
2019
+ }
2020
+ }
2021
+ S.current = w?.dataset.panelId || "", D.current = M?.dataset.panelId || "", re({
2022
+ left: S.current || null,
2023
+ right: D.current || null
2024
+ });
2025
+ }
2026
+ }
2027
+ }
2028
+ }, []), se(() => {
2029
+ if (E === j.current)
2030
+ return;
2031
+ const P = j.current;
2032
+ j.current = E, _.current = null, P !== E && o(P, null);
2033
+ }, [o, E]), se(() => {
2034
+ const P = j.current;
2035
+ return () => {
2036
+ o(P, null);
2037
+ };
2038
+ }, [o]);
2039
+ const V = Se(
2040
+ (P) => {
2041
+ if (U || !C.current) return;
2042
+ P.preventDefault(), P.stopPropagation();
2043
+ const $ = C.current, { inner: l } = Oe($, i), g = { x: P.clientX, y: P.clientY }, w = u(S.current), M = u(D.current);
2044
+ if (!(w && M)) return;
2045
+ const A = w.size, B = M.size;
2046
+ let H = 0;
2047
+ const Z = Rt;
2048
+ v(!0), c?.(!0), P.currentTarget.setPointerCapture(P.pointerId);
2049
+ const T = (F) => {
2050
+ if (!x.current) return;
2051
+ F.preventDefault(), F.stopPropagation();
2052
+ const k = performance.now();
2053
+ if (k - H < Z) return;
2054
+ H = k;
2055
+ const Q = i === "horizontal" ? F.clientX - g.x : F.clientY - g.y;
2056
+ if (Q === 0)
2057
+ return;
2058
+ const ne = A + Q, K = B - Q, W = u(S.current), q = u(D.current);
2059
+ if (W && q && S.current && D.current) {
2060
+ const f = te(W.minSize, 0, l), L = te(q.minSize, 0, l), ee = f, ie = L, xe = Math.min(l * mt, Pt), Ne = Math.min(l * It, Ft), ke = q.collapseFromStart, Ae = q.collapsedByDirection ?? "start";
2061
+ if (ke && !q.collapsed && K <= Math.max(L * 0.3, xe)) {
2062
+ z(D.current, "start");
2063
+ return;
2064
+ }
2065
+ const Ge = W.collapseFromEnd, Te = W.collapsedByDirection ?? "end";
2066
+ if (Ge && !W.collapsed && ne <= Math.max(f * 0.3, xe)) {
2067
+ z(S.current, "end");
2068
+ return;
2069
+ }
2070
+ if (q.collapsed && K > Math.max(L * 0.3, Ne)) {
2071
+ s(D.current, Ae, K);
2072
+ return;
2073
+ }
2074
+ if (W.collapsed && ne > Math.max(f * 0.3, Ne)) {
2075
+ s(S.current, Te, ne);
2076
+ return;
2077
+ }
2078
+ if (l > 0) {
2079
+ const we = W.size + q.size, Ie = et(l);
2080
+ let Je = !1;
2081
+ if (ee <= Ie && ne <= Ie && A !== 0) {
2082
+ const He = Math.max(0, we - 0);
2083
+ He >= ie && (p(S.current, D.current, 0, He), Je = !0);
2084
+ } else if (ie <= Ie && K <= Ie && B !== 0) {
2085
+ const He = Math.max(0, we - 0);
2086
+ He >= ee && (p(S.current, D.current, He, 0), Je = !0);
2087
+ }
2088
+ if (Je)
2089
+ return;
2090
+ }
2091
+ if (W.collapsed || q.collapsed)
2092
+ return;
2093
+ p(S.current, D.current, ne, K);
2094
+ }
2095
+ }, R = () => {
2096
+ v(!1), c?.(!1), document.removeEventListener("pointermove", T), document.removeEventListener("pointerup", R);
2097
+ };
2098
+ document.addEventListener("pointermove", T), document.addEventListener("pointerup", R);
2099
+ },
2100
+ [U, i, p, u, z, s, c]
2101
+ ), O = i === "horizontal", y = $e(
2102
+ "group absolute z-20 flex select-none items-center justify-center border-none bg-transparent transition-colors duration-150 overflow-visible",
2103
+ O ? "cursor-col-resize" : "cursor-row-resize",
2104
+ O ? "h-full" : "w-full",
2105
+ !U && "hover:bg-gray-200/70 dark:hover:bg-gray-700/70",
2106
+ !U && "active:bg-blue-300/60 dark:active:bg-blue-700/60",
2107
+ m && "bg-blue-200/80 dark:bg-blue-800/60",
2108
+ U && "cursor-not-allowed opacity-50",
2109
+ "focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50",
2110
+ n
2111
+ ), N = ae(() => {
2112
+ const P = ($) => {
2113
+ if (!$)
2114
+ return -1;
2115
+ for (let l = 0; l < a.length; l += 1)
2116
+ if (a[l].id === $)
2117
+ return l;
2118
+ return -1;
2119
+ };
2120
+ return {
2121
+ left: P(X.left),
2122
+ right: P(X.right)
2123
+ };
2124
+ }, [X.left, X.right, a]), be = O ? h.width : h.height, ce = ae(() => {
2125
+ const P = ($, l) => {
2126
+ if ($ > l)
2127
+ return 0;
2128
+ let g = 0;
2129
+ for (let w = $; w <= l; w += 1) {
2130
+ const M = a[w];
2131
+ if (!M)
2132
+ continue;
2133
+ const A = M.size ?? 0, B = Math.max(0, A);
2134
+ g += M.collapsed ? 0 : B;
2135
+ }
2136
+ return g;
2137
+ };
2138
+ return N.left >= 0 ? P(0, N.left) : N.right > 0 ? P(0, N.right - 1) : 0;
2139
+ }, [N.left, N.right, a]), Pe = ae(() => !Number.isFinite(ce) || ce < 0 ? 0 : be > 0 && ce > be ? be : ce, [ce, be]), he = ae(() => {
2140
+ const P = {
2141
+ position: "absolute",
2142
+ zIndex: 20,
2143
+ touchAction: "none"
2144
+ };
2145
+ return O ? (P.top = 0, P.left = `${Pe}px`, P.transform = "translateX(-50%)", P.width = `${nt}px`, P.height = "100%") : (P.left = 0, P.top = `${Pe}px`, P.transform = "translateY(-50%)", P.height = `${nt}px`, P.width = "100%"), P;
2146
+ }, [Pe, O]), ue = ae(() => {
2147
+ const P = et(be), $ = (Z) => {
2148
+ if (Z < 0 || Z >= a.length)
2149
+ return !1;
2150
+ const T = a[Z];
2151
+ return T ? T.collapsed ? !0 : T.size <= P : !1;
2152
+ }, l = (Z, T) => {
2153
+ if (!$(Z))
2154
+ return 0;
2155
+ let R = 0;
2156
+ for (let F = Z; F >= 0 && F < a.length && $(F); F += T)
2157
+ R += 1;
2158
+ return R;
2159
+ }, g = N.left, w = N.right, M = g >= 0 ? l(g, -1) : 0, A = w >= 0 ? l(w, 1) : 0;
2160
+ return {
2161
+ groupSize: M + A + 1,
2162
+ overlapIndex: M
2163
+ };
2164
+ }, [N.left, N.right, a, be]), pe = ae(() => {
2165
+ if (oe)
2166
+ return !0;
2167
+ if (ue.groupSize <= 1)
2168
+ return !1;
2169
+ const P = ue.groupSize - 1;
2170
+ return ue.overlapIndex > 0 && ue.overlapIndex < P;
2171
+ }, [ue, oe]), ge = ae(() => {
2172
+ if (ue.groupSize <= 1 || pe)
2173
+ return 0;
2174
+ const P = ue.groupSize > 1 ? 2 : 1;
2175
+ if (P === 1)
2176
+ return 0;
2177
+ const $ = ue.overlapIndex === 0 ? 0 : P - 1, l = (P - 1) / 2;
2178
+ return ($ - l) * Bt;
2179
+ }, [ue, pe]), ye = ae(() => {
2180
+ if (pe)
2181
+ return { display: "none" };
2182
+ if (ge !== 0)
2183
+ return O ? { transform: `translateX(${ge}px)` } : { transform: `translateY(${ge}px)` };
2184
+ }, [ge, O, pe]), Be = $e(
2185
+ "flex items-center justify-center rounded-full bg-white text-slate-700 ring-1 ring-inset ring-white/80 backdrop-blur-sm transition-colors duration-150 shadow-[0_0_0_1px_rgba(255,255,255,0.85),0_1px_3px_rgba(15,23,42,0.18)]",
2186
+ "dark:bg-slate-800/95 dark:text-slate-200 dark:ring-slate-500/60 dark:shadow-[0_0_0_1px_rgba(148,163,184,0.45),0_1px_3px_rgba(2,6,23,0.55)]",
2187
+ O ? "h-12 w-[6px] px-[2px]" : "h-[6px] w-20 py-[2px]",
2188
+ m && "bg-blue-200/80 ring-blue-300 shadow-[0_0_0_1px_rgba(191,219,254,0.65),0_1px_4px_rgba(59,130,246,0.45)] dark:bg-blue-900/70 dark:ring-blue-400 dark:shadow-[0_0_0_1px_rgba(147,197,253,0.5),0_1px_4px_rgba(59,130,246,0.55)]"
2189
+ ), Re = $e(
2190
+ "rounded-full bg-slate-600 transition-colors duration-150 shadow-[0_0_0_1px_rgba(255,255,255,0.9)] dark:bg-slate-200 dark:shadow-[0_0_0_1px_rgba(15,23,42,0.55)]",
2191
+ O ? "h-8 w-[2px]" : "h-[2px] w-16",
2192
+ m && "bg-blue-500 dark:bg-blue-300",
2193
+ !U && "group-hover:bg-slate-700 dark:group-hover:bg-slate-100"
2194
+ ), G = Se(() => {
2195
+ const P = x.current;
2196
+ if (!P)
2197
+ return;
2198
+ let $ = 0;
2199
+ if (!pe) {
2200
+ const w = i === "horizontal" ? P.offsetWidth : P.offsetHeight;
2201
+ let M = 0, A = 0;
2202
+ if (typeof window < "u") {
2203
+ const H = window.getComputedStyle(P);
2204
+ i === "horizontal" ? (M = Number.parseFloat(H.marginLeft || "0"), A = Number.parseFloat(H.marginRight || "0")) : (M = Number.parseFloat(H.marginTop || "0"), A = Number.parseFloat(H.marginBottom || "0"));
2205
+ }
2206
+ $ = [w, M, A].reduce((H, Z) => Number.isFinite(Z) ? H + Z : H, 0);
2207
+ }
2208
+ (!Number.isFinite($) || $ < 0) && ($ = 0);
2209
+ const l = {
2210
+ id: E,
2211
+ thickness: $,
2212
+ direction: i,
2213
+ visible: !pe && $ > Nt,
2214
+ startPanelId: X.left,
2215
+ endPanelId: X.right
2216
+ }, g = _.current;
2217
+ g && Math.abs(g.thickness - l.thickness) <= 0.25 && g.visible === l.visible && g.direction === l.direction && g.startPanelId === l.startPanelId && g.endPanelId === l.endPanelId || (_.current = l, o(E, l));
2218
+ }, [i, X.left, X.right, o, E, pe]);
2219
+ se(() => {
2220
+ G();
2221
+ }, [G]), se(() => {
2222
+ const P = x.current;
2223
+ if (!P)
2224
+ return;
2225
+ if (typeof ResizeObserver > "u") {
2226
+ G();
2227
+ return;
2228
+ }
2229
+ const $ = new ResizeObserver(() => {
2230
+ G();
2231
+ });
2232
+ return $.observe(P), () => {
2233
+ $.disconnect();
2234
+ };
2235
+ }, [G]);
2236
+ const le = ae(() => {
2237
+ const P = d ? { ...he, ...d } : he;
2238
+ return pe ? {
2239
+ ...P,
2240
+ display: "none",
2241
+ pointerEvents: "none",
2242
+ visibility: "hidden"
2243
+ } : P;
2244
+ }, [he, pe, d]);
2245
+ return /* @__PURE__ */ I(
2246
+ "button",
2247
+ {
2248
+ type: "button",
2249
+ ref: x,
2250
+ className: y,
2251
+ style: le,
2252
+ onPointerDown: V,
2253
+ disabled: U,
2254
+ "aria-hidden": pe || void 0,
2255
+ "aria-label": `Resize ${O ? "columns" : "rows"} - Drag to collapse/expand panels`,
2256
+ "data-resize-handle-id": E,
2257
+ title: `ドラッグして${O ? "列" : "行"}をリサイズ、端まで移動して折りたたみ/展開`,
2258
+ children: r || /* @__PURE__ */ I("div", { className: Be, style: ye, children: /* @__PURE__ */ I("span", { className: Re }) })
2259
+ }
2260
+ );
2261
+ }), zi = (t) => document.querySelector(`[data-panel-id="${t}"]`), hi = (t) => document.querySelector(`[data-panel-group-id="${t}"]`), gi = (t) => document.querySelector(`[data-resize-handle-id="${t}"]`);
2262
+ export {
2263
+ ui as Panel,
2264
+ fi as PanelGroup,
2265
+ gt as PanelGroupContext,
2266
+ pi as PanelResizeHandle,
2267
+ me as clamp,
2268
+ te as getConstraintInPixels,
2269
+ Oe as getContainerSize,
2270
+ zi as getPanelElement,
2271
+ hi as getPanelGroupElement,
2272
+ gi as getResizeHandleElement,
2273
+ Lt as loadLayout,
2274
+ Qe as normalizeSizeConfig,
2275
+ At as saveLayout,
2276
+ di as usePanelControls,
2277
+ rt as usePanelGroup,
2278
+ Ot as useResizablePanels
2279
+ };