@rowsncolumns/spreadsheet 10.3.0 → 10.3.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 (51) hide show
  1. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  2. package/dist/cjs/components/canvas-grid/index.js +14 -5
  3. package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
  4. package/dist/cjs/components/embeds/embed-draggable.js +4 -3
  5. package/dist/cjs/components/resizer/index.d.ts.map +1 -1
  6. package/dist/cjs/components/resizer/index.js +10 -5
  7. package/dist/cjs/components/sheet-search/index.d.ts.map +1 -1
  8. package/dist/cjs/components/sheet-search/index.js +6 -2
  9. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  10. package/dist/cjs/hooks/use-copy-paste-cut.js +6 -3
  11. package/dist/cjs/hooks/use-header-actions.d.ts.map +1 -1
  12. package/dist/cjs/hooks/use-header-actions.js +17 -10
  13. package/dist/cjs/hooks/use-move-columns-rows.d.ts.map +1 -1
  14. package/dist/cjs/hooks/use-move-columns-rows.js +21 -15
  15. package/dist/cjs/hooks/use-selection-move.d.ts.map +1 -1
  16. package/dist/cjs/hooks/use-selection-move.js +14 -6
  17. package/dist/cjs/hooks/use-selection-resize.d.ts.map +1 -1
  18. package/dist/cjs/hooks/use-selection-resize.js +13 -6
  19. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  20. package/dist/cjs/hooks/use-selection.js +59 -25
  21. package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
  22. package/dist/cjs/hooks/use-table-resizer.js +16 -8
  23. package/dist/cjs/hooks/use-touch.d.ts.map +1 -1
  24. package/dist/cjs/hooks/use-touch.js +16 -8
  25. package/dist/cjs/release-date.js +1 -1
  26. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  27. package/dist/esm/components/canvas-grid/index.js +14 -5
  28. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  29. package/dist/esm/components/embeds/embed-draggable.js +3 -2
  30. package/dist/esm/components/resizer/index.d.ts.map +1 -1
  31. package/dist/esm/components/resizer/index.js +8 -4
  32. package/dist/esm/components/sheet-search/index.d.ts.map +1 -1
  33. package/dist/esm/components/sheet-search/index.js +5 -2
  34. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  35. package/dist/esm/hooks/use-copy-paste-cut.js +6 -4
  36. package/dist/esm/hooks/use-header-actions.d.ts.map +1 -1
  37. package/dist/esm/hooks/use-header-actions.js +11 -4
  38. package/dist/esm/hooks/use-move-columns-rows.d.ts.map +1 -1
  39. package/dist/esm/hooks/use-move-columns-rows.js +12 -6
  40. package/dist/esm/hooks/use-selection-move.d.ts.map +1 -1
  41. package/dist/esm/hooks/use-selection-move.js +11 -4
  42. package/dist/esm/hooks/use-selection-resize.d.ts.map +1 -1
  43. package/dist/esm/hooks/use-selection-resize.js +11 -5
  44. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  45. package/dist/esm/hooks/use-selection.js +50 -24
  46. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  47. package/dist/esm/hooks/use-table-resizer.js +15 -9
  48. package/dist/esm/hooks/use-touch.d.ts.map +1 -1
  49. package/dist/esm/hooks/use-touch.js +15 -7
  50. package/dist/esm/release-date.js +1 -1
  51. package/package.json +1 -1
