react-panel-layout 0.6.1 → 0.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.
Files changed (115) hide show
  1. package/dist/FloatingWindow-Bw2djgpz.js +1542 -0
  2. package/dist/FloatingWindow-Bw2djgpz.js.map +1 -0
  3. package/dist/FloatingWindow-Cvyokf0m.cjs +2 -0
  4. package/dist/FloatingWindow-Cvyokf0m.cjs.map +1 -0
  5. package/dist/GridLayout-B4aCqSyd.js +947 -0
  6. package/dist/{GridLayout-UWNxXw77.js.map → GridLayout-B4aCqSyd.js.map} +1 -1
  7. package/dist/GridLayout-DNOClFzz.cjs +2 -0
  8. package/dist/{GridLayout-DKTg_N61.cjs.map → GridLayout-DNOClFzz.cjs.map} +1 -1
  9. package/dist/PanelSystem-B8Igvnb2.cjs +3 -0
  10. package/dist/PanelSystem-B8Igvnb2.cjs.map +1 -0
  11. package/dist/{PanelSystem-BqUzNtf2.js → PanelSystem-DDUSFjXD.js} +208 -247
  12. package/dist/PanelSystem-DDUSFjXD.js.map +1 -0
  13. package/dist/components/window/Drawer.d.ts +1 -0
  14. package/dist/components/window/DrawerRevealContext.d.ts +61 -0
  15. package/dist/components/window/drawerRevealAnimationUtils.d.ts +212 -0
  16. package/dist/components/window/drawerStyles.d.ts +5 -0
  17. package/dist/components/window/useDrawerSwipeTransform.d.ts +8 -2
  18. package/dist/components/window/useDrawerTransform.d.ts +68 -0
  19. package/dist/components/window/useRevealDrawerTransform.d.ts +56 -0
  20. package/dist/config.cjs +1 -1
  21. package/dist/config.cjs.map +1 -1
  22. package/dist/config.js +8 -7
  23. package/dist/config.js.map +1 -1
  24. package/dist/grid.cjs +1 -1
  25. package/dist/grid.js +2 -2
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.js +4 -4
  28. package/dist/modules/drawer/drawerStateMachine.d.ts +168 -0
  29. package/dist/modules/drawer/revealDrawerConstants.d.ts +33 -0
  30. package/dist/modules/drawer/revealDrawerStateMachine.d.ts +146 -0
  31. package/dist/modules/drawer/strategies/index.d.ts +8 -0
  32. package/dist/modules/drawer/strategies/overlayStrategy.d.ts +12 -0
  33. package/dist/modules/drawer/strategies/revealStrategy.d.ts +12 -0
  34. package/dist/modules/drawer/strategies/types.d.ts +116 -0
  35. package/dist/panels.cjs +1 -1
  36. package/dist/panels.js +1 -1
  37. package/dist/stack.cjs +1 -1
  38. package/dist/stack.cjs.map +1 -1
  39. package/dist/stack.js +306 -347
  40. package/dist/stack.js.map +1 -1
  41. package/dist/types.d.ts +14 -0
  42. package/dist/useAnimationFrame-BZ6D2lMq.cjs +2 -0
  43. package/dist/useAnimationFrame-BZ6D2lMq.cjs.map +1 -0
  44. package/dist/useAnimationFrame-Bg4e-H8O.js +394 -0
  45. package/dist/useAnimationFrame-Bg4e-H8O.js.map +1 -0
  46. package/dist/window.cjs +1 -1
  47. package/dist/window.js +1 -1
  48. package/package.json +1 -1
  49. package/src/components/gesture/SwipeSafeZone.tsx +1 -0
  50. package/src/components/grid/GridLayout.tsx +110 -38
  51. package/src/components/window/Drawer.tsx +114 -10
  52. package/src/components/window/DrawerLayers.tsx +48 -15
  53. package/src/components/window/DrawerRevealContext.spec.ts +20 -0
  54. package/src/components/window/DrawerRevealContext.tsx +99 -0
  55. package/src/components/window/drawerRevealAnimationUtils.spec.ts +375 -0
  56. package/src/components/window/drawerRevealAnimationUtils.ts +415 -0
  57. package/src/components/window/drawerStyles.spec.ts +39 -0
  58. package/src/components/window/drawerStyles.ts +24 -0
  59. package/src/components/window/useDrawerSwipeTransform.ts +28 -90
  60. package/src/components/window/useDrawerTransform.ts +505 -0
  61. package/src/components/window/useRevealDrawerTransform.spec.ts +1936 -0
  62. package/src/components/window/useRevealDrawerTransform.ts +105 -0
  63. package/src/demo/components/FullscreenDemoPage.tsx +47 -0
  64. package/src/demo/fullscreenRoutes.tsx +32 -0
  65. package/src/demo/index.tsx +5 -0
  66. package/src/demo/pages/Dialog/components/CardExpandDemo.tsx +23 -8
  67. package/src/demo/pages/Drawer/components/DrawerBasics.module.css +6 -1
  68. package/src/demo/pages/Drawer/components/DrawerBasics.tsx +14 -4
  69. package/src/demo/pages/Drawer/components/DrawerReveal.module.css +157 -0
  70. package/src/demo/pages/Drawer/components/DrawerReveal.tsx +128 -0
  71. package/src/demo/pages/Drawer/reveal/index.tsx +17 -0
  72. package/src/demo/pages/Drawer/reveal-fullscreen/index.tsx +135 -0
  73. package/src/demo/pages/Drawer/reveal-fullscreen/styles.module.css +233 -0
  74. package/src/demo/pages/Stack/components/StackBasics.spec.tsx +56 -52
  75. package/src/demo/pages/Stack/components/StackTablet.spec.tsx +39 -49
  76. package/src/demo/routes.tsx +2 -0
  77. package/src/hooks/gesture/testing/createGestureSimulator.ts +1 -0
  78. package/src/hooks/gesture/useNativeGestureGuard.spec.ts +10 -2
  79. package/src/hooks/gesture/utils.ts +15 -4
  80. package/src/hooks/useAnimatedVisibility.spec.ts +3 -3
  81. package/src/hooks/useOperationContinuity.spec.ts +17 -10
  82. package/src/hooks/useOperationContinuity.ts +5 -5
  83. package/src/hooks/useSharedElementTransition.ts +28 -7
  84. package/src/modules/dialog/dialogAnimationUtils.spec.ts +0 -1
  85. package/src/modules/dialog/useDialogContainer.spec.ts +11 -3
  86. package/src/modules/dialog/useDialogSwipeInput.spec.ts +49 -28
  87. package/src/modules/dialog/useDialogSwipeInput.ts +37 -6
  88. package/src/modules/dialog/useDialogTransform.spec.ts +63 -30
  89. package/src/modules/drawer/drawerStateMachine.ts +500 -0
  90. package/src/modules/drawer/revealDrawerConstants.ts +38 -0
  91. package/src/modules/drawer/revealDrawerStateMachine.spec.ts +558 -0
  92. package/src/modules/drawer/revealDrawerStateMachine.ts +197 -0
  93. package/src/modules/drawer/strategies/index.ts +9 -0
  94. package/src/modules/drawer/strategies/overlayStrategy.ts +133 -0
  95. package/src/modules/drawer/strategies/revealStrategy.ts +111 -0
  96. package/src/modules/drawer/strategies/types.ts +160 -0
  97. package/src/modules/drawer/useDrawerSwipeInput.ts +7 -4
  98. package/src/modules/pivot/SwipePivotContent.spec.tsx +48 -37
  99. package/src/modules/pivot/usePivotSwipeInput.spec.ts +8 -8
  100. package/src/modules/stack/swipeTransitionContinuity.spec.tsx +1 -1
  101. package/src/types.ts +15 -0
  102. package/dist/FloatingWindow-CUXnEtrb.js +0 -827
  103. package/dist/FloatingWindow-CUXnEtrb.js.map +0 -1
  104. package/dist/FloatingWindow-DMwyK0eK.cjs +0 -2
  105. package/dist/FloatingWindow-DMwyK0eK.cjs.map +0 -1
  106. package/dist/GridLayout-DKTg_N61.cjs +0 -2
  107. package/dist/GridLayout-UWNxXw77.js +0 -926
  108. package/dist/PanelSystem-BqUzNtf2.js.map +0 -1
  109. package/dist/PanelSystem-D603LKKv.cjs +0 -3
  110. package/dist/PanelSystem-D603LKKv.cjs.map +0 -1
  111. package/dist/useNativeGestureGuard-C7TSqEkr.cjs +0 -2
  112. package/dist/useNativeGestureGuard-C7TSqEkr.cjs.map +0 -1
  113. package/dist/useNativeGestureGuard-CGYo6O0r.js +0 -347
  114. package/dist/useNativeGestureGuard-CGYo6O0r.js.map +0 -1
  115. package/src/components/window/useDrawerSwipeTransform.spec.ts +0 -234
