@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.
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +14 -5
- package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-draggable.js +4 -3
- package/dist/cjs/components/resizer/index.d.ts.map +1 -1
- package/dist/cjs/components/resizer/index.js +10 -5
- package/dist/cjs/components/sheet-search/index.d.ts.map +1 -1
- package/dist/cjs/components/sheet-search/index.js +6 -2
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +6 -3
- package/dist/cjs/hooks/use-header-actions.d.ts.map +1 -1
- package/dist/cjs/hooks/use-header-actions.js +17 -10
- package/dist/cjs/hooks/use-move-columns-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/use-move-columns-rows.js +21 -15
- package/dist/cjs/hooks/use-selection-move.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-move.js +14 -6
- package/dist/cjs/hooks/use-selection-resize.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-resize.js +13 -6
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +59 -25
- package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-table-resizer.js +16 -8
- package/dist/cjs/hooks/use-touch.d.ts.map +1 -1
- package/dist/cjs/hooks/use-touch.js +16 -8
- package/dist/cjs/release-date.js +1 -1
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +14 -5
- package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-draggable.js +3 -2
- package/dist/esm/components/resizer/index.d.ts.map +1 -1
- package/dist/esm/components/resizer/index.js +8 -4
- package/dist/esm/components/sheet-search/index.d.ts.map +1 -1
- package/dist/esm/components/sheet-search/index.js +5 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +6 -4
- package/dist/esm/hooks/use-header-actions.d.ts.map +1 -1
- package/dist/esm/hooks/use-header-actions.js +11 -4
- package/dist/esm/hooks/use-move-columns-rows.d.ts.map +1 -1
- package/dist/esm/hooks/use-move-columns-rows.js +12 -6
- package/dist/esm/hooks/use-selection-move.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-move.js +11 -4
- package/dist/esm/hooks/use-selection-resize.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-resize.js +11 -5
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +50 -24
- package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-table-resizer.js +15 -9
- package/dist/esm/hooks/use-touch.d.ts.map +1 -1
- package/dist/esm/hooks/use-touch.js +15 -7
- package/dist/esm/release-date.js +1 -1
- 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
|
|
124
|
-
if (!
|
|
133
|
+
var suppressor = contextMenuSuppressorRef.current;
|
|
134
|
+
if (!suppressor)
|
|
125
135
|
return;
|
|
126
136
|
contextMenuSuppressorRef.current = null;
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
365
|
-
|
|
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
|
-
|
|
869
|
-
|
|
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
|
-
|
|
1224
|
-
|
|
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 = (
|
|
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
|
-
|
|
1327
|
-
|
|
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
|
-
|
|
1461
|
-
|
|
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
|
|
1511
|
-
|
|
1512
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;;;
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
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;
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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) {
|
package/dist/cjs/release-date.js
CHANGED
|
@@ -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-
|
|
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;
|
|
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
|
-
|
|
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 !==
|
|
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(() =>
|
|
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
|
-
|
|
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,
|
|
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 &&
|
|
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":"
|
|
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
|
|
18
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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":"
|
|
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
|
|
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
|
-
|
|
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;;;;
|
|
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
|
-
|
|
80
|
-
return () =>
|
|
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;
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
|
|
176
|
-
|
|
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;;;;
|
|
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"}
|