@@ -118,24 +118,36 @@ var useSelection = function (_a) {
118
118
  * release always fires `contextmenu`; neither may reach the grid's cell
119
119
  * context menu while the user is dragging the fill handle.
120
120
  */
121
+ /**
122
+ * Documents the in-flight gestures listen on. The grid may render into a
123
+ * popout window, whose document is not the bundle's global `document`; a
124
+ * gesture binds its move/up listeners to the document of the element it
125
+ * started on and unbinds from that same document.
126
+ */
127
+ var selectionDocumentRef = (0, react_1.useRef)(null);
128
+ var fillDocumentRef = (0, react_1.useRef)(null);
129
+ var dragSelectionDocumentRef = (0, react_1.useRef)(null);
130
+ var tapDocumentRef = (0, react_1.useRef)(null);
121
131
  var contextMenuSuppressorRef = (0, react_1.useRef)(null);
122
132
  var releaseContextMenuSuppressor = (0, react_1.useCallback)(function () {
123
- var handler = contextMenuSuppressorRef.current;
124
- if (!handler)
133
+ var suppressor = contextMenuSuppressorRef.current;
134
+ if (!suppressor)
125
135
  return;
126
136
  contextMenuSuppressorRef.current = null;
127
- document.removeEventListener("contextmenu", handler, true);
137
+ suppressor.ownerDocument.removeEventListener("contextmenu", suppressor.handler, true);
128
138
  }, []);
129
139
  var suppressNextContextMenu = (0, react_1.useCallback)(function () {
140
+ var _a;
130
141
  if (contextMenuSuppressorRef.current)
131
142
  return;
143
+ var ownerDocument = (_a = fillDocumentRef.current) !== null && _a !== void 0 ? _a : document;
132
144
  var handler = function (e) {
133
145
  e.preventDefault();
134
146
  e.stopPropagation();
135
147
  releaseContextMenuSuppressor();
136
148
  };
137
- contextMenuSuppressorRef.current = handler;
138
- document.addEventListener("contextmenu", handler, true);
149
+ contextMenuSuppressorRef.current = { handler: handler, ownerDocument: ownerDocument };
150
+ ownerDocument.addEventListener("contextmenu", handler, true);
139
151
  }, [releaseContextMenuSuppressor]);
140
152
  var selectionsRef = (0, react_1.useRef)([]);
141
153
  var fillSelectionRef = (0, react_1.useRef)(undefined);
@@ -358,11 +370,14 @@ var useSelection = function (_a) {
358
370
  * Mouse up handler
359
371
  */
360
372
  var handleMouseUp = (0, react_1.useCallback)(function () {
373
+ var _a;
361
374
  /* Reset selection mode */
362
375
  isSelecting.current = false;
363
- /* Remove listener */
364
- document.removeEventListener("mousemove", handleMouseMove);
365
- document.removeEventListener("mouseup", handleMouseUp);
376
+ /* Remove listener from the document the gesture started on */
377
+ var ownerDocument = (_a = selectionDocumentRef.current) !== null && _a !== void 0 ? _a : document;
378
+ selectionDocumentRef.current = null;
379
+ ownerDocument.removeEventListener("mousemove", handleMouseMove);
380
+ ownerDocument.removeEventListener("mouseup", handleMouseUp);
366
381
  /* Update last selection */
367
382
  var curSelections = selectionsRef.current;
368
383
  var len = curSelections.length;
@@ -844,6 +859,7 @@ var useSelection = function (_a) {
844
859
  * Triggers a new selection start
845
860
  */
846
861
  var handleMouseDown = (0, react_1.useCallback)(function (e) {
862
+ var _a, _b;
847
863
  var coords = getCellCoordsFromOffset(e.clientX, e.clientY, true);
848
864
  if (!coords)
849
865
  return;
@@ -865,8 +881,10 @@ var useSelection = function (_a) {
865
881
  var hasSelections = selectionsRef.current.length > 0;
866
882
  var isDeselecting = isMetaKey && allowDeselect;
867
883
  if (!isContextMenuClick && selectionPolicy !== "single") {
868
- document.addEventListener("mouseup", handleMouseUp);
869
- document.addEventListener("mousemove", handleMouseMove);
884
+ var ownerDocument = (_b = (0, grid_3.getOwnerDocument)((_a = e.currentTarget) !== null && _a !== void 0 ? _a : e.target)) !== null && _b !== void 0 ? _b : document;
885
+ selectionDocumentRef.current = ownerDocument;
886
+ ownerDocument.addEventListener("mouseup", handleMouseUp);
887
+ ownerDocument.addEventListener("mousemove", handleMouseMove);
870
888
  }
871
889
  /* Activate selection mode */
872
890
  // Disable flag for context menu
@@ -1215,13 +1233,14 @@ var useSelection = function (_a) {
1215
1233
  * comes from the mouseup event, not the mousedown.
1216
1234
  */
1217
1235
  var handleFillMouseUp = (0, react_1.useCallback)(function (e) {
1218
- var _a;
1236
+ var _a, _b;
1219
1237
  isFilling.current = false;
1220
1238
  var toggle = isFillToggleModifier(e);
1221
1239
  var button = fillButtonRef.current;
1222
- /* Remove listener */
1223
- document.removeEventListener("mousemove", handleFillMouseMove);
1224
- document.removeEventListener("mouseup", handleFillMouseUp);
1240
+ /* Remove listener from the document the gesture started on */
1241
+ var ownerDocument = (_a = fillDocumentRef.current) !== null && _a !== void 0 ? _a : document;
1242
+ ownerDocument.removeEventListener("mousemove", handleFillMouseMove);
1243
+ ownerDocument.removeEventListener("mouseup", handleFillMouseUp);
1225
1244
  // The right-button (or macOS Ctrl+click) `contextmenu` event follows this
1226
1245
  // mouseup; keep swallowing it for one tick, then drop the suppressor so a
1227
1246
  // later, unrelated right-click still opens the cell context menu.
@@ -1234,7 +1253,7 @@ var useSelection = function (_a) {
1234
1253
  var fillSelection = fillSelectionRef.current;
1235
1254
  var shrink = fillShrinkRef.current;
1236
1255
  // Modifier for a drag-back shrink: the last move's state, else the release's.
1237
- var gestureOptions = (_a = fillModifierRef.current) !== null && _a !== void 0 ? _a : (toggle ? { modifier: "toggle" } : undefined);
1256
+ var gestureOptions = (_b = fillModifierRef.current) !== null && _b !== void 0 ? _b : (toggle ? { modifier: "toggle" } : undefined);
1238
1257
  fillModifierRef.current = undefined;
1239
1258
  /* Update last selection */
1240
1259
  setFillSelection(undefined);
@@ -1312,8 +1331,11 @@ var useSelection = function (_a) {
1312
1331
  sheetId,
1313
1332
  ]);
1314
1333
  var handleFillMouseDown = (0, react_1.useCallback)(function (e) {
1334
+ var _a;
1315
1335
  e.stopPropagation();
1316
1336
  e.preventDefault();
1337
+ var ownerDocument = (_a = (0, grid_3.getOwnerDocument)(e.currentTarget)) !== null && _a !== void 0 ? _a : document;
1338
+ fillDocumentRef.current = ownerDocument;
1317
1339
  var isRightButton = e.button === grid_4.MouseButtonCodes.right;
1318
1340
  fillButtonRef.current = isRightButton ? "right" : "left";
1319
1341
  // Ctrl+drag on the handle must never become the macOS Ctrl+click
@@ -1323,8 +1345,8 @@ var useSelection = function (_a) {
1323
1345
  suppressNextContextMenu();
1324
1346
  }
1325
1347
  isFilling.current = true;
1326
- document.addEventListener("mousemove", handleFillMouseMove);
1327
- document.addEventListener("mouseup", handleFillMouseUp);
1348
+ ownerDocument.addEventListener("mousemove", handleFillMouseMove);
1349
+ ownerDocument.addEventListener("mouseup", handleFillMouseUp);
1328
1350
  }, [handleFillMouseMove, handleFillMouseUp, suppressNextContextMenu]);
1329
1351
  /**
1330
1352
  * Remove the last selection from state
@@ -1378,6 +1400,7 @@ var useSelection = function (_a) {
1378
1400
  * When drag/drop is complete
1379
1401
  */
1380
1402
  var handleSelectionMouseUp = (0, react_1.useCallback)(function (e) {
1403
+ var _a;
1381
1404
  var fromSelection = initialDraggedSelection.current;
1382
1405
  var toSelection = draggedSelection.current;
1383
1406
  // Excel reads the modifier at RELEASE: Shift → insert between existing cells (I-beam),
@@ -1456,9 +1479,11 @@ var useSelection = function (_a) {
1456
1479
  draggedSelection.current = void 0;
1457
1480
  draggedSelectionIndex.current = void 0;
1458
1481
  hasUserMovedSelection.current = false;
1459
- /* Remove event handlers */
1460
- document.removeEventListener("mouseup", handleSelectionMouseUp);
1461
- document.removeEventListener("mousemove", handleSelectionMouseMove);
1482
+ /* Remove event handlers from the document the gesture started on */
1483
+ var ownerDocument = (_a = dragSelectionDocumentRef.current) !== null && _a !== void 0 ? _a : document;
1484
+ dragSelectionDocumentRef.current = null;
1485
+ ownerDocument.removeEventListener("mouseup", handleSelectionMouseUp);
1486
+ ownerDocument.removeEventListener("mousemove", handleSelectionMouseMove);
1462
1487
  /* Force render */
1463
1488
  forceRender();
1464
1489
  }, [
@@ -1476,6 +1501,7 @@ var useSelection = function (_a) {
1476
1501
  * When user mouse downs on selection
1477
1502
  */
1478
1503
  var handleSelectionMouseDown = (0, react_1.useCallback)(function (e, activeCell, selection, index, shouldClamp) {
1504
+ var _a;
1479
1505
  if (shouldClamp === void 0) { shouldClamp = true; }
1480
1506
  if (e.isDefaultPrevented()) {
1481
1507
  return;
@@ -1507,9 +1533,11 @@ var useSelection = function (_a) {
1507
1533
  }
1508
1534
  /* Set dragging flag */
1509
1535
  isDragging.current = true;
1510
- /* Listen to mousemove and mousedown events */
1511
- document.addEventListener("mouseup", handleSelectionMouseUp);
1512
- document.addEventListener("mousemove", handleSelectionMouseMove);
1536
+ /* Listen on the document the gesture started on */
1537
+ var ownerDocument = (_a = (0, grid_3.getOwnerDocument)(e.currentTarget)) !== null && _a !== void 0 ? _a : document;
1538
+ dragSelectionDocumentRef.current = ownerDocument;
1539
+ ownerDocument.addEventListener("mouseup", handleSelectionMouseUp);
1540
+ ownerDocument.addEventListener("mousemove", handleSelectionMouseMove);
1513
1541
  /* Force a re-render */
1514
1542
  forceRender();
1515
1543
  }, [
@@ -1581,6 +1609,7 @@ var useSelection = function (_a) {
1581
1609
  var startTimeRef = (0, react_1.useRef)(0);
1582
1610
  var startPosRef = (0, react_1.useRef)({ x: 0, y: 0 });
1583
1611
  var onPointerUp = (0, react_1.useCallback)(function (event) {
1612
+ var _a;
1584
1613
  var endTime = Date.now();
1585
1614
  var maxDuration = 200;
1586
1615
  var maxDistance = 10;
@@ -1592,12 +1621,17 @@ var useSelection = function (_a) {
1592
1621
  handleMouseDown(event);
1593
1622
  handleMouseUp();
1594
1623
  }
1595
- document.removeEventListener("pointerup", onPointerUp);
1624
+ var ownerDocument = (_a = tapDocumentRef.current) !== null && _a !== void 0 ? _a : document;
1625
+ tapDocumentRef.current = null;
1626
+ ownerDocument.removeEventListener("pointerup", onPointerUp);
1596
1627
  }, [handleMouseDown, handleMouseUp]);
1597
1628
  var onPointerDown = (0, react_1.useCallback)(function (event) {
1629
+ var _a;
1598
1630
  startTimeRef.current = Date.now();
1599
1631
  startPosRef.current = { x: event.clientX, y: event.clientY };
1600
- document.addEventListener("pointerup", onPointerUp);
1632
+ var ownerDocument = (_a = (0, grid_3.getOwnerDocument)(event.currentTarget)) !== null && _a !== void 0 ? _a : document;
1633
+ tapDocumentRef.current = ownerDocument;
1634
+ ownerDocument.addEventListener("pointerup", onPointerUp);
1601
1635
  }, [onPointerUp]);
1602
1636
  // Add a ref. makeEditable renders way too often
1603
1637
  var handleKeyDownRef = (0, use_callback_ref_1.useCallbackRef)(handleKeyDown);
@@ -1 +1 @@
1
- {"version":3,"file":"use-table-resizer.d.ts","sourceRoot":"","sources":["../../../hooks/use-table-resizer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAClE,eAAe,EAAE,CACf,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,KAChC,IAAI,CAAC;IACV,eAAe,IAAI,IAAI,CAAC;IACxB,uBAAuB,EAAE,CACvB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,KACpB,aAAa,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACjD,YAAY,EAAE,CACZ,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,KACtB,IAAI,GAAG,SAAS,CAAC;IACtB,UAAU,IAAI,IAAI,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,+IAW7B,oBAAoB;;;CAyHtB,CAAC;AAYF,eAAO,MAAM,kBAAkB,wKAa7B,CAAC"}
1
+ {"version":3,"file":"use-table-resizer.d.ts","sourceRoot":"","sources":["../../../hooks/use-table-resizer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAClE,eAAe,EAAE,CACf,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,KAChC,IAAI,CAAC;IACV,eAAe,IAAI,IAAI,CAAC;IACxB,uBAAuB,EAAE,CACvB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,KACpB,aAAa,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACjD,YAAY,EAAE,CACZ,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,KACtB,IAAI,GAAG,SAAS,CAAC;IACtB,UAAU,IAAI,IAAI,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,+IAW7B,oBAAoB;;;CA+HtB,CAAC;AAYF,eAAO,MAAM,kBAAkB,wKAa7B,CAAC"}
@@ -25,6 +25,7 @@ var useTableResizer = function (_a) {
25
25
  }
26
26
  }, [getCellCoordsFromOffset, modifySelection, scrollToCell]);
27
27
  var onMouseUp = (0, react_1.useCallback)(function (event) {
28
+ var _a;
28
29
  // Callback
29
30
  var endCell = getCellCoordsFromOffset(event.clientX, event.clientY, false);
30
31
  //End
@@ -38,9 +39,11 @@ var useTableResizer = function (_a) {
38
39
  }
39
40
  // Switch focus to sheet
40
41
  focusSheet();
41
- // Unbind
42
- document.removeEventListener("pointermove", onMouseMove);
43
- document.removeEventListener("pointerup", onMouseUp);
42
+ // Unbind from the document the gesture started on
43
+ var ownerDocument = (_a = gestureDocumentRef.current) !== null && _a !== void 0 ? _a : document;
44
+ gestureDocumentRef.current = null;
45
+ ownerDocument.removeEventListener("pointermove", onMouseMove);
46
+ ownerDocument.removeEventListener("pointerup", onMouseUp);
44
47
  }, [
45
48
  onMouseMove,
46
49
  onResizeTable,
@@ -49,7 +52,10 @@ var useTableResizer = function (_a) {
49
52
  getCellCoordsFromOffset,
50
53
  sheetId,
51
54
  ]);
52
- var onMouseDown = (0, react_1.useCallback)(function (table) {
55
+ /** Document the in-flight gesture listens on (the grid may live in a popout window) */
56
+ var gestureDocumentRef = (0, react_1.useRef)(null);
57
+ var onMouseDown = (0, react_1.useCallback)(function (table, e) {
58
+ var _a;
53
59
  var range = table.range;
54
60
  // Create a new selection
55
61
  var start = {
@@ -68,9 +74,11 @@ var useTableResizer = function (_a) {
68
74
  modifySelection(end);
69
75
  // Setter
70
76
  setIsResizingTable(true);
71
- // Bind
72
- document.addEventListener("pointermove", onMouseMove);
73
- document.addEventListener("pointerup", onMouseUp);
77
+ // Bind on the document the gesture started on
78
+ var ownerDocument = (_a = (0, grid_1.getOwnerDocument)(e === null || e === void 0 ? void 0 : e.currentTarget)) !== null && _a !== void 0 ? _a : document;
79
+ gestureDocumentRef.current = ownerDocument;
80
+ ownerDocument.addEventListener("pointermove", onMouseMove);
81
+ ownerDocument.addEventListener("pointerup", onMouseUp);
74
82
  }, [newSelection, modifySelection, onMouseMove, onMouseUp]);
75
83
  // Resizer components
76
84
  var tableResizers = (0, react_1.useMemo)(function () {
@@ -80,7 +88,7 @@ var useTableResizer = function (_a) {
80
88
  rowIndex: range.endRowIndex,
81
89
  columnIndex: range.endColumnIndex,
82
90
  };
83
- return (react_1.default.createElement(TableResizer, { key: table.id, cornerCell: cornerCell, onPointerDown: function () { return onMouseDown(table); }, backgroundColor: theme.themeColors.accent1 }));
91
+ return (react_1.default.createElement(TableResizer, { key: table.id, cornerCell: cornerCell, onPointerDown: function (e) { return onMouseDown(table, e); }, backgroundColor: theme.themeColors.accent1 }));
84
92
  });
85
93
  }, [tables, sheetId, theme, onMouseDown]);
86
94
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"use-touch.d.ts","sourceRoot":"","sources":["../../../hooks/use-touch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvE,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoCF,eAAO,MAAM,QAAQ,GAAI,yDAMtB,aAAa;0BAsKJ,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;iCA1J/B,cAAc,KAAK,IAAI;qDA6CJ,YAAY;sCAQ3B,MAAM,GAAG,SAAS,aAAa,MAAM,GAAG,SAAS;CAqMjE,CAAC"}
1
+ {"version":3,"file":"use-touch.d.ts","sourceRoot":"","sources":["../../../hooks/use-touch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvE,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoCF,eAAO,MAAM,QAAQ,GAAI,yDAMtB,aAAa;0BA0KJ,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;iCA5J/B,cAAc,KAAK,IAAI;qDA6CJ,YAAY;sCAQ3B,MAAM,GAAG,SAAS,aAAa,MAAM,GAAG,SAAS;CA2MjE,CAAC"}
@@ -32,6 +32,8 @@ var useTouch = function (_a) {
32
32
  var scrollTo = _a.scrollTo, _b = _a.scale, scale = _b === void 0 ? 1 : _b, onChangeScale = _a.onChangeScale, _c = _a.minScale, minScale = _c === void 0 ? 0.25 : _c, _d = _a.maxScale, maxScale = _d === void 0 ? 4 : _d;
33
33
  var scrollerRef = (0, react_1.useRef)(null);
34
34
  var isImmediateRef = (0, react_1.useRef)(false);
35
+ /** Document the in-flight gesture listens on (the grid may live in a popout window) */
36
+ var gestureDocumentRef = (0, react_1.useRef)(null);
35
37
  var scaleRef = (0, react_1.useRef)(scale);
36
38
  var prevScaleRef = (0, react_1.useRef)(scale);
37
39
  var pinchStartDistanceRef = (0, react_1.useRef)(null);
@@ -154,20 +156,22 @@ var useTouch = function (_a) {
154
156
  scroller.doTouchMove(e.touches, e.timeStamp, pinchScale);
155
157
  }, [getScroller]);
156
158
  var onTouchEnd = (0, react_1.useCallback)(function (e) {
157
- var _a;
159
+ var _a, _b;
158
160
  (_a = getScroller()) === null || _a === void 0 ? void 0 : _a.doTouchEnd(e.timeStamp);
159
161
  pinchStartDistanceRef.current = null;
160
162
  pinchWarmupDistanceRef.current = null;
161
163
  pinchActivatedRef.current = false;
162
164
  pinchCenterRef.current = null;
163
165
  // Remove listeners
164
- document.removeEventListener("touchmove", onTouchMove, false);
165
- document.removeEventListener("touchend", onTouchEnd, false);
166
- document.removeEventListener("touchcancel", onTouchEnd, false);
166
+ var ownerDocument = (_b = gestureDocumentRef.current) !== null && _b !== void 0 ? _b : document;
167
+ gestureDocumentRef.current = null;
168
+ ownerDocument.removeEventListener("touchmove", onTouchMove, false);
169
+ ownerDocument.removeEventListener("touchend", onTouchEnd, false);
170
+ ownerDocument.removeEventListener("touchcancel", onTouchEnd, false);
167
171
  }, [getScroller, onTouchMove]);
168
172
  // Touch start
169
173
  var onTouchStart = (0, react_1.useCallback)(function (event) {
170
- var _a, _b;
174
+ var _a, _b, _c;
171
175
  // Fail early
172
176
  if (!helpers_1.isTouchDevice || (0, utils_1.isFocusable)(event.target)) {
173
177
  return;
@@ -189,9 +193,13 @@ var useTouch = function (_a) {
189
193
  (_a = scroller.__zoomLevel) !== null && _a !== void 0 ? _a : scaleRef.current;
190
194
  (_b = getScroller()) === null || _b === void 0 ? void 0 : _b.doTouchStart(event.touches, event.timeStamp);
191
195
  // event.preventDefault();
192
- document.addEventListener("touchmove", onTouchMove, { passive: false });
193
- document.addEventListener("touchend", onTouchEnd, false);
194
- document.addEventListener("touchcancel", onTouchEnd, false);
196
+ var ownerDocument = (_c = (0, grid_2.getOwnerDocument)(event.currentTarget)) !== null && _c !== void 0 ? _c : document;
197
+ gestureDocumentRef.current = ownerDocument;
198
+ ownerDocument.addEventListener("touchmove", onTouchMove, {
199
+ passive: false,
200
+ });
201
+ ownerDocument.addEventListener("touchend", onTouchEnd, false);
202
+ ownerDocument.addEventListener("touchcancel", onTouchEnd, false);
195
203
  }, [getScroller, onTouchMove, onTouchEnd]);
196
204
  // Callback when grid dimensions change
197
205
  var onDimensionsChange = (0, react_1.useCallback)(function (_a) {
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.releaseDate = void 0;
5
5
  exports.releaseDate =
6
6
  // @ts-ignore
7
- (_a = new Date("2026-09-17")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
7
+ (_a = new Date("2026-09-22")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AA+CA,OAAO,KASN,MAAM,OAAO,CAAC;AAuMf,OAAO,KAAK,EAGV,QAAQ,EAUT,MAAM,aAAa,CAAC;AAcrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAk1KnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AA+CA,OAAO,KASN,MAAM,OAAO,CAAC;AAuMf,OAAO,KAAK,EAGV,QAAQ,EAUT,MAAM,aAAa,CAAC;AAcrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAy1KnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { tokenize as defaultFormulaTokenizer } from "@rowsncolumns/calculator";
2
2
  import { cellToArea, Direction, isAreasEqual } from "@rowsncolumns/grid";
3
- import { canUseDOM } from "@rowsncolumns/grid";
3
+ import { canUseDOM, getOwnerDocument } from "@rowsncolumns/grid";
4
4
  import { getBoundedCells, MouseButtonCodes } from "@rowsncolumns/grid";
5
5
  import { isCellWithinBounds } from "@rowsncolumns/grid";
6
6
  import { cellIdentifier, Grid as BaseGrid, isEqualCells, } from "@rowsncolumns/grid";
@@ -660,10 +660,13 @@ function CanvasGridComponent(props, forwardedRef) {
660
660
  // user gesture on the grid focuses the tabIndex=0 container first, so
661
661
  // this only suppresses render-driven refocus; a null container ref
662
662
  // (mid mount/unmount) falls through to the original focus behavior.
663
- const activeElement = canUseDOM ? document.activeElement : null;
663
+ // The grid may render into a popout window: read focus from its own
664
+ // document, never from the bundle's global one.
665
+ const ownerDocument = getOwnerDocument(gridContainerRef.current);
666
+ const activeElement = ownerDocument?.activeElement ?? null;
664
667
  const gridContainer = gridContainerRef.current;
665
668
  if (activeElement &&
666
- activeElement !== document.body &&
669
+ activeElement !== ownerDocument?.body &&
667
670
  gridContainer &&
668
671
  !gridContainer.contains(activeElement)) {
669
672
  return;
@@ -1834,7 +1837,13 @@ function CanvasGridComponent(props, forwardedRef) {
1834
1837
  sheetId,
1835
1838
  ]);
1836
1839
  /* Check if sheet is focused */
1837
- const isSheetFocused = useCallback(() => canUseDOM ? document.activeElement === cellEditorInstance?.el() : false, [cellEditorInstance]);
1840
+ const isSheetFocused = useCallback(() => {
1841
+ const editorElement = cellEditorInstance?.el();
1842
+ if (!editorElement) {
1843
+ return false;
1844
+ }
1845
+ return getOwnerDocument(editorElement)?.activeElement === editorElement;
1846
+ }, [cellEditorInstance]);
1838
1847
  /**
1839
1848
  * Get Cell Editor
1840
1849
  */
@@ -3692,7 +3701,7 @@ function CanvasGridComponent(props, forwardedRef) {
3692
3701
  // Keep focus back on sheet
3693
3702
  // Check if user is focused on the context menu
3694
3703
  if (canUseDOM &&
3695
- document.activeElement?.getAttribute("role") !== "menu") {
3704
+ getOwnerDocument(gridContainerRef.current)?.activeElement?.getAttribute("role") !== "menu") {
3696
3705
  focusSheet();
3697
3706
  }
3698
3707
  }
@@ -1 +1 @@
1
- {"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,IAAI,GAAG,UAAU,GAAG,UAAU,CAC/B,GAAG;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D,CAAC;AAoBF,eAAO,MAAM,cAAc,GAAI,mNAoB5B,mBAAmB,sBA0KrB,CAAC"}
1
+ {"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,IAAI,GAAG,UAAU,GAAG,UAAU,CAC/B,GAAG;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D,CAAC;AAoBF,eAAO,MAAM,cAAc,GAAI,mNAoB5B,mBAAmB,sBA6KrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { useGridContext } from "@rowsncolumns/grid";
1
+ import { getOwnerDocument, useGridContext } from "@rowsncolumns/grid";
2
2
  import { cn } from "@rowsncolumns/ui";
3
3
  import React, { useCallback, useRef, useState } from "react";
4
4
  import Draggable from "react-draggable";
@@ -30,7 +30,8 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
30
30
  const nodeRef = useRef(null);
31
31
  // Focus if selected index changes
32
32
  useIsomorphicLayoutEffect(() => {
33
- if (isSelected && document.activeElement !== nodeRef.current) {
33
+ if (isSelected &&
34
+ getOwnerDocument(nodeRef.current)?.activeElement !== nodeRef.current) {
34
35
  nodeRef.current?.focus({ preventScroll: true });
35
36
  }
36
37
  }, [isSelected]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/resizer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,eAAO,MAAM,OAAO,GAAI,0BAA8B,YAAY,sBAoDjE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/resizer/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,eAAO,MAAM,OAAO,GAAI,0BAA8B,YAAY,sBAuDjE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { getOwnerDocument } from "@rowsncolumns/grid";
1
2
  import React, { useCallback, useRef } from "react";
2
3
  const RESIZER_HEIGHT = 4;
3
4
  export const Resizer = ({ onChange, value, min = 0 }) => {
@@ -14,15 +15,18 @@ export const Resizer = ({ onChange, value, min = 0 }) => {
14
15
  }, [min, onChange]);
15
16
  const handleMouseUp = useCallback(() => {
16
17
  dragging.current = false;
17
- document.removeEventListener("mousemove", handleMouseMove);
18
- document.removeEventListener("mouseup", handleMouseUp);
18
+ // The resizer may live in a popout window: unbind from its own document
19
+ const ownerDocument = getOwnerDocument(el.current) ?? document;
20
+ ownerDocument.removeEventListener("mousemove", handleMouseMove);
21
+ ownerDocument.removeEventListener("mouseup", handleMouseUp);
19
22
  }, [handleMouseMove]);
20
23
  const handleMouseDown = useCallback((e) => {
21
24
  dragging.current = true;
22
25
  const top = el.current?.style.top ? parseInt(el.current?.style.top) : 0;
23
26
  startY.current = e.pageY - top;
24
- document.addEventListener("mousemove", handleMouseMove);
25
- document.addEventListener("mouseup", handleMouseUp);
27
+ const ownerDocument = getOwnerDocument(el.current) ?? document;
28
+ ownerDocument.addEventListener("mousemove", handleMouseMove);
29
+ ownerDocument.addEventListener("mouseup", handleMouseUp);
26
30
  }, [handleMouseMove, handleMouseUp]);
27
31
  return (React.createElement("div", { onMouseDown: handleMouseDown, ref: el, style: {
28
32
  userSelect: "none",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sheet-search/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAKhD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5D,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;IACf,UAAU,IAAI,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;OAEG;IACH,YAAY,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,8MAgBzB,gBAAgB,6BAmNlB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sheet-search/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAKhD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5D,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;IACf,UAAU,IAAI,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;OAEG;IACH,YAAY,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,8MAgBzB,gBAAgB,6BAqNlB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { ChevronDownIcon, ChevronUpIcon, Cross2Icon, } from "@rowsncolumns/icons";
2
2
  import { Button, IconButton, Input } from "@rowsncolumns/ui";
3
3
  import { cn } from "@rowsncolumns/ui";
4
+ import { getOwnerDocument } from "@rowsncolumns/grid";
4
5
  import { canUseDOM } from "@rowsncolumns/utils";
5
6
  import React, { useRef, useState } from "react";
6
7
  import { useSpreadsheet } from "../../atoms";
@@ -51,9 +52,11 @@ export const SheetSearch = ({ onSubmit, onReset, onNext, onPrevious, searchQuery
51
52
  onResetSearch();
52
53
  }
53
54
  };
54
- document.addEventListener("keydown", handler);
55
+ // The search box may live in a popout window: listen on its document
56
+ const ownerDocument = getOwnerDocument(inputRef.current) ?? document;
57
+ ownerDocument.addEventListener("keydown", handler);
55
58
  return () => {
56
- document.removeEventListener("keydown", handler);
59
+ ownerDocument.removeEventListener("keydown", handler);
57
60
  };
58
61
  }
59
62
  }, [isActive]);
@@ -1 +1 @@
1
- {"version":3,"file":"use-copy-paste-cut.d.ts","sourceRoot":"","sources":["../../../hooks/use-copy-paste-cut.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYvE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,mCAAmC,CAAC;AAK3C,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC;;OAEG;IACH,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,2FAA2F;AAC3F,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAClD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wFAAwF;AACxF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAEzE,eAAO,MAAM,eAAe,GAAI,0EAQ7B,oBAAoB;;;;2BAmSG,mBAAmB;;IA4DzC,wEAAwE;;IAExE,kDAAkD;;;;wBA1O9C,cAAc;yBAwDd,cAAc;uBAvBd,cAAc;CAiNrB,CAAC"}
1
+ {"version":3,"file":"use-copy-paste-cut.d.ts","sourceRoot":"","sources":["../../../hooks/use-copy-paste-cut.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYvE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,mCAAmC,CAAC;AAK3C,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC;;OAEG;IACH,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,2FAA2F;AAC3F,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAClD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wFAAwF;AACxF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAEzE,eAAO,MAAM,eAAe,GAAI,0EAQ7B,oBAAoB;;;;2BAsSG,mBAAmB;;IA4DzC,wEAAwE;;IAExE,kDAAkD;;;;wBA1O9C,cAAc;yBAwDd,cAAc;uBAvBd,cAAc;CAiNrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { canUseDOM } from "@rowsncolumns/grid";
1
+ import { canUseDOM, getOwnerDocument } from "@rowsncolumns/grid";
2
2
  import { getHotkeyKey } from "@rowsncolumns/utils";
3
3
  import { useCallback, useRef, useState } from "react";
4
4
  import { createSelectionFromCell } from "../api/copy-paste";
@@ -62,6 +62,8 @@ export const useCopyPasteCut = ({ selections, activeCell, sheetId, onPaste, onCo
62
62
  if (!canUseDOM) {
63
63
  return;
64
64
  }
65
+ // The cell editor lives in the grid's document, which may be a popout window
66
+ const ownerDocument = getOwnerDocument(cellEditorInstance?.el()) ?? document;
65
67
  const handleKeyDown = (e) => {
66
68
  if (!e.key || getHotkeyKey(e) !== "v") {
67
69
  return;
@@ -76,9 +78,9 @@ export const useCopyPasteCut = ({ selections, activeCell, sheetId, onPaste, onCo
76
78
  time: Date.now(),
77
79
  };
78
80
  };
79
- document.addEventListener("keydown", handleKeyDown);
80
- return () => document.removeEventListener("keydown", handleKeyDown);
81
- }, []);
81
+ ownerDocument.addEventListener("keydown", handleKeyDown);
82
+ return () => ownerDocument.removeEventListener("keydown", handleKeyDown);
83
+ }, [cellEditorInstance]);
82
84
  // Clear selections in clipboard
83
85
  const clearCopiedSelections = useCallback(() => {
84
86
  // User has not copied any selections yet
@@ -1 +1 @@
1
- {"version":3,"file":"use-header-actions.d.ts","sourceRoot":"","sources":["../../../hooks/use-header-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,gBAAgB,GAAG;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAClD,uBAAuB,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY,GAAG,SAAS,CAAC;IAC3E,6BAA6B,EAAE,CAC7B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,KACN,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC;;OAEG;IACH,UAAU,CAAC,IAAI,IAAI,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,aAAa,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC;IAChE,WAAW,IAAI,aAAa,CAAC;IAC7B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,ufA+B9B,gBAAgB;;;;;CA8VlB,CAAC"}
1
+ {"version":3,"file":"use-header-actions.d.ts","sourceRoot":"","sources":["../../../hooks/use-header-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,KAAK,gBAAgB,GAAG;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAClD,uBAAuB,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY,GAAG,SAAS,CAAC;IAC3E,6BAA6B,EAAE,CAC7B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,KACN,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC;;OAEG;IACH,UAAU,CAAC,IAAI,IAAI,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,aAAa,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC;IAChE,WAAW,IAAI,aAAa,CAAC;IAC7B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,ufA+B9B,gBAAgB;;;;;CAoWlB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { getOwnerDocument } from "@rowsncolumns/grid";
1
2
  import React, { useCallback, useMemo, useRef, useState } from "react";
2
3
  import { scheduleLowPriorityCallback } from "../api/scheduler";
3
4
  import { Headermenu } from "../components/header-menu";
@@ -12,6 +13,8 @@ export const useHeaderActions = ({ activeCell, getScrollPosition, getCellOffsetF
12
13
  const [dimension, setDimension] = useState(0);
13
14
  const [isDragging, setIsDragging] = useState(false);
14
15
  const dragStartPos = useRef(0);
16
+ /** Document the in-flight gesture listens on (the grid may live in a popout window) */
17
+ const gestureDocumentRef = useRef(null);
15
18
  const activeCellRef = useRef(undefined);
16
19
  const axisRef = useRef(undefined);
17
20
  const dimensionRef = useRef(0);
@@ -129,8 +132,10 @@ export const useHeaderActions = ({ activeCell, getScrollPosition, getCellOffsetF
129
132
  * Called when user finishes dragging the component
130
133
  */
131
134
  const handleMouseUp = useCallback(() => {
132
- document.removeEventListener("mousemove", handleMouseMove);
133
- document.removeEventListener("mouseup", handleMouseUp);
135
+ const ownerDocument = gestureDocumentRef.current ?? document;
136
+ gestureDocumentRef.current = null;
137
+ ownerDocument.removeEventListener("mousemove", handleMouseMove);
138
+ ownerDocument.removeEventListener("mouseup", handleMouseUp);
134
139
  // Header resizer does not update otherwise.. @Vinay TODO Fix this later
135
140
  scheduleLowPriorityCallback(() => {
136
141
  setDimension(0);
@@ -172,8 +177,10 @@ export const useHeaderActions = ({ activeCell, getScrollPosition, getCellOffsetF
172
177
  dragStartPos.current =
173
178
  axisRef.current === "x" ? relativePosition.y : relativePosition.x;
174
179
  initialDimensionRef.current = axisRef.current === "x" ? height : width;
175
- document.addEventListener("mousemove", handleMouseMove);
176
- document.addEventListener("mouseup", handleMouseUp);
180
+ const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
181
+ gestureDocumentRef.current = ownerDocument;
182
+ ownerDocument.addEventListener("mousemove", handleMouseMove);
183
+ ownerDocument.addEventListener("mouseup", handleMouseUp);
177
184
  }, [
178
185
  activeCell,
179
186
  handleMouseMove,
@@ -1 +1 @@
1
- {"version":3,"file":"use-move-columns-rows.d.ts","sourceRoot":"","sources":["../../../hooks/use-move-columns-rows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACvE,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GACtB,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,6BAA6B,EAAE,CAC7B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,KACN,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,SAAS,CAAC;IAChE,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C;;OAEG;IACH,iBAAiB,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAChE,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,aAAa,CAAC;IAC1B,uBAAuB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;CACnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,8YAwBnC,oBAAoB;;;;CA6ZtB,CAAC"}
1
+ {"version":3,"file":"use-move-columns-rows.d.ts","sourceRoot":"","sources":["../../../hooks/use-move-columns-rows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACvE,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GACtB,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,6BAA6B,EAAE,CAC7B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,KACN,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,SAAS,CAAC;IAChE,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C;;OAEG;IACH,iBAAiB,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAChE,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,aAAa,CAAC;IAC1B,uBAAuB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;CACnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,8YAwBnC,oBAAoB;;;;CAmatB,CAAC"}