@zag-js/splitter 1.34.1 → 1.35.1

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 (53) hide show
  1. package/dist/index.d.mts +9 -254
  2. package/dist/index.d.ts +9 -254
  3. package/dist/index.js +37 -1158
  4. package/dist/index.mjs +11 -1151
  5. package/dist/splitter.anatomy.d.mts +6 -0
  6. package/dist/splitter.anatomy.d.ts +6 -0
  7. package/dist/splitter.anatomy.js +34 -0
  8. package/dist/splitter.anatomy.mjs +8 -0
  9. package/dist/splitter.connect.d.mts +7 -0
  10. package/dist/splitter.connect.d.ts +7 -0
  11. package/dist/splitter.connect.js +298 -0
  12. package/dist/splitter.connect.mjs +263 -0
  13. package/dist/splitter.dom.d.mts +19 -0
  14. package/dist/splitter.dom.d.ts +19 -0
  15. package/dist/splitter.dom.js +89 -0
  16. package/dist/splitter.dom.mjs +52 -0
  17. package/dist/splitter.machine.d.mts +7 -0
  18. package/dist/splitter.machine.d.ts +7 -0
  19. package/dist/splitter.machine.js +509 -0
  20. package/dist/splitter.machine.mjs +482 -0
  21. package/dist/splitter.props.d.mts +12 -0
  22. package/dist/splitter.props.d.ts +12 -0
  23. package/dist/splitter.props.js +63 -0
  24. package/dist/splitter.props.mjs +33 -0
  25. package/dist/splitter.types.d.mts +237 -0
  26. package/dist/splitter.types.d.ts +237 -0
  27. package/dist/splitter.types.js +18 -0
  28. package/dist/splitter.types.mjs +0 -0
  29. package/dist/utils/aria.d.mts +27 -0
  30. package/dist/utils/aria.d.ts +27 -0
  31. package/dist/utils/aria.js +79 -0
  32. package/dist/utils/aria.mjs +53 -0
  33. package/dist/utils/fuzzy.d.mts +10 -0
  34. package/dist/utils/fuzzy.d.ts +10 -0
  35. package/dist/utils/fuzzy.js +60 -0
  36. package/dist/utils/fuzzy.mjs +32 -0
  37. package/dist/utils/panel.d.mts +34 -0
  38. package/dist/utils/panel.d.ts +34 -0
  39. package/dist/utils/panel.js +147 -0
  40. package/dist/utils/panel.mjs +114 -0
  41. package/dist/utils/resize-by-delta.d.mts +20 -0
  42. package/dist/utils/resize-by-delta.d.ts +20 -0
  43. package/dist/utils/resize-by-delta.js +165 -0
  44. package/dist/utils/resize-by-delta.mjs +140 -0
  45. package/dist/utils/resize-panel.d.mts +16 -0
  46. package/dist/utils/resize-panel.d.ts +16 -0
  47. package/dist/utils/resize-panel.js +51 -0
  48. package/dist/utils/resize-panel.mjs +26 -0
  49. package/dist/utils/validate-sizes.d.mts +15 -0
  50. package/dist/utils/validate-sizes.d.ts +15 -0
  51. package/dist/utils/validate-sizes.js +72 -0
  52. package/dist/utils/validate-sizes.mjs +47 -0
  53. package/package.json +17 -7