@@ -1,926 +0,0 @@
1
- import { jsx as w, Fragment as Z, jsxs as K } from "react/jsx-runtime";
2
- import * as d from "react";
3
- import { e as zt, F as Tt, u as wt, L as Mt, P as Pt, f as xt, G as kt, b as Ht } from "./FloatingWindow-CUXnEtrb.js";
4
- import { G as $, v as L, w as j } from "./styles-NkjuMOVS.js";
5
- import { u as Nt } from "./SwipePivotTabBar-DWrCuwEI.js";
6
- import { R as Dt } from "./ResizeHandle-CXjc1meV.js";
7
- import { u as St } from "./useIsomorphicLayoutEffect-DhmEnmZ_.js";
8
- import { u as st, b as it } from "./useDocumentPointerEvents-DXxw3qWj.js";
9
- const Gt = () => {
10
- const t = /* @__PURE__ */ new Map();
11
- return (e) => {
12
- if (!e)
13
- return;
14
- const n = t.get(e);
15
- if (n !== void 0)
16
- return n;
17
- const r = t.size;
18
- return t.set(e, r), r;
19
- };
20
- }, At = Gt(), V = /* @__PURE__ */ new Map(), $t = (t) => {
21
- const e = `ovs-threshold:${t.threshold}-rootMargin:${t.rootMargin}-root:${At(t.root)}`;
22
- if (V.has(e))
23
- return V.get(e);
24
- const n = new class {
25
- #t = /* @__PURE__ */ new Map();
26
- #e = new IntersectionObserver((r) => {
27
- r.forEach((o) => {
28
- const s = this.#t.get(o.target);
29
- s && s(o);
30
- });
31
- }, t);
32
- observe(r, o) {
33
- return this.#t.set(r, o), this.#e.observe(r), () => {
34
- this.#t.delete(r), this.#e.unobserve(r);
35
- };
36
- }
37
- }();
38
- return V.set(e, n), n;
39
- }, at = Object.freeze({
40
- x: 0,
41
- y: 0,
42
- width: 0,
43
- height: 0,
44
- top: 0,
45
- right: 0,
46
- bottom: 0,
47
- left: 0
48
- });
49
- function Ft(t, { threshold: e = 0, rootMargin: n = "0px", root: r = null }) {
50
- const [o, s] = d.useState(null);
51
- return d.useEffect(() => {
52
- const a = t.current;
53
- return a ? $t({
54
- threshold: e,
55
- rootMargin: n,
56
- root: r
57
- }).observe(a, (u) => {
58
- s({
59
- isIntersecting: u.isIntersecting,
60
- boundingClientRect: u.boundingClientRect,
61
- intersectionRatio: u.intersectionRatio,
62
- intersectionRect: u.intersectionRect,
63
- rootBounds: u.rootBounds,
64
- target: u.target,
65
- time: u.time
66
- });
67
- }) : void 0;
68
- }, [t, e, n, r]), d.useMemo(() => ({
69
- isIntersecting: o?.isIntersecting ?? !1,
70
- boundingClientRect: o?.boundingClientRect ?? at,
71
- intersectionRatio: o?.intersectionRatio ?? 0,
72
- intersectionRect: o?.intersectionRect ?? at,
73
- rootBounds: o?.rootBounds ?? null,
74
- target: o?.target ?? t.current,
75
- time: o?.time ?? 0
76
- }), [o, t]);
77
- }
78
- const vt = {
79
- position: "absolute",
80
- pointerEvents: "auto",
81
- boxSizing: "border-box",
82
- background: "transparent",
83
- border: "none"
84
- }, Ot = {
85
- ...vt,
86
- width: L,
87
- height: L,
88
- zIndex: 2
89
- }, Yt = {
90
- ...vt,
91
- zIndex: 1
92
- }, _t = {
93
- "top-left": {
94
- top: 0,
95
- left: 0,
96
- transform: "translate(-50%, -50%)",
97
- cursor: "nwse-resize"
98
- },
99
- "top-right": {
100
- top: 0,
101
- right: 0,
102
- transform: "translate(50%, -50%)",
103
- cursor: "nesw-resize"
104
- },
105
- "bottom-left": {
106
- bottom: 0,
107
- left: 0,
108
- transform: "translate(-50%, 50%)",
109
- cursor: "nesw-resize"
110
- },
111
- "bottom-right": {
112
- bottom: 0,
113
- right: 0,
114
- transform: "translate(50%, 50%)",
115
- cursor: "nwse-resize"
116
- }
117
- }, Bt = {
118
- left: {
119
- top: L,
120
- bottom: L,
121
- left: 0,
122
- width: $,
123
- transform: "translateX(-50%)",
124
- cursor: "ew-resize"
125
- },
126
- right: {
127
- top: L,
128
- bottom: L,
129
- right: 0,
130
- width: $,
131
- transform: "translateX(50%)",
132
- cursor: "ew-resize"
133
- },
134
- top: {
135
- left: L,
136
- right: L,
137
- top: 0,
138
- height: $,
139
- transform: "translateY(-50%)",
140
- cursor: "ns-resize"
141
- },
142
- bottom: {
143
- left: L,
144
- right: L,
145
- bottom: 0,
146
- height: $,
147
- transform: "translateY(50%)",
148
- cursor: "ns-resize"
149
- }
150
- }, Wt = [
151
- { key: "top-left", variant: "corner", horizontal: "left", vertical: "top" },
152
- { key: "top-right", variant: "corner", horizontal: "right", vertical: "top" },
153
- { key: "bottom-left", variant: "corner", horizontal: "left", vertical: "bottom" },
154
- { key: "bottom-right", variant: "corner", horizontal: "right", vertical: "bottom" },
155
- { key: "left", variant: "edge", horizontal: "left" },
156
- { key: "right", variant: "edge", horizontal: "right" },
157
- { key: "top", variant: "edge", vertical: "top" },
158
- { key: "bottom", variant: "edge", vertical: "bottom" }
159
- ], Xt = ({ layerId: t, onPointerDown: e }) => /* @__PURE__ */ w(Z, { children: Wt.map((n) => {
160
- const r = n.variant === "corner" ? Ot : Yt, o = n.variant === "corner" ? _t[n.key] : Bt[n.key], s = { ...r, ...o }, a = n.variant === "corner" ? { "data-resize-corner": n.key } : { "data-resize-edge": n.key };
161
- return /* @__PURE__ */ w(
162
- "div",
163
- {
164
- role: "presentation",
165
- "aria-hidden": "true",
166
- style: s,
167
- ...a,
168
- "data-layer-id": t,
169
- onPointerDown: (l) => e(n, l)
170
- },
171
- n.key
172
- );
173
- }) }), jt = ({ pivot: t }) => {
174
- const { Outlet: e } = Nt({
175
- items: t.items,
176
- activeId: t.activeId,
177
- defaultActiveId: t.defaultActiveId,
178
- onActiveChange: t.onActiveChange,
179
- transitionMode: t.transitionMode
180
- });
181
- return /* @__PURE__ */ w(e, {});
182
- }, Vt = (t, e) => t.pivot ? /* @__PURE__ */ w(jt, { pivot: t.pivot }) : t.cache ? e(t.id) : t.component, Ct = d.memo(({ layer: t, onClose: e }) => {
183
- const { getCachedContent: n } = zt(), r = Vt(t, n);
184
- return t.floating?.chrome ? /* @__PURE__ */ w(Tt, { id: t.id, config: t.floating, onClose: e, children: r }) : r;
185
- });
186
- Ct.displayName = "LayerContentRenderer";
187
- const Rt = d.memo(({ layerId: t, isResizable: e, onPointerDown: n }) => e ? /* @__PURE__ */ w(Xt, { layerId: t, onPointerDown: n }) : null);
188
- Rt.displayName = "LayerResizeHandles";
189
- const Kt = (t, e) => t ? "auto" : e ? "visible" : "hidden", Et = d.memo(({ layer: t, handleLayerPointerDown: e }) => {
190
- const { getLayerRenderState: n } = wt(), { style: r, isResizable: o, isResizing: s, onResizeHandlePointerDown: a } = n(t), l = d.useMemo(() => {
191
- const f = {};
192
- return t.gridArea && (f.gridArea = t.gridArea), t.gridRow && (f.gridRow = t.gridRow), t.gridColumn && (f.gridColumn = t.gridColumn), f;
193
- }, [t.gridArea, t.gridRow, t.gridColumn]), u = d.useMemo(() => {
194
- const f = !!t.floating, g = Kt(t.scrollable, f), b = {
195
- ...r,
196
- ...l,
197
- minWidth: 0,
198
- minHeight: 0,
199
- overflow: g
200
- };
201
- return o ? { ...b, position: "relative" } : b;
202
- }, [r, l, o, t.scrollable, t.floating]), p = d.useCallback(() => {
203
- t.floating?.onClose?.();
204
- }, [t.floating]);
205
- return /* @__PURE__ */ K(
206
- "div",
207
- {
208
- "data-layer-id": t.id,
209
- "data-draggable": !!t.floating?.draggable,
210
- "data-resizable": o,
211
- "data-resizing": s,
212
- style: u,
213
- onPointerDown: e,
214
- children: [
215
- /* @__PURE__ */ w(Mt, { layerId: t.id, children: /* @__PURE__ */ w(Ct, { layer: t, onClose: p }) }),
216
- /* @__PURE__ */ w(Rt, { layerId: t.id, isResizable: o, onPointerDown: a })
217
- ]
218
- }
219
- );
220
- });
221
- Et.displayName = "EmbeddedLayer";
222
- const Ut = ({ layers: t }) => {
223
- const { handleLayerPointerDown: e } = wt();
224
- return /* @__PURE__ */ w(Z, { children: t.map((n) => {
225
- const r = n.floating?.mode ?? "embedded";
226
- return n.floating && r === "popup" ? /* @__PURE__ */ w(Pt, { layer: n }, n.id) : /* @__PURE__ */ w(Et, { layer: n, handleLayerPointerDown: e }, n.id);
227
- }) });
228
- }, ct = {
229
- position: "absolute",
230
- pointerEvents: "auto"
231
- }, lt = ({
232
- direction: t,
233
- trackIndex: e,
234
- align: n,
235
- gap: r,
236
- span: o,
237
- onResize: s
238
- }) => {
239
- const a = t === "col" ? "vertical" : "horizontal", l = d.useCallback(
240
- (f) => {
241
- const g = n === "start" ? -f : f;
242
- s(t, e, g);
243
- },
244
- [n, t, e, s]
245
- ), u = d.useMemo(() => t === "col" ? {
246
- gridColumn: `${e + 1} / ${e + 2}`,
247
- gridRow: `${o.start} / ${o.end}`
248
- } : {
249
- gridRow: `${e + 1} / ${e + 2}`,
250
- gridColumn: `${o.start} / ${o.end}`
251
- }, [t, e, o]), p = d.useMemo(() => {
252
- const g = Math.max(0, r) / 2 + j / 2;
253
- return t === "col" ? {
254
- ...ct,
255
- width: j,
256
- height: "100%",
257
- top: 0,
258
- bottom: 0,
259
- ...n === "start" ? { left: -g } : { right: -g }
260
- } : {
261
- ...ct,
262
- width: "100%",
263
- height: j,
264
- left: 0,
265
- right: 0,
266
- ...n === "start" ? { top: -g } : { bottom: -g }
267
- };
268
- }, [n, t, r]);
269
- return /* @__PURE__ */ w("div", { "data-resizable": "true", style: { ...u, position: "relative", pointerEvents: "none" }, children: /* @__PURE__ */ w("div", { "data-direction": a, "data-align": n, "data-handle": "true", style: p, children: /* @__PURE__ */ w(Dt, { direction: a, onResize: l }) }) });
270
- }, Zt = (t) => {
271
- const e = /* @__PURE__ */ new Map();
272
- t.forEach((r, o) => {
273
- r.forEach((s, a) => {
274
- if (!s || s === ".")
275
- return;
276
- const l = e.get(s);
277
- if (l) {
278
- const p = {
279
- rowStart: Math.min(l.rowStart, o),
280
- rowEnd: Math.max(l.rowEnd, o),
281
- colStart: Math.min(l.colStart, a),
282
- colEnd: Math.max(l.colEnd, a)
283
- };
284
- e.set(s, p);
285
- return;
286
- }
287
- const u = {
288
- rowStart: o,
289
- rowEnd: o,
290
- colStart: a,
291
- colEnd: a
292
- };
293
- e.set(s, u);
294
- });
295
- });
296
- const n = /* @__PURE__ */ new Map();
297
- return e.forEach((r, o) => {
298
- const s = r.rowStart + 1, a = r.rowEnd + 2, l = r.colStart + 1, u = r.colEnd + 2, p = {
299
- gridArea: o,
300
- gridRow: `${s} / ${a}`,
301
- gridColumn: `${l} / ${u}`
302
- };
303
- n.set(o, p);
304
- }), n;
305
- }, qt = (t, e) => {
306
- if ((t.positionMode ?? "grid") !== "grid")
307
- return t;
308
- const r = t.gridArea ?? t.id, o = e.get(r);
309
- if (!o)
310
- return t;
311
- const s = !t.gridArea, a = !t.gridRow, l = !t.gridColumn;
312
- return !s && !a && !l ? t : {
313
- ...t,
314
- gridArea: s ? o.gridArea : t.gridArea,
315
- gridRow: a ? o.gridRow : t.gridRow,
316
- gridColumn: l ? o.gridColumn : t.gridColumn
317
- };
318
- }, Jt = (t, e) => {
319
- const n = d.useMemo(() => Zt(t.areas), [t.areas]), r = d.useMemo(() => e.map((l) => qt(l, n)), [e, n]), o = d.useMemo(
320
- () => r.filter((l) => l.visible !== !1),
321
- [r]
322
- ), s = d.useMemo(
323
- () => o.filter((l) => !l.drawer),
324
- [o]
325
- ), a = d.useMemo(() => {
326
- const l = /* @__PURE__ */ new Map();
327
- return r.forEach((u) => {
328
- l.set(u.id, u);
329
- }), l;
330
- }, [r]);
331
- return {
332
- normalizedLayers: r,
333
- visibleLayers: o,
334
- regularLayers: s,
335
- layerById: a
336
- };
337
- }, Qt = (t) => {
338
- if (!t)
339
- return { rowGap: 0, columnGap: 0 };
340
- const e = t.split(/\s+/).map((r) => r.trim()).filter(Boolean), n = (r) => {
341
- const o = r.match(/^(-?\d+(?:\.\d+)?)px$/);
342
- return o ? Number.parseFloat(o[1]) : 0;
343
- };
344
- if (e.length === 1) {
345
- const r = n(e[0]);
346
- return { rowGap: r, columnGap: r };
347
- }
348
- return {
349
- rowGap: n(e[0]),
350
- columnGap: n(e[1])
351
- };
352
- }, te = (t, e) => {
353
- if (!t)
354
- return [];
355
- const n = getComputedStyle(t);
356
- return (e === "col" ? n.gridTemplateColumns : n.gridTemplateRows).split(/\s+/).map((o) => parseFloat(o)).filter((o) => !Number.isNaN(o));
357
- }, yt = (t, e = Number.NEGATIVE_INFINITY, n = Number.POSITIVE_INFINITY) => Math.min(Math.max(t, e), n), je = (t, e) => typeof t != "number" || !Number.isFinite(t) ? e : t, _ = (t, e) => `${t}-${e}`, ee = (t, e, n, r) => {
358
- const o = _(n, r), s = e[o];
359
- return s !== void 0 ? `minmax(${t.minSize ?? 0}px, ${s}px)` : t.size;
360
- }, ut = (t, e, n) => t.map((r, o) => ee(r, e, n, o)).join(" "), F = (t, e) => t.reduce((n, r, o) => (r.resizable && r.size.endsWith("px") && (n[_(e, o)] = parseInt(r.size, 10)), n), {}), ne = ({
361
- trackSizes: t,
362
- track: e,
363
- direction: n,
364
- trackIndex: r,
365
- containerRef: o
366
- }) => {
367
- const s = _(n, r), a = t[s];
368
- if (a !== void 0)
369
- return a;
370
- const u = te(o?.current ?? null, n)[r];
371
- return u !== void 0 && u > 0 ? u : e.size.endsWith("px") ? Number.parseInt(e.size, 10) : 300;
372
- }, re = (t, e) => t.reduce((n, r, o) => o === e ? n : r.size.includes("fr") ? n + 100 : n + (r.minSize ?? 50), 0), oe = ({
373
- track: t,
374
- tracks: e,
375
- trackIndex: n,
376
- direction: r,
377
- containerRef: o,
378
- gapSizes: s
379
- }) => {
380
- if (!o?.current)
381
- return t.maxSize;
382
- const a = r === "col" ? o.current.offsetWidth : o.current.offsetHeight, l = re(e, n), u = e.length - 1, p = r === "col" ? s.columnGap : s.rowGap, f = u * p, g = a - l - f;
383
- return t.maxSize !== void 0 ? Math.min(t.maxSize, g) : g;
384
- }, se = (t, e, n) => yt(t, e ?? Number.NEGATIVE_INFINITY, n ?? Number.POSITIVE_INFINITY), dt = (t, e) => {
385
- const n = t.length, r = [];
386
- for (let a = 0; a < n; a++) {
387
- const l = t[a], u = l[e], p = l[e + 1];
388
- u !== p && r.push(a);
389
- }
390
- if (r.length === 0)
391
- return { start: 1, end: n + 1 };
392
- const o = Math.min(...r), s = Math.max(...r);
393
- return { start: o + 1, end: s + 2 };
394
- }, gt = (t, e) => {
395
- const n = t[e], r = t[e + 1], o = n?.length ?? 0, s = [];
396
- for (let u = 0; u < o; u++) {
397
- const p = n?.[u], f = r?.[u];
398
- p !== f && s.push(u);
399
- }
400
- if (s.length === 0)
401
- return { start: 1, end: o + 1 };
402
- const a = Math.min(...s), l = Math.max(...s);
403
- return { start: a + 1, end: l + 2 };
404
- }, ie = (t, e) => {
405
- if (t.length === 0)
406
- return [];
407
- const n = e.length;
408
- if (t.length === 1)
409
- return t[0]?.resizable ? [{ trackIndex: 0, align: "end", span: { start: 1, end: n + 1 } }] : [];
410
- const r = [];
411
- return Array.from({ length: t.length - 1 }, (s, a) => a).forEach((s) => {
412
- const a = t[s];
413
- if (t[s + 1]?.resizable) {
414
- const u = dt(e, s);
415
- r.push({ trackIndex: s + 1, align: "start", span: u });
416
- return;
417
- }
418
- if (a?.resizable) {
419
- const u = dt(e, s);
420
- r.push({ trackIndex: s, align: "end", span: u });
421
- }
422
- }), r;
423
- }, ae = (t, e) => {
424
- if (t.length === 0)
425
- return [];
426
- const n = e[0]?.length ?? 0;
427
- if (t.length === 1)
428
- return t[0]?.resizable ? [{ trackIndex: 0, align: "end", span: { start: 1, end: n + 1 } }] : [];
429
- const r = [];
430
- return Array.from({ length: t.length - 1 }, (s, a) => a).forEach((s) => {
431
- const a = t[s];
432
- if (t[s + 1]?.resizable) {
433
- const u = gt(e, s);
434
- r.push({ trackIndex: s + 1, align: "start", span: u });
435
- return;
436
- }
437
- if (a?.resizable) {
438
- const u = gt(e, s);
439
- r.push({ trackIndex: s, align: "end", span: u });
440
- }
441
- }), r;
442
- }, ce = (t) => t !== void 0 ? { gap: t } : {}, le = (t, e) => {
443
- const n = Object.keys(e), r = {};
444
- for (const f of n)
445
- r[f] = t[f] ?? e[f];
446
- const o = Object.keys(t), s = o.length !== n.length, a = o.some(
447
- (f) => !Object.prototype.hasOwnProperty.call(r, f)
448
- ), l = s ? !0 : a, u = n.some((f) => t[f] !== r[f]);
449
- return (l ? !0 : u) ? r : null;
450
- }, ue = (t, e, n) => {
451
- const [r, o] = d.useState(() => ({
452
- ...F(t.columns, "col"),
453
- ...F(t.rows, "row")
454
- }));
455
- St(() => {
456
- const g = {
457
- ...F(t.columns, "col"),
458
- ...F(t.rows, "row")
459
- };
460
- o((b) => le(b, g) ?? b);
461
- }, [t.columns, t.rows]);
462
- const s = d.useMemo(() => t.areas.map((g) => `"${g.join(" ")}"`).join(" "), [t.areas]), a = d.useMemo(() => Qt(t.gap), [t.gap]), l = d.useMemo(
463
- () => ie(t.columns, t.areas),
464
- [t.columns, t.areas]
465
- ), u = d.useMemo(
466
- () => ae(t.rows, t.areas),
467
- [t.rows, t.areas]
468
- ), p = d.useMemo(() => ({
469
- ...t.style,
470
- ...e,
471
- gridTemplateAreas: s,
472
- gridTemplateRows: ut(t.rows, r, "row"),
473
- gridTemplateColumns: ut(t.columns, r, "col"),
474
- ...ce(t.gap)
475
- }), [s, t.columns, t.gap, t.rows, t.style, e, r]), f = d.useCallback(
476
- (g, b, v) => {
477
- const E = g === "row" ? t.rows : t.columns, R = E[b];
478
- if (!R || !R.resizable)
479
- return;
480
- const M = ne({
481
- trackSizes: r,
482
- track: R,
483
- direction: g,
484
- trackIndex: b,
485
- containerRef: n
486
- }), P = oe({
487
- track: R,
488
- tracks: E,
489
- trackIndex: b,
490
- direction: g,
491
- containerRef: n,
492
- gapSizes: a
493
- }), x = _(g, b);
494
- o((D) => {
495
- const y = M + v, I = se(y, R.minSize, P);
496
- return { ...D, [x]: I };
497
- });
498
- },
499
- [t.columns, t.rows, r, n, a]
500
- );
501
- return {
502
- columnHandles: l,
503
- rowHandles: u,
504
- gapSizes: a,
505
- gridStyle: p,
506
- handleResize: f
507
- };
508
- }, de = (t) => t.positionMode ? t.positionMode : t.floating ? (t.floating.mode ?? "embedded") === "embedded" ? "absolute" : "relative" : "grid", ge = (t) => ({ position: t === "grid" ? "relative" : t }), he = (t, e) => e !== "grid" ? {} : {
509
- gridArea: t.gridArea,
510
- gridRow: t.gridRow,
511
- gridColumn: t.gridColumn
512
- }, fe = (t) => t ? {
513
- top: t.top,
514
- right: t.right,
515
- bottom: t.bottom,
516
- left: t.left
517
- } : {}, me = (t) => t !== void 0 ? { zIndex: t } : {}, pe = (t, e) => ({
518
- width: t,
519
- height: e
520
- }), be = (t, e) => t.pointerEvents !== void 0 ? typeof t.pointerEvents == "boolean" ? { pointerEvents: t.pointerEvents ? "auto" : "none" } : { pointerEvents: t.pointerEvents } : e === "absolute" || e === "fixed" ? { pointerEvents: "auto" } : {}, ze = (t) => t.floating ? t.floating.position ?? t.floating.defaultPosition ?? t.position : t.position, we = (t) => {
521
- if (t.floating) {
522
- const e = t.floating.size ?? t.floating.defaultSize;
523
- if (e)
524
- return {
525
- width: e.width,
526
- height: e.height
527
- };
528
- }
529
- return {
530
- width: t.width,
531
- height: t.height
532
- };
533
- }, Se = (t) => t.floating?.zIndex !== void 0 ? t.floating.zIndex : t.zIndex, ve = (t) => {
534
- const e = de(t), n = ze(t), r = we(t), o = Se(t);
535
- return {
536
- ...t.style,
537
- ...ge(e),
538
- ...he(t, e),
539
- ...fe(n),
540
- ...me(o),
541
- ...pe(r.width, r.height),
542
- ...be(t, e)
543
- };
544
- }, Ce = (t) => {
545
- const e = t.floating;
546
- return e ? e.mode ?? "embedded" : null;
547
- }, H = (t) => Ce(t) !== "embedded" ? null : t.floating ?? null, ht = (t) => t instanceof HTMLElement ? ["INPUT", "TEXTAREA", "SELECT", "BUTTON"].includes(t.tagName) : !1, ft = (t, e, n) => {
548
- const r = e ?? Number.NEGATIVE_INFINITY, o = n ?? Number.POSITIVE_INFINITY;
549
- return yt(t, r, o);
550
- }, mt = (t, e, n) => {
551
- if (typeof t == "number" && Number.isFinite(t))
552
- return t;
553
- throw new Error(
554
- `Floating layer "${n}" must provide a numeric "${e}" value when draggable mode is enabled.`
555
- );
556
- }, pt = (t) => {
557
- const e = H(t);
558
- if (!e)
559
- throw new Error(`Floating layer "${t.id}" is missing floating configuration required for dragging.`);
560
- const n = e.position ?? e.defaultPosition ?? t.position;
561
- if (!n)
562
- throw new Error(`Floating layer "${t.id}" must define position with left and top values.`);
563
- return {
564
- left: mt(n.left, "left", t.id),
565
- top: mt(n.top, "top", t.id)
566
- };
567
- }, Re = (t) => {
568
- const e = H(t);
569
- return e ? e.constraints ?? {} : {};
570
- }, Ee = (t, e, n) => t ? t === "left" ? e - n : e + n : e, ye = (t, e, n) => t ? t === "top" ? e - n : e + n : e, Ie = (t, e, n) => !t || t === "right" ? e : e + n, Le = (t, e, n) => !t || t === "bottom" ? e : e + n, U = (t, e) => t ? t.dataset.layerId === e ? t : U(t.parentElement, e) : null, q = (t, e, n) => !t || n?.(t) ? null : e(t) ? t : q(t.parentElement, e, n), Te = (t) => t instanceof HTMLElement ? q(
571
- t,
572
- (e) => e.dataset.dragHandle === "true",
573
- (e) => e.dataset.dragIgnore === "true"
574
- ) : null, bt = (t) => t instanceof HTMLElement ? q(
575
- t,
576
- (e) => e.dataset.resizeCorner !== void 0 || e.dataset.resizeEdge !== void 0
577
- ) !== null : !1, O = (t) => {
578
- const e = H(t);
579
- return e ? e.resizable === !0 : !1;
580
- }, Y = (t) => {
581
- if (!H(t))
582
- return null;
583
- const n = xe(t);
584
- if (!n)
585
- throw new Error(`Floating layer "${t.id}" must define width and height when resizable or draggable.`);
586
- return {
587
- width: n.width,
588
- height: n.height
589
- };
590
- }, Me = (t, e, n) => {
591
- const r = t.filter(O).reduce((g, b) => {
592
- if (n === b.id) {
593
- const E = e[b.id];
594
- if (E)
595
- return g[b.id] = E, g;
596
- }
597
- const v = Y(b);
598
- return v && (g[b.id] = v), g;
599
- }, {}), o = Object.keys(e), s = Object.keys(r), a = o.length !== s.length, l = o.some((g) => !Object.prototype.hasOwnProperty.call(r, g)), u = a ? !0 : l, p = s.some((g) => {
600
- const b = e[g], v = r[g];
601
- return !b || !v ? !0 : b.width !== v.width || b.height !== v.height;
602
- });
603
- return {
604
- sizes: r,
605
- changed: u ? !0 : p
606
- };
607
- }, Pe = ({
608
- layers: t,
609
- layerById: e,
610
- isRootLevel: n
611
- }) => {
612
- const [r, o] = d.useState(null), [s, a] = d.useState(null), [l, u] = d.useState({}), [p, f] = d.useState({}), g = d.useRef(null), b = d.useRef(null), v = st((c, i) => {
613
- e.get(c)?.floating?.onMove?.(i);
614
- }), E = st((c, i) => {
615
- e.get(c)?.floating?.onResize?.(i);
616
- });
617
- St(() => {
618
- const { sizes: c, changed: i } = Me(t, p, s);
619
- i && f(c);
620
- }, [t, s]);
621
- const R = d.useCallback(
622
- (c, i, h, m) => {
623
- const z = pt(i), C = l[c] ?? { x: 0, y: 0 }, S = {
624
- pointerStartX: m.clientX,
625
- pointerStartY: m.clientY,
626
- initialTranslationX: C.x,
627
- initialTranslationY: C.y,
628
- baseLeft: z.left,
629
- baseTop: z.top,
630
- layerId: c,
631
- pointerId: m.pointerId,
632
- target: h
633
- };
634
- if (S.target.setPointerCapture)
635
- try {
636
- S.target.setPointerCapture(S.pointerId);
637
- } catch {
638
- }
639
- g.current = S, o(c);
640
- },
641
- [l]
642
- ), M = d.useCallback(
643
- (c) => {
644
- const i = c.target, h = Te(i);
645
- if (!h)
646
- return;
647
- const m = h.closest("[data-layer-id]")?.getAttribute("data-layer-id");
648
- if (!m)
649
- return;
650
- const z = e.get(m);
651
- if (!z)
652
- return;
653
- const C = H(z);
654
- if (!(!C || C.draggable !== !0) && !ht(c.target) && !bt(c.target) && h) {
655
- const S = U(h, m);
656
- if (!S)
657
- return;
658
- R(m, z, S, c);
659
- return;
660
- }
661
- },
662
- [R, e]
663
- ), P = d.useCallback(
664
- (c, i) => {
665
- const h = e.get(c), m = h ? H(h) : null;
666
- if (!h || !m || m.draggable !== !0 || ht(i.target) || bt(i.target))
667
- return;
668
- const z = U(i.currentTarget, c);
669
- z && R(c, h, z, i);
670
- },
671
- [R, e]
672
- ), x = d.useCallback(
673
- (c, i, h) => {
674
- const m = e.get(c);
675
- if (!m || !O(m))
676
- return;
677
- const z = p[c] ?? Y(m);
678
- if (!z)
679
- return;
680
- const C = pt(m), S = Re(m), T = l[c] ?? { x: 0, y: 0 };
681
- if (h.stopPropagation(), h.preventDefault(), h.currentTarget.setPointerCapture)
682
- try {
683
- h.currentTarget.setPointerCapture(h.pointerId);
684
- } catch {
685
- }
686
- b.current = {
687
- layerId: c,
688
- pointerId: h.pointerId,
689
- horizontalEdge: i.horizontal,
690
- verticalEdge: i.vertical,
691
- startX: h.clientX,
692
- startY: h.clientY,
693
- startWidth: z.width,
694
- startHeight: z.height,
695
- startPosition: T,
696
- baseLeft: C.left,
697
- baseTop: C.top,
698
- minWidth: S.minWidth,
699
- maxWidth: S.maxWidth,
700
- minHeight: S.minHeight,
701
- maxHeight: S.maxHeight,
702
- target: h.currentTarget
703
- }, a(c);
704
- },
705
- [e, l, p]
706
- ), D = d.useCallback(
707
- (c) => {
708
- const i = g.current;
709
- if (!i)
710
- return;
711
- const h = c.clientX - i.pointerStartX, m = c.clientY - i.pointerStartY, z = {
712
- x: i.initialTranslationX + h,
713
- y: i.initialTranslationY + m
714
- };
715
- u((C) => ({ ...C, [i.layerId]: z })), v(i.layerId, {
716
- left: i.baseLeft + z.x,
717
- top: i.baseTop + z.y
718
- });
719
- },
720
- [v]
721
- ), y = d.useCallback(
722
- (c) => {
723
- const i = b.current;
724
- if (!i || i.pointerId !== c.pointerId || !e.get(i.layerId))
725
- return;
726
- const m = c.clientX - i.startX, z = c.clientY - i.startY, C = Ee(i.horizontalEdge, i.startWidth, m), S = ye(i.verticalEdge, i.startHeight, z), T = ft(C, i.minWidth, i.maxWidth), k = ft(S, i.minHeight, i.maxHeight), G = i.startWidth - T, B = i.startHeight - k, nt = Ie(
727
- i.horizontalEdge,
728
- i.startPosition.x,
729
- G
730
- ), Lt = Le(i.verticalEdge, i.startPosition.y, B), W = p[i.layerId], rt = { width: T, height: k };
731
- (!W || W.width !== T || W.height !== k) && (f((X) => ({
732
- ...X,
733
- [i.layerId]: rt
734
- })), E(i.layerId, rt));
735
- const ot = l[i.layerId] ?? { x: 0, y: 0 }, A = { x: nt, y: Lt };
736
- (ot.x !== A.x || ot.y !== A.y) && (u((X) => ({
737
- ...X,
738
- [i.layerId]: A
739
- })), v(i.layerId, {
740
- left: i.baseLeft + A.x,
741
- top: i.baseTop + A.y
742
- }));
743
- },
744
- [e, l, p, v, E]
745
- ), I = d.useCallback((c) => {
746
- const i = g.current;
747
- if (i) {
748
- if (i.pointerId === c.pointerId && i.target.releasePointerCapture)
749
- try {
750
- i.target.releasePointerCapture(i.pointerId);
751
- } catch {
752
- }
753
- g.current = null;
754
- }
755
- o(null);
756
- }, []), N = d.useCallback((c) => {
757
- const i = b.current;
758
- if (i) {
759
- if (i.pointerId === c.pointerId && i.target.releasePointerCapture)
760
- try {
761
- i.target.releasePointerCapture(i.pointerId);
762
- } catch {
763
- }
764
- b.current = null;
765
- }
766
- a(null);
767
- }, []);
768
- it(r !== null, {
769
- onMove: D,
770
- onUp: I,
771
- onCancel: I
772
- }), it(s !== null, {
773
- onMove: y,
774
- onUp: N,
775
- onCancel: N
776
- });
777
- const J = d.useCallback(
778
- (c) => {
779
- const i = ve(c), h = H(c);
780
- if (!h || h.draggable !== !0)
781
- return i;
782
- const m = l[c.id], z = r === c.id, C = s === c.id, S = m ? { transform: `translate(${m.x}px, ${m.y}px)` } : {}, T = p[c.id], k = O(c) ? Y(c) : null, G = T ?? k, B = G ? { width: `${G.width}px`, height: `${G.height}px` } : {};
783
- return {
784
- ...i,
785
- ...B,
786
- ...S,
787
- ...z || C ? { cursor: "grabbing" } : {}
788
- };
789
- },
790
- [r, l, p, s]
791
- ), Q = d.useCallback(
792
- (c) => {
793
- if (!O(c))
794
- return { isResizable: !1 };
795
- const h = p[c.id], m = Y(c);
796
- return (h ?? m) !== null ? { isResizable: !0, onPointerDown: (T, k) => {
797
- x(c.id, T, k);
798
- } } : { isResizable: !1 };
799
- },
800
- [x, p]
801
- ), tt = d.useCallback(
802
- (c) => {
803
- const { isResizable: i, onPointerDown: h } = Q(c), m = J(c), z = s === c.id;
804
- return {
805
- style: m,
806
- isResizable: i,
807
- isResizing: z,
808
- onResizeHandlePointerDown: (C, S) => {
809
- h && h(C, S);
810
- }
811
- };
812
- },
813
- [J, Q, s]
814
- ), et = d.useCallback(
815
- (c) => ({
816
- "data-drag-handle": "true",
817
- role: "button",
818
- "aria-roledescription": "Drag handle",
819
- "aria-label": "Drag layer",
820
- onPointerDown: (i) => {
821
- P(c, i);
822
- }
823
- }),
824
- [P]
825
- );
826
- return {
827
- providerValue: d.useMemo(
828
- () => ({
829
- handleLayerPointerDown: M,
830
- getLayerRenderState: tt,
831
- getLayerHandleProps: et,
832
- isRootLevel: n
833
- }),
834
- [et, tt, M, n]
835
- ),
836
- draggingLayerId: r,
837
- resizingLayerId: s
838
- };
839
- }, xe = (t) => {
840
- if (t.floating) {
841
- const e = t.floating.size ?? t.floating.defaultSize;
842
- if (e)
843
- return { width: e.width, height: e.height };
844
- }
845
- if (typeof t.width == "number" && typeof t.height == "number")
846
- return { width: t.width, height: t.height };
847
- }, It = {
848
- display: "grid",
849
- width: "100%",
850
- height: "100%",
851
- overflow: "hidden"
852
- }, ke = {
853
- touchAction: "none",
854
- WebkitTouchCallout: "none",
855
- WebkitUserSelect: "none",
856
- userSelect: "none"
857
- }, He = {
858
- ...It,
859
- overflow: "visible",
860
- height: "auto",
861
- minHeight: "100%"
862
- }, Ne = (t) => t ? He : It, Ve = ({ config: t, layers: e, style: n, root: r = !1 }) => {
863
- const o = d.useRef(null), { isIntersecting: s } = Ft(o, { threshold: 0 });
864
- return /* @__PURE__ */ w(xt, { config: t, layers: e, style: n, children: /* @__PURE__ */ w(De, { gridRef: o, isIntersecting: s, isRoot: r }) });
865
- }, De = ({ gridRef: t, isIntersecting: e, isRoot: n }) => {
866
- const { config: r, style: o, layers: s } = zt(), { normalizedLayers: a, visibleLayers: l, regularLayers: u, layerById: p } = Jt(r, s.defs), { columnHandles: f, rowHandles: g, gapSizes: b, gridStyle: v, handleResize: E } = ue(r, o, t), { providerValue: R, draggingLayerId: M, resizingLayerId: P } = Pe({
867
- layers: a,
868
- layerById: p,
869
- isRootLevel: n
870
- }), x = M ? !0 : !!P, D = d.useMemo(() => ({
871
- ...Ne(n),
872
- ...v,
873
- ...x ? ke : {}
874
- }), [v, x, n]);
875
- return /* @__PURE__ */ K(Z, { children: [
876
- /* @__PURE__ */ K(
877
- "div",
878
- {
879
- ref: t,
880
- style: D,
881
- "data-dragging": !!M,
882
- "data-resizing": !!P,
883
- "data-visible": e,
884
- children: [
885
- /* @__PURE__ */ w(kt, { value: R, children: /* @__PURE__ */ w(Ut, { layers: u }) }),
886
- f.map(({ trackIndex: y, align: I, span: N }) => /* @__PURE__ */ w(
887
- lt,
888
- {
889
- direction: "col",
890
- trackIndex: y,
891
- align: I,
892
- gap: b.columnGap,
893
- span: N,
894
- onResize: E
895
- },
896
- `col-${y}:${I}`
897
- )),
898
- g.map(({ trackIndex: y, align: I, span: N }) => /* @__PURE__ */ w(
899
- lt,
900
- {
901
- direction: "row",
902
- trackIndex: y,
903
- align: I,
904
- gap: b.rowGap,
905
- span: N,
906
- onResize: E
907
- },
908
- `row-${y}:${I}`
909
- ))
910
- ]
911
- }
912
- ),
913
- /* @__PURE__ */ w(Ht, { layers: l })
914
- ] });
915
- };
916
- export {
917
- Ve as G,
918
- Ut as a,
919
- Xt as b,
920
- lt as c,
921
- ue as d,
922
- yt as e,
923
- je as t,
924
- Jt as u
925
- };
926
- //# sourceMappingURL=GridLayout-UWNxXw77.js.map