package/dist/index.js CHANGED
@@ -1,1163 +1,42 @@
1
- 'use strict';
2
-
3
- var anatomy$1 = require('@zag-js/anatomy');
4
- var domQuery = require('@zag-js/dom-query');
5
- var utils = require('@zag-js/utils');
6
- var core = require('@zag-js/core');
7
- var types = require('@zag-js/types');
8
-
9
- // src/splitter.anatomy.ts
10
- var anatomy = anatomy$1.createAnatomy("splitter").parts("root", "panel", "resizeTrigger", "resizeTriggerIndicator");
11
- var parts = anatomy.build();
12
- var getRootId = (ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`;
13
- var getResizeTriggerId = (ctx, id) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`;
14
- var getPanelId = (ctx, id) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`;
15
- var getGlobalCursorId = (ctx) => `splitter:${ctx.id}:global-cursor`;
16
- var getRootEl = (ctx) => ctx.getById(getRootId(ctx));
17
- var getResizeTriggerEl = (ctx, id) => ctx.getById(getResizeTriggerId(ctx, id));
18
- var getCursor = (state, x) => {
19
- let cursor = x ? "col-resize" : "row-resize";
20
- if (state.isAtMin) cursor = x ? "e-resize" : "s-resize";
21
- if (state.isAtMax) cursor = x ? "w-resize" : "n-resize";
22
- return cursor;
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
23
9
  };
24
- var getResizeTriggerEls = (ctx) => {
25
- return domQuery.queryAll(getRootEl(ctx), `[role=separator][data-ownedby='${CSS.escape(getRootId(ctx))}']`);
26
- };
27
- var setupGlobalCursor = (ctx, state, x, nonce) => {
28
- const styleEl = ctx.getById(getGlobalCursorId(ctx));
29
- const textContent = `* { cursor: ${getCursor(state, x)} !important; }`;
30
- if (styleEl) {
31
- styleEl.textContent = textContent;
32
- } else {
33
- const style = ctx.getDoc().createElement("style");
34
- if (nonce) style.nonce = nonce;
35
- style.id = getGlobalCursorId(ctx);
36
- style.textContent = textContent;
37
- ctx.getDoc().head.appendChild(style);
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
38
15
  }
16
+ return to;
39
17
  };
40
- var removeGlobalCursor = (ctx) => {
41
- const styleEl = ctx.getById(getGlobalCursorId(ctx));
42
- styleEl?.remove();
43
- };
44
- function calculateAriaValues({
45
- size,
46
- panels,
47
- pivotIndices
48
- }) {
49
- let currentMinSize = 0;
50
- let currentMaxSize = 100;
51
- let totalMinSize = 0;
52
- let totalMaxSize = 0;
53
- const firstIndex = pivotIndices[0];
54
- utils.ensure(firstIndex, () => "No pivot index found");
55
- panels.forEach((panel, index) => {
56
- const { maxSize = 100, minSize = 0 } = panel;
57
- if (index === firstIndex) {
58
- currentMinSize = minSize;
59
- currentMaxSize = maxSize;
60
- } else {
61
- totalMinSize += minSize;
62
- totalMaxSize += maxSize;
63
- }
64
- });
65
- const valueMax = Math.min(currentMaxSize, 100 - totalMinSize);
66
- const valueMin = Math.max(currentMinSize, 100 - totalMaxSize);
67
- const valueNow = size[firstIndex];
68
- return {
69
- valueMax,
70
- valueMin,
71
- valueNow
72
- };
73
- }
74
- function getAriaValue(size, panels, handleId) {
75
- const [beforeId, afterId] = handleId.split(":");
76
- const beforeIndex = panels.findIndex((panel) => panel.id === beforeId);
77
- const afterIndex = panels.findIndex((panel) => panel.id === afterId);
78
- const { valueMax, valueMin, valueNow } = calculateAriaValues({
79
- size,
80
- panels,
81
- pivotIndices: [beforeIndex, afterIndex]
82
- });
83
- return {
84
- beforeId,
85
- afterId,
86
- valueMax: Math.round(valueMax),
87
- valueMin: Math.round(valueMin),
88
- valueNow: valueNow != null ? Math.round(valueNow) : void 0
89
- };
90
- }
91
-
92
- // src/utils/fuzzy.ts
93
- var PRECISION = 10;
94
- function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
95
- if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
96
- return 0;
97
- } else {
98
- return actual > expected ? 1 : -1;
99
- }
100
- }
101
- function fuzzyNumbersEqual(actual, expected, fractionDigits = PRECISION) {
102
- if (actual == null || expected == null) return false;
103
- return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;
104
- }
105
- function fuzzySizeEqual(actual, expected, fractionDigits) {
106
- if (actual.length !== expected.length) {
107
- return false;
108
- }
109
- for (let index = 0; index < actual.length; index++) {
110
- const actualSize = actual[index];
111
- const expectedSize = expected[index];
112
- if (!fuzzyNumbersEqual(actualSize, expectedSize, fractionDigits)) {
113
- return false;
114
- }
115
- }
116
- return true;
117
- }
118
- function getPanelById(panels, id) {
119
- const panel = panels.find((panel2) => panel2.id === id);
120
- utils.ensure(panel, () => `Panel data not found for id "${id}"`);
121
- return panel;
122
- }
123
- function findPanelDataIndex(panels, panel) {
124
- return panels.findIndex((prevPanel) => prevPanel === panel || prevPanel.id === panel.id);
125
- }
126
- function findPanelIndex(panels, id) {
127
- return panels.findIndex((panel) => panel.id === id);
128
- }
129
- function panelDataHelper(panels, panel, sizes) {
130
- const index = findPanelIndex(panels, panel.id);
131
- const pivotIndices = index === panels.length - 1 ? [index - 1, index] : [index, index + 1];
132
- const panelSize = sizes[index];
133
- return { ...panel, panelSize, pivotIndices };
134
- }
135
- function sortPanels(panels) {
136
- return panels.sort((panelA, panelB) => {
137
- const orderA = panelA.order;
138
- const orderB = panelB.order;
139
- if (orderA == null && orderB == null) {
140
- return 0;
141
- } else if (orderA == null) {
142
- return -1;
143
- } else if (orderB == null) {
144
- return 1;
145
- } else {
146
- return orderA - orderB;
147
- }
148
- });
149
- }
150
- function getPanelLayout(panels) {
151
- return panels.map((panel) => panel.id).sort().join(":");
152
- }
153
- function serializePanels(panels) {
154
- const keys = panels.map((panel) => panel.id);
155
- const sortedKeys = keys.sort();
156
- const serialized = sortedKeys.map((key) => {
157
- const panel = panels.find((panel2) => panel2.id === key);
158
- return JSON.stringify(panel);
159
- });
160
- return serialized.join(",");
161
- }
162
- function getPanelFlexBoxStyle({
163
- defaultSize,
164
- dragState,
165
- sizes,
166
- panels,
167
- panelIndex,
168
- precision = 3
169
- }) {
170
- const size = sizes[panelIndex];
171
- let flexGrow;
172
- if (size == null) {
173
- flexGrow = defaultSize != void 0 ? defaultSize.toPrecision(precision) : "1";
174
- } else if (panels.length === 1) {
175
- flexGrow = "1";
176
- } else {
177
- flexGrow = size.toPrecision(precision);
178
- }
179
- return {
180
- flexBasis: 0,
181
- flexGrow,
182
- flexShrink: 1,
183
- // Without this, Panel sizes may be unintentionally overridden by their content
184
- overflow: "hidden",
185
- // Disable pointer events inside of a panel during resize
186
- // This avoid edge cases like nested iframes
187
- pointerEvents: dragState !== null ? "none" : void 0
188
- };
189
- }
190
- function getUnsafeDefaultSize({ panels, size: sizes }) {
191
- const finalSizes = Array(panels.length);
192
- let numPanelsWithSizes = 0;
193
- let remainingSize = 100;
194
- for (let index = 0; index < panels.length; index++) {
195
- const panel = panels[index];
196
- utils.ensure(panel, () => `Panel data not found for index ${index}`);
197
- const defaultSize = sizes[index];
198
- if (defaultSize != null) {
199
- numPanelsWithSizes++;
200
- finalSizes[index] = defaultSize;
201
- remainingSize -= defaultSize;
202
- }
203
- }
204
- for (let index = 0; index < panels.length; index++) {
205
- const panel = panels[index];
206
- utils.ensure(panel, () => `Panel data not found for index ${index}`);
207
- const defaultSize = sizes[index];
208
- if (defaultSize != null) {
209
- continue;
210
- }
211
- const numRemainingPanels = panels.length - numPanelsWithSizes;
212
- const size = remainingSize / numRemainingPanels;
213
- numPanelsWithSizes++;
214
- finalSizes[index] = size;
215
- remainingSize -= size;
216
- }
217
- return finalSizes;
218
- }
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
219
20
 
220
- // src/splitter.connect.ts
221
- function connect(service, normalize) {
222
- const { state, send, prop, computed, context, scope } = service;
223
- const horizontal = computed("horizontal");
224
- const dragging = state.matches("dragging");
225
- const orientation = prop("orientation");
226
- const getPanelStyle = (id) => {
227
- const panels = prop("panels");
228
- const panelIndex = panels.findIndex((panel) => panel.id === id);
229
- const defaultSize = context.initial("size")[panelIndex];
230
- const dragState = context.get("dragState");
231
- return getPanelFlexBoxStyle({
232
- defaultSize,
233
- dragState,
234
- sizes: context.get("size"),
235
- panels,
236
- panelIndex
237
- });
238
- };
239
- const getResizeTriggerState = (props2) => {
240
- const { id, disabled } = props2;
241
- const dragging2 = context.get("dragState")?.resizeTriggerId === id;
242
- const focused = dragging2 || context.get("keyboardState")?.resizeTriggerId === id;
243
- return {
244
- dragging: dragging2,
245
- focused,
246
- disabled: !!disabled
247
- };
248
- };
249
- return {
250
- dragging,
251
- orientation,
252
- getPanels() {
253
- return prop("panels");
254
- },
255
- getPanelById(id) {
256
- return getPanelById(prop("panels"), id);
257
- },
258
- getItems() {
259
- return prop("panels").flatMap((panel, index, arr) => {
260
- const nextPanel = arr[index + 1];
261
- if (panel && nextPanel) {
262
- return [
263
- { type: "panel", id: panel.id },
264
- { type: "handle", id: `${panel.id}:${nextPanel.id}` }
265
- ];
266
- }
267
- return [{ type: "panel", id: panel.id }];
268
- });
269
- },
270
- getSizes() {
271
- return context.get("size");
272
- },
273
- setSizes(size) {
274
- send({ type: "SIZE.SET", size });
275
- },
276
- resetSizes() {
277
- send({ type: "SIZE.SET", size: context.initial("size") });
278
- },
279
- collapsePanel(id) {
280
- send({ type: "PANEL.COLLAPSE", id });
281
- },
282
- expandPanel(id, minSize) {
283
- send({ type: "PANEL.EXPAND", id, minSize });
284
- },
285
- resizePanel(id, unsafePanelSize) {
286
- send({ type: "PANEL.RESIZE", id, size: unsafePanelSize });
287
- },
288
- getPanelSize(id) {
289
- const panels = prop("panels");
290
- const size = context.get("size");
291
- const panelData = getPanelById(panels, id);
292
- const { panelSize } = panelDataHelper(panels, panelData, size);
293
- utils.ensure(panelSize, () => `Panel size not found for panel "${panelData.id}"`);
294
- return panelSize;
295
- },
296
- isPanelCollapsed(id) {
297
- const panels = prop("panels");
298
- const size = context.get("size");
299
- const panelData = getPanelById(panels, id);
300
- const { collapsedSize = 0, collapsible, panelSize } = panelDataHelper(panels, panelData, size);
301
- utils.ensure(panelSize, () => `Panel size not found for panel "${panelData.id}"`);
302
- return collapsible === true && fuzzyNumbersEqual(panelSize, collapsedSize);
303
- },
304
- isPanelExpanded(id) {
305
- const panels = prop("panels");
306
- const size = context.get("size");
307
- const panelData = getPanelById(panels, id);
308
- const { collapsedSize = 0, collapsible, panelSize } = panelDataHelper(panels, panelData, size);
309
- utils.ensure(panelSize, () => `Panel size not found for panel "${panelData.id}"`);
310
- return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;
311
- },
312
- getLayout() {
313
- return getPanelLayout(prop("panels"));
314
- },
315
- getRootProps() {
316
- return normalize.element({
317
- ...parts.root.attrs,
318
- "data-orientation": orientation,
319
- "data-dragging": domQuery.dataAttr(dragging),
320
- id: getRootId(scope),
321
- dir: prop("dir"),
322
- style: {
323
- display: "flex",
324
- flexDirection: horizontal ? "row" : "column",
325
- height: "100%",
326
- width: "100%",
327
- overflow: "hidden"
328
- }
329
- });
330
- },
331
- getPanelProps(props2) {
332
- const { id } = props2;
333
- return normalize.element({
334
- ...parts.panel.attrs,
335
- "data-orientation": orientation,
336
- "data-dragging": domQuery.dataAttr(dragging),
337
- dir: prop("dir"),
338
- "data-id": id,
339
- "data-index": findPanelIndex(prop("panels"), id),
340
- id: getPanelId(scope, id),
341
- "data-ownedby": getRootId(scope),
342
- style: getPanelStyle(id)
343
- });
344
- },
345
- getResizeTriggerState,
346
- getResizeTriggerIndicator(props2) {
347
- const triggerState = getResizeTriggerState(props2);
348
- return normalize.element({
349
- ...parts.resizeTriggerIndicator.attrs,
350
- "data-orientation": orientation,
351
- "data-focus": domQuery.dataAttr(triggerState.focused),
352
- "data-dragging": domQuery.dataAttr(triggerState.dragging),
353
- "data-disabled": domQuery.dataAttr(triggerState.disabled),
354
- "data-ownedby": getRootId(scope)
355
- });
356
- },
357
- getResizeTriggerProps(props2) {
358
- const { id } = props2;
359
- const triggerState = getResizeTriggerState(props2);
360
- const aria = getAriaValue(context.get("size"), prop("panels"), id);
361
- return normalize.element({
362
- ...parts.resizeTrigger.attrs,
363
- dir: prop("dir"),
364
- id: getResizeTriggerId(scope, id),
365
- role: "separator",
366
- "data-id": id,
367
- "data-ownedby": getRootId(scope),
368
- tabIndex: triggerState.disabled ? void 0 : 0,
369
- "aria-valuenow": aria.valueNow,
370
- "aria-valuemin": aria.valueMin,
371
- "aria-valuemax": aria.valueMax,
372
- "data-orientation": orientation,
373
- "aria-orientation": orientation,
374
- "aria-controls": `${getPanelId(scope, aria.beforeId)} ${getPanelId(scope, aria.afterId)}`,
375
- "data-focus": domQuery.dataAttr(triggerState.focused),
376
- "data-dragging": domQuery.dataAttr(triggerState.dragging),
377
- "data-disabled": domQuery.dataAttr(triggerState.disabled),
378
- style: {
379
- touchAction: "none",
380
- userSelect: "none",
381
- WebkitUserSelect: "none",
382
- flex: "0 0 auto",
383
- pointerEvents: triggerState.disabled ? "none" : triggerState.dragging && !triggerState.focused ? "none" : void 0,
384
- cursor: triggerState.disabled ? void 0 : horizontal ? "col-resize" : "row-resize",
385
- [horizontal ? "minHeight" : "minWidth"]: "0"
386
- },
387
- onPointerDown(event) {
388
- if (!domQuery.isLeftClick(event)) return;
389
- if (triggerState.disabled) {
390
- event.preventDefault();
391
- return;
392
- }
393
- const point = domQuery.getEventPoint(event);
394
- send({ type: "POINTER_DOWN", id, point });
395
- event.currentTarget.setPointerCapture(event.pointerId);
396
- event.preventDefault();
397
- event.stopPropagation();
398
- },
399
- onPointerUp(event) {
400
- if (triggerState.disabled) return;
401
- if (event.currentTarget.hasPointerCapture(event.pointerId)) {
402
- event.currentTarget.releasePointerCapture(event.pointerId);
403
- }
404
- },
405
- onPointerOver() {
406
- if (triggerState.disabled) return;
407
- send({ type: "POINTER_OVER", id });
408
- },
409
- onPointerLeave() {
410
- if (triggerState.disabled) return;
411
- send({ type: "POINTER_LEAVE", id });
412
- },
413
- onBlur() {
414
- if (triggerState.disabled) return;
415
- send({ type: "BLUR" });
416
- },
417
- onFocus() {
418
- if (triggerState.disabled) return;
419
- send({ type: "FOCUS", id });
420
- },
421
- onKeyDown(event) {
422
- if (event.defaultPrevented) return;
423
- if (triggerState.disabled) return;
424
- const keyboardResizeBy = prop("keyboardResizeBy");
425
- let delta = 0;
426
- if (event.shiftKey) {
427
- delta = 10;
428
- } else if (keyboardResizeBy != null) {
429
- delta = keyboardResizeBy;
430
- } else {
431
- delta = 1;
432
- }
433
- const keyMap = {
434
- Enter() {
435
- send({ type: "ENTER", id });
436
- },
437
- ArrowUp() {
438
- send({ type: "KEYBOARD_MOVE", id, delta: horizontal ? 0 : -delta });
439
- },
440
- ArrowDown() {
441
- send({ type: "KEYBOARD_MOVE", id, delta: horizontal ? 0 : delta });
442
- },
443
- ArrowLeft() {
444
- send({ type: "KEYBOARD_MOVE", id, delta: horizontal ? -delta : 0 });
445
- },
446
- ArrowRight() {
447
- send({ type: "KEYBOARD_MOVE", id, delta: horizontal ? delta : 0 });
448
- },
449
- Home() {
450
- send({ type: "KEYBOARD_MOVE", id, delta: -100 });
451
- },
452
- End() {
453
- send({ type: "KEYBOARD_MOVE", id, delta: 100 });
454
- },
455
- F6() {
456
- send({ type: "FOCUS.CYCLE", id, shiftKey: event.shiftKey });
457
- }
458
- };
459
- const key = domQuery.getEventKey(event, {
460
- dir: prop("dir"),
461
- orientation
462
- });
463
- const exec = keyMap[key];
464
- if (exec) {
465
- exec(event);
466
- event.preventDefault();
467
- }
468
- }
469
- });
470
- }
471
- };
472
- }
473
- function resizePanel({ panels, index, size }) {
474
- const panel = panels[index];
475
- utils.ensure(panel, () => `Panel data not found for index ${index}`);
476
- let { collapsedSize = 0, collapsible, maxSize = 100, minSize = 0 } = panel;
477
- if (fuzzyCompareNumbers(size, minSize) < 0) {
478
- if (collapsible) {
479
- const halfwayPoint = (collapsedSize + minSize) / 2;
480
- if (fuzzyCompareNumbers(size, halfwayPoint) < 0) {
481
- size = collapsedSize;
482
- } else {
483
- size = minSize;
484
- }
485
- } else {
486
- size = minSize;
487
- }
488
- }
489
- size = Math.min(maxSize, size);
490
- size = parseFloat(size.toFixed(PRECISION));
491
- return size;
492
- }
493
-
494
- // src/utils/resize-by-delta.ts
495
- function resizeByDelta(props2) {
496
- let { delta, initialSize, panels, pivotIndices, prevSize, trigger } = props2;
497
- if (fuzzyNumbersEqual(delta, 0)) {
498
- return initialSize;
499
- }
500
- const nextSize = [...initialSize];
501
- const [firstPivotIndex, secondPivotIndex] = pivotIndices;
502
- utils.ensure(firstPivotIndex, () => "Invalid first pivot index");
503
- utils.ensure(secondPivotIndex, () => "Invalid second pivot index");
504
- let deltaApplied = 0;
505
- {
506
- if (trigger === "keyboard") {
507
- {
508
- const index = delta < 0 ? secondPivotIndex : firstPivotIndex;
509
- const panel = panels[index];
510
- utils.ensure(panel, () => `Panel data not found for index ${index}`);
511
- const { collapsedSize = 0, collapsible, minSize = 0 } = panel;
512
- if (collapsible) {
513
- const prevSize2 = initialSize[index];
514
- utils.ensure(prevSize2, () => `Previous size not found for panel index ${index}`);
515
- if (fuzzyNumbersEqual(prevSize2, collapsedSize)) {
516
- const localDelta = minSize - prevSize2;
517
- if (fuzzyCompareNumbers(localDelta, Math.abs(delta)) > 0) {
518
- delta = delta < 0 ? 0 - localDelta : localDelta;
519
- }
520
- }
521
- }
522
- }
523
- {
524
- const index = delta < 0 ? firstPivotIndex : secondPivotIndex;
525
- const panel = panels[index];
526
- utils.ensure(panel, () => `No panel data found for index ${index}`);
527
- const { collapsedSize = 0, collapsible, minSize = 0 } = panel;
528
- if (collapsible) {
529
- const prevSize2 = initialSize[index];
530
- utils.ensure(prevSize2, () => `Previous size not found for panel index ${index}`);
531
- if (fuzzyNumbersEqual(prevSize2, minSize)) {
532
- const localDelta = prevSize2 - collapsedSize;
533
- if (fuzzyCompareNumbers(localDelta, Math.abs(delta)) > 0) {
534
- delta = delta < 0 ? 0 - localDelta : localDelta;
535
- }
536
- }
537
- }
538
- }
539
- }
540
- }
541
- {
542
- const increment = delta < 0 ? 1 : -1;
543
- let index = delta < 0 ? secondPivotIndex : firstPivotIndex;
544
- let maxAvailableDelta = 0;
545
- while (true) {
546
- const prevSize2 = initialSize[index];
547
- utils.ensure(prevSize2, () => `Previous size not found for panel index ${index}`);
548
- const maxSafeSize = resizePanel({
549
- panels,
550
- index,
551
- size: 100
552
- });
553
- const delta2 = maxSafeSize - prevSize2;
554
- maxAvailableDelta += delta2;
555
- index += increment;
556
- if (index < 0 || index >= panels.length) {
557
- break;
558
- }
559
- }
560
- const minAbsDelta = Math.min(Math.abs(delta), Math.abs(maxAvailableDelta));
561
- delta = delta < 0 ? 0 - minAbsDelta : minAbsDelta;
562
- }
563
- {
564
- const pivotIndex = delta < 0 ? firstPivotIndex : secondPivotIndex;
565
- let index = pivotIndex;
566
- while (index >= 0 && index < panels.length) {
567
- const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied);
568
- const prevSize2 = initialSize[index];
569
- utils.ensure(prevSize2, () => `Previous size not found for panel index ${index}`);
570
- const unsafeSize = prevSize2 - deltaRemaining;
571
- const safeSize = resizePanel({ panels, index, size: unsafeSize });
572
- if (!fuzzyNumbersEqual(prevSize2, safeSize)) {
573
- deltaApplied += prevSize2 - safeSize;
574
- nextSize[index] = safeSize;
575
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), void 0, {
576
- numeric: true
577
- }) >= 0) {
578
- break;
579
- }
580
- }
581
- if (delta < 0) {
582
- index--;
583
- } else {
584
- index++;
585
- }
586
- }
587
- }
588
- if (fuzzySizeEqual(prevSize, nextSize)) {
589
- return prevSize;
590
- }
591
- {
592
- const pivotIndex = delta < 0 ? secondPivotIndex : firstPivotIndex;
593
- const prevSize2 = initialSize[pivotIndex];
594
- utils.ensure(prevSize2, () => `Previous size not found for panel index ${pivotIndex}`);
595
- const unsafeSize = prevSize2 + deltaApplied;
596
- const safeSize = resizePanel({ panels, index: pivotIndex, size: unsafeSize });
597
- nextSize[pivotIndex] = safeSize;
598
- if (!fuzzyNumbersEqual(safeSize, unsafeSize)) {
599
- let deltaRemaining = unsafeSize - safeSize;
600
- const pivotIndex2 = delta < 0 ? secondPivotIndex : firstPivotIndex;
601
- let index = pivotIndex2;
602
- while (index >= 0 && index < panels.length) {
603
- const prevSize3 = nextSize[index];
604
- utils.ensure(prevSize3, () => `Previous size not found for panel index ${index}`);
605
- const unsafeSize2 = prevSize3 + deltaRemaining;
606
- const safeSize2 = resizePanel({ panels, index, size: unsafeSize2 });
607
- if (!fuzzyNumbersEqual(prevSize3, safeSize2)) {
608
- deltaRemaining -= safeSize2 - prevSize3;
609
- nextSize[index] = safeSize2;
610
- }
611
- if (fuzzyNumbersEqual(deltaRemaining, 0)) {
612
- break;
613
- }
614
- if (delta > 0) {
615
- index--;
616
- } else {
617
- index++;
618
- }
619
- }
620
- }
621
- }
622
- const totalSize = nextSize.reduce((total, size) => size + total, 0);
623
- if (!fuzzyNumbersEqual(totalSize, 100)) {
624
- return prevSize;
625
- }
626
- return nextSize;
627
- }
628
- function validateSizes({ size: prevSize, panels }) {
629
- const nextSize = [...prevSize];
630
- const nextSizeTotalSize = nextSize.reduce((accumulated, current) => accumulated + current, 0);
631
- if (nextSize.length !== panels.length) {
632
- throw Error(`Invalid ${panels.length} panel size: ${nextSize.map((size) => `${size}%`).join(", ")}`);
633
- } else if (!fuzzyNumbersEqual(nextSizeTotalSize, 100) && nextSize.length > 0) {
634
- for (let index = 0; index < panels.length; index++) {
635
- const unsafeSize = nextSize[index];
636
- utils.ensure(unsafeSize, () => `No size data found for index ${index}`);
637
- const safeSize = 100 / nextSizeTotalSize * unsafeSize;
638
- nextSize[index] = safeSize;
639
- }
640
- }
641
- let remainingSize = 0;
642
- for (let index = 0; index < panels.length; index++) {
643
- const unsafeSize = nextSize[index];
644
- utils.ensure(unsafeSize, () => `No size data found for index ${index}`);
645
- const safeSize = resizePanel({ panels, index, size: unsafeSize });
646
- if (unsafeSize != safeSize) {
647
- remainingSize += unsafeSize - safeSize;
648
- nextSize[index] = safeSize;
649
- }
650
- }
651
- if (!fuzzyNumbersEqual(remainingSize, 0)) {
652
- for (let index = 0; index < panels.length; index++) {
653
- const prevSize2 = nextSize[index];
654
- utils.ensure(prevSize2, () => `No size data found for index ${index}`);
655
- const unsafeSize = prevSize2 + remainingSize;
656
- const safeSize = resizePanel({ panels, index, size: unsafeSize });
657
- if (prevSize2 !== safeSize) {
658
- remainingSize -= safeSize - prevSize2;
659
- nextSize[index] = safeSize;
660
- if (fuzzyNumbersEqual(remainingSize, 0)) {
661
- break;
662
- }
663
- }
664
- }
665
- }
666
- return nextSize;
667
- }
668
-
669
- // src/splitter.machine.ts
670
- var machine = core.createMachine({
671
- props({ props: props2 }) {
672
- utils.ensureProps(props2, ["panels"]);
673
- return {
674
- orientation: "horizontal",
675
- defaultSize: [],
676
- dir: "ltr",
677
- ...props2,
678
- panels: sortPanels(props2.panels)
679
- };
680
- },
681
- initialState() {
682
- return "idle";
683
- },
684
- context({ prop, bindable, getContext, getRefs }) {
685
- return {
686
- size: bindable(() => ({
687
- value: prop("size"),
688
- defaultValue: prop("defaultSize"),
689
- isEqual(a, b) {
690
- return b != null && fuzzySizeEqual(a, b);
691
- },
692
- onChange(value) {
693
- const ctx = getContext();
694
- const refs = getRefs();
695
- const sizesBeforeCollapse = refs.get("panelSizeBeforeCollapse");
696
- const expandToSizes = Object.fromEntries(sizesBeforeCollapse.entries());
697
- const resizeTriggerId = ctx.get("dragState")?.resizeTriggerId ?? null;
698
- const layout = getPanelLayout(prop("panels"));
699
- prop("onResize")?.({
700
- size: value,
701
- layout,
702
- resizeTriggerId,
703
- expandToSizes
704
- });
705
- }
706
- })),
707
- dragState: bindable(() => ({
708
- defaultValue: null
709
- })),
710
- keyboardState: bindable(() => ({
711
- defaultValue: null
712
- }))
713
- };
714
- },
715
- watch({ track, action, prop }) {
716
- track([() => serializePanels(prop("panels"))], () => {
717
- action(["syncSize"]);
718
- });
719
- },
720
- refs() {
721
- return {
722
- panelSizeBeforeCollapse: /* @__PURE__ */ new Map(),
723
- prevDelta: 0,
724
- panelIdToLastNotifiedSizeMap: /* @__PURE__ */ new Map()
725
- };
726
- },
727
- computed: {
728
- horizontal({ prop }) {
729
- return prop("orientation") === "horizontal";
730
- }
731
- },
732
- on: {
733
- "SIZE.SET": {
734
- actions: ["setSize"]
735
- },
736
- "PANEL.COLLAPSE": {
737
- actions: ["collapsePanel"]
738
- },
739
- "PANEL.EXPAND": {
740
- actions: ["expandPanel"]
741
- },
742
- "PANEL.RESIZE": {
743
- actions: ["resizePanel"]
744
- }
745
- },
746
- entry: ["syncSize"],
747
- exit: ["clearGlobalCursor"],
748
- states: {
749
- idle: {
750
- entry: ["clearDraggingState", "clearKeyboardState"],
751
- on: {
752
- POINTER_OVER: {
753
- target: "hover:temp",
754
- actions: ["setKeyboardState"]
755
- },
756
- FOCUS: {
757
- target: "focused",
758
- actions: ["setKeyboardState"]
759
- },
760
- POINTER_DOWN: {
761
- target: "dragging",
762
- actions: ["setDraggingState"]
763
- }
764
- }
765
- },
766
- "hover:temp": {
767
- effects: ["waitForHoverDelay"],
768
- on: {
769
- HOVER_DELAY: {
770
- target: "hover"
771
- },
772
- POINTER_DOWN: {
773
- target: "dragging",
774
- actions: ["setDraggingState"]
775
- },
776
- POINTER_LEAVE: {
777
- target: "idle"
778
- }
779
- }
780
- },
781
- hover: {
782
- tags: ["focus"],
783
- on: {
784
- POINTER_DOWN: {
785
- target: "dragging",
786
- actions: ["setDraggingState"]
787
- },
788
- POINTER_LEAVE: {
789
- target: "idle"
790
- }
791
- }
792
- },
793
- focused: {
794
- tags: ["focus"],
795
- on: {
796
- BLUR: {
797
- target: "idle"
798
- },
799
- ENTER: {
800
- actions: ["collapseOrExpandPanel"]
801
- },
802
- POINTER_DOWN: {
803
- target: "dragging",
804
- actions: ["setDraggingState"]
805
- },
806
- KEYBOARD_MOVE: {
807
- actions: ["invokeOnResizeStart", "setKeyboardValue", "invokeOnResizeEnd"]
808
- },
809
- "FOCUS.CYCLE": {
810
- actions: ["focusNextResizeTrigger"]
811
- }
812
- }
813
- },
814
- dragging: {
815
- tags: ["focus"],
816
- effects: ["trackPointerMove"],
817
- entry: ["invokeOnResizeStart"],
818
- on: {
819
- POINTER_MOVE: {
820
- actions: ["setPointerValue", "setGlobalCursor"]
821
- },
822
- POINTER_UP: {
823
- target: "idle",
824
- actions: ["invokeOnResizeEnd", "clearGlobalCursor"]
825
- }
826
- }
827
- }
828
- },
829
- implementations: {
830
- effects: {
831
- waitForHoverDelay: ({ send }) => {
832
- return utils.setRafTimeout(() => {
833
- send({ type: "HOVER_DELAY" });
834
- }, 250);
835
- },
836
- trackPointerMove: ({ scope, send }) => {
837
- const doc = scope.getDoc();
838
- return domQuery.trackPointerMove(doc, {
839
- onPointerMove(info) {
840
- send({ type: "POINTER_MOVE", point: info.point });
841
- },
842
- onPointerUp() {
843
- send({ type: "POINTER_UP" });
844
- }
845
- });
846
- }
847
- },
848
- actions: {
849
- setSize(params) {
850
- const { context, event, prop } = params;
851
- const unsafeSize = event.size;
852
- const prevSize = context.get("size");
853
- const panels = prop("panels");
854
- const safeSize = validateSizes({
855
- size: unsafeSize,
856
- panels
857
- });
858
- if (!utils.isEqual(prevSize, safeSize)) {
859
- setSize(params, safeSize);
860
- }
861
- },
862
- syncSize({ context, prop }) {
863
- const panels = prop("panels");
864
- let prevSize = context.get("size");
865
- let unsafeSize = null;
866
- if (prevSize.length === 0) {
867
- unsafeSize = getUnsafeDefaultSize({
868
- panels,
869
- size: context.initial("size")
870
- });
871
- }
872
- const nextSize = validateSizes({
873
- size: unsafeSize ?? prevSize,
874
- panels
875
- });
876
- if (!utils.isEqual(prevSize, nextSize)) {
877
- context.set("size", nextSize);
878
- }
879
- },
880
- setDraggingState({ context, event, prop, scope }) {
881
- const orientation = prop("orientation");
882
- const size = context.get("size");
883
- const resizeTriggerId = event.id;
884
- const panelGroupEl = getRootEl(scope);
885
- if (!panelGroupEl) return;
886
- const handleElement = getResizeTriggerEl(scope, resizeTriggerId);
887
- utils.ensure(handleElement, () => `Drag handle element not found for id "${resizeTriggerId}"`);
888
- const initialCursorPosition = orientation === "horizontal" ? event.point.x : event.point.y;
889
- context.set("dragState", {
890
- resizeTriggerId: event.id,
891
- resizeTriggerRect: handleElement.getBoundingClientRect(),
892
- initialCursorPosition,
893
- initialSize: size
894
- });
895
- },
896
- clearDraggingState({ context }) {
897
- context.set("dragState", null);
898
- },
899
- setKeyboardState({ context, event }) {
900
- context.set("keyboardState", {
901
- resizeTriggerId: event.id
902
- });
903
- },
904
- clearKeyboardState({ context }) {
905
- context.set("keyboardState", null);
906
- },
907
- collapsePanel(params) {
908
- const { context, prop, event, refs } = params;
909
- const prevSize = context.get("size");
910
- const panels = prop("panels");
911
- const panel = panels.find((panel2) => panel2.id === event.id);
912
- utils.ensure(panel, () => `Panel data not found for id "${event.id}"`);
913
- if (panel.collapsible) {
914
- const { collapsedSize = 0, panelSize, pivotIndices } = panelDataHelper(panels, panel, prevSize);
915
- utils.ensure(panelSize, () => `Panel size not found for panel "${panel.id}"`);
916
- if (!fuzzyNumbersEqual(panelSize, collapsedSize)) {
917
- refs.get("panelSizeBeforeCollapse").set(panel.id, panelSize);
918
- const isLastPanel = findPanelDataIndex(panels, panel) === panels.length - 1;
919
- const delta = isLastPanel ? panelSize - collapsedSize : collapsedSize - panelSize;
920
- const nextSize = resizeByDelta({
921
- delta,
922
- initialSize: prevSize,
923
- panels,
924
- pivotIndices,
925
- prevSize,
926
- trigger: "imperative-api"
927
- });
928
- if (!utils.isEqual(prevSize, nextSize)) {
929
- setSize(params, nextSize);
930
- }
931
- }
932
- }
933
- },
934
- expandPanel(params) {
935
- const { context, prop, event, refs } = params;
936
- const panels = prop("panels");
937
- const prevSize = context.get("size");
938
- const panel = panels.find((panel2) => panel2.id === event.id);
939
- utils.ensure(panel, () => `Panel data not found for id "${event.id}"`);
940
- if (panel.collapsible) {
941
- const {
942
- collapsedSize = 0,
943
- panelSize = 0,
944
- minSize: minSizeFromProps = 0,
945
- pivotIndices
946
- } = panelDataHelper(panels, panel, prevSize);
947
- const minSize = event.minSize ?? minSizeFromProps;
948
- if (fuzzyNumbersEqual(panelSize, collapsedSize)) {
949
- const prevPanelSize = refs.get("panelSizeBeforeCollapse").get(panel.id);
950
- const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;
951
- const isLastPanel = findPanelDataIndex(panels, panel) === panels.length - 1;
952
- const delta = isLastPanel ? panelSize - baseSize : baseSize - panelSize;
953
- const nextSize = resizeByDelta({
954
- delta,
955
- initialSize: prevSize,
956
- panels,
957
- pivotIndices,
958
- prevSize,
959
- trigger: "imperative-api"
960
- });
961
- if (!utils.isEqual(prevSize, nextSize)) {
962
- setSize(params, nextSize);
963
- }
964
- }
965
- }
966
- },
967
- resizePanel(params) {
968
- const { context, prop, event } = params;
969
- const prevSize = context.get("size");
970
- const panels = prop("panels");
971
- const panel = getPanelById(panels, event.id);
972
- const unsafePanelSize = event.size;
973
- const { panelSize, pivotIndices } = panelDataHelper(panels, panel, prevSize);
974
- utils.ensure(panelSize, () => `Panel size not found for panel "${panel.id}"`);
975
- const isLastPanel = findPanelDataIndex(panels, panel) === panels.length - 1;
976
- const delta = isLastPanel ? panelSize - unsafePanelSize : unsafePanelSize - panelSize;
977
- const nextSize = resizeByDelta({
978
- delta,
979
- initialSize: prevSize,
980
- panels,
981
- pivotIndices,
982
- prevSize,
983
- trigger: "imperative-api"
984
- });
985
- if (!utils.isEqual(prevSize, nextSize)) {
986
- setSize(params, nextSize);
987
- }
988
- },
989
- setPointerValue(params) {
990
- const { context, event, prop, scope } = params;
991
- const dragState = context.get("dragState");
992
- if (!dragState) return;
993
- const { resizeTriggerId, initialSize, initialCursorPosition } = dragState;
994
- const panels = prop("panels");
995
- const panelGroupElement = getRootEl(scope);
996
- utils.ensure(panelGroupElement, () => `Panel group element not found`);
997
- const pivotIndices = resizeTriggerId.split(":").map((id) => panels.findIndex((panel) => panel.id === id));
998
- const horizontal = prop("orientation") === "horizontal";
999
- const cursorPosition = horizontal ? event.point.x : event.point.y;
1000
- const groupRect = panelGroupElement.getBoundingClientRect();
1001
- const groupSizeInPixels = horizontal ? groupRect.width : groupRect.height;
1002
- const offsetPixels = cursorPosition - initialCursorPosition;
1003
- const offsetPercentage = offsetPixels / groupSizeInPixels * 100;
1004
- const prevSize = context.get("size");
1005
- const nextSize = resizeByDelta({
1006
- delta: offsetPercentage,
1007
- initialSize: initialSize ?? prevSize,
1008
- panels,
1009
- pivotIndices,
1010
- prevSize,
1011
- trigger: "mouse-or-touch"
1012
- });
1013
- if (!utils.isEqual(prevSize, nextSize)) {
1014
- setSize(params, nextSize);
1015
- }
1016
- },
1017
- setKeyboardValue(params) {
1018
- const { context, event, prop } = params;
1019
- const panelDataArray = prop("panels");
1020
- const resizeTriggerId = event.id;
1021
- const delta = event.delta;
1022
- const pivotIndices = resizeTriggerId.split(":").map((id) => panelDataArray.findIndex((panelData) => panelData.id === id));
1023
- const prevSize = context.get("size");
1024
- const nextSize = resizeByDelta({
1025
- delta,
1026
- initialSize: prevSize,
1027
- panels: panelDataArray,
1028
- pivotIndices,
1029
- prevSize,
1030
- trigger: "keyboard"
1031
- });
1032
- if (!utils.isEqual(prevSize, nextSize)) {
1033
- setSize(params, nextSize);
1034
- }
1035
- },
1036
- invokeOnResizeEnd({ context, prop }) {
1037
- queueMicrotask(() => {
1038
- const dragState = context.get("dragState");
1039
- prop("onResizeEnd")?.({
1040
- size: context.get("size"),
1041
- resizeTriggerId: dragState?.resizeTriggerId ?? null
1042
- });
1043
- });
1044
- },
1045
- invokeOnResizeStart({ prop }) {
1046
- queueMicrotask(() => {
1047
- prop("onResizeStart")?.();
1048
- });
1049
- },
1050
- collapseOrExpandPanel(params) {
1051
- const { context, prop } = params;
1052
- const panelDataArray = prop("panels");
1053
- const sizes = context.get("size");
1054
- const resizeTriggerId = context.get("keyboardState")?.resizeTriggerId;
1055
- const [idBefore, idAfter] = resizeTriggerId?.split(":") ?? [];
1056
- const index = panelDataArray.findIndex((panelData2) => panelData2.id === idBefore);
1057
- if (index === -1) return;
1058
- const panelData = panelDataArray[index];
1059
- utils.ensure(panelData, () => `No panel data found for index ${index}`);
1060
- const size = sizes[index];
1061
- const { collapsedSize = 0, collapsible, minSize = 0 } = panelData;
1062
- if (size != null && collapsible) {
1063
- const pivotIndices = [idBefore, idAfter].map(
1064
- (id) => panelDataArray.findIndex((panelData2) => panelData2.id === id)
1065
- );
1066
- const nextSize = resizeByDelta({
1067
- delta: fuzzyNumbersEqual(size, collapsedSize) ? minSize - collapsedSize : collapsedSize - size,
1068
- initialSize: context.initial("size"),
1069
- panels: panelDataArray,
1070
- pivotIndices,
1071
- prevSize: sizes,
1072
- trigger: "keyboard"
1073
- });
1074
- if (!utils.isEqual(sizes, nextSize)) {
1075
- setSize(params, nextSize);
1076
- }
1077
- }
1078
- },
1079
- setGlobalCursor({ context, scope, prop }) {
1080
- const dragState = context.get("dragState");
1081
- if (!dragState) return;
1082
- const panels = prop("panels");
1083
- const horizontal = prop("orientation") === "horizontal";
1084
- const [idBefore] = dragState.resizeTriggerId.split(":");
1085
- const indexBefore = panels.findIndex((panel2) => panel2.id === idBefore);
1086
- const panel = panels[indexBefore];
1087
- const size = context.get("size");
1088
- const aria = getAriaValue(size, panels, dragState.resizeTriggerId);
1089
- const isAtMin = fuzzyNumbersEqual(aria.valueNow, aria.valueMin) || fuzzyNumbersEqual(aria.valueNow, panel.collapsedSize);
1090
- const isAtMax = fuzzyNumbersEqual(aria.valueNow, aria.valueMax);
1091
- const cursorState = { isAtMin, isAtMax };
1092
- setupGlobalCursor(scope, cursorState, horizontal, prop("nonce"));
1093
- },
1094
- clearGlobalCursor({ scope }) {
1095
- removeGlobalCursor(scope);
1096
- },
1097
- focusNextResizeTrigger({ event, scope }) {
1098
- const resizeTriggers = getResizeTriggerEls(scope);
1099
- const index = resizeTriggers.findIndex((el) => el.dataset.id === event.id);
1100
- const handleEl = event.shiftKey ? utils.prev(resizeTriggers, index) : utils.next(resizeTriggers, index);
1101
- handleEl?.focus();
1102
- }
1103
- }
1104
- }
21
+ // src/index.ts
22
+ var index_exports = {};
23
+ __export(index_exports, {
24
+ anatomy: () => import_splitter.anatomy,
25
+ connect: () => import_splitter2.connect,
26
+ layout: () => import_panel.getPanelLayout,
27
+ machine: () => import_splitter3.machine
28
+ });
29
+ module.exports = __toCommonJS(index_exports);
30
+ var import_splitter = require("./splitter.anatomy.cjs");
31
+ var import_splitter2 = require("./splitter.connect.cjs");
32
+ var import_splitter3 = require("./splitter.machine.cjs");
33
+ __reExport(index_exports, require("./splitter.props.cjs"), module.exports);
34
+ var import_panel = require("./utils/panel.cjs");
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ anatomy,
38
+ connect,
39
+ layout,
40
+ machine,
41
+ ...require("./splitter.props.cjs")
1105
42
  });
1106
- function setSize(params, sizes) {
1107
- const { refs, prop, context } = params;
1108
- const panelsArray = prop("panels");
1109
- const onCollapse = prop("onCollapse");
1110
- const onExpand = prop("onExpand");
1111
- const panelIdToLastNotifiedSizeMap = refs.get("panelIdToLastNotifiedSizeMap");
1112
- context.set("size", sizes);
1113
- sizes.forEach((size, index) => {
1114
- const panelData = panelsArray[index];
1115
- utils.ensure(panelData, () => `Panel data not found for index ${index}`);
1116
- const { collapsedSize = 0, collapsible, id: panelId } = panelData;
1117
- const lastNotifiedSize = panelIdToLastNotifiedSizeMap.get(panelId);
1118
- if (lastNotifiedSize == null || size !== lastNotifiedSize) {
1119
- panelIdToLastNotifiedSizeMap.set(panelId, size);
1120
- if (collapsible && (onCollapse || onExpand)) {
1121
- if ((lastNotifiedSize == null || fuzzyNumbersEqual(lastNotifiedSize, collapsedSize)) && !fuzzyNumbersEqual(size, collapsedSize)) {
1122
- onExpand?.({ panelId, size });
1123
- }
1124
- if (onCollapse && (lastNotifiedSize == null || !fuzzyNumbersEqual(lastNotifiedSize, collapsedSize)) && fuzzyNumbersEqual(size, collapsedSize)) {
1125
- onCollapse?.({ panelId, size });
1126
- }
1127
- }
1128
- }
1129
- });
1130
- }
1131
- var props = types.createProps()([
1132
- "dir",
1133
- "getRootNode",
1134
- "id",
1135
- "ids",
1136
- "onResize",
1137
- "onResizeStart",
1138
- "onResizeEnd",
1139
- "onCollapse",
1140
- "onExpand",
1141
- "orientation",
1142
- "size",
1143
- "defaultSize",
1144
- "panels",
1145
- "keyboardResizeBy",
1146
- "nonce"
1147
- ]);
1148
- var splitProps = utils.createSplitProps(props);
1149
- var panelProps = types.createProps()(["id"]);
1150
- var splitPanelProps = utils.createSplitProps(panelProps);
1151
- var resizeTriggerProps = types.createProps()(["disabled", "id"]);
1152
- var splitResizeTriggerProps = utils.createSplitProps(resizeTriggerProps);
1153
-
1154
- exports.anatomy = anatomy;
1155
- exports.connect = connect;
1156
- exports.layout = getPanelLayout;
1157
- exports.machine = machine;
1158
- exports.panelProps = panelProps;
1159
- exports.props = props;
1160
- exports.resizeTriggerProps = resizeTriggerProps;
1161
- exports.splitPanelProps = splitPanelProps;
1162
- exports.splitProps = splitProps;
1163
- exports.splitResizeTriggerProps = splitResizeTriggerProps;