@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Direction } from "@rowsncolumns/grid";
|
|
2
|
-
import { MouseButtonCodes } from "@rowsncolumns/grid";
|
|
2
|
+
import { getOwnerDocument, MouseButtonCodes } from "@rowsncolumns/grid";
|
|
3
3
|
import { getMinMaxArray, isNil, selectionBoundsFromCells, } from "@rowsncolumns/utils";
|
|
4
4
|
import React, { useCallback, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { HeaderMoveDragComponent as DefaultHeaderMoveDragComponent, } from "../components/header-move";
|
|
@@ -14,6 +14,8 @@ export const useMoveColumnsAndRows = ({ getCellOffsetFromCoords, getCellCoordsFr
|
|
|
14
14
|
const [offset, setOffset] = useState(0);
|
|
15
15
|
const [dragOffset, setDragOffset] = useState(0);
|
|
16
16
|
const gapRef = useRef(0);
|
|
17
|
+
/** Document the in-flight gesture listens on (the grid may live in a popout window) */
|
|
18
|
+
const gestureDocumentRef = useRef(null);
|
|
17
19
|
const startCellRef = useRef(undefined);
|
|
18
20
|
const startRef = useRef(0);
|
|
19
21
|
const endRef = useRef(0);
|
|
@@ -83,8 +85,10 @@ export const useMoveColumnsAndRows = ({ getCellOffsetFromCoords, getCellCoordsFr
|
|
|
83
85
|
*/
|
|
84
86
|
const handleMouseUp = useCallback((e) => {
|
|
85
87
|
setIsDragging(false);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
const ownerDocument = gestureDocumentRef.current ?? document;
|
|
89
|
+
gestureDocumentRef.current = null;
|
|
90
|
+
ownerDocument.removeEventListener("mousemove", handleMouseMove);
|
|
91
|
+
ownerDocument.removeEventListener("mouseup", handleMouseUp);
|
|
88
92
|
const dimensions = dragDimensions.current;
|
|
89
93
|
if (!dragAxis.current || !dimensions) {
|
|
90
94
|
return;
|
|
@@ -226,10 +230,12 @@ export const useMoveColumnsAndRows = ({ getCellOffsetFromCoords, getCellCoordsFr
|
|
|
226
230
|
setOffset(offset);
|
|
227
231
|
setDragOffset(dragOffset);
|
|
228
232
|
/**
|
|
229
|
-
* Add mousemove and up listeners
|
|
233
|
+
* Add mousemove and up listeners on the document the gesture started on
|
|
230
234
|
*/
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
|
|
236
|
+
gestureDocumentRef.current = ownerDocument;
|
|
237
|
+
ownerDocument.addEventListener("mousemove", handleMouseMove);
|
|
238
|
+
ownerDocument.addEventListener("mouseup", handleMouseUp);
|
|
233
239
|
}, [
|
|
234
240
|
columns,
|
|
235
241
|
rows,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-move.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAEb,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-selection-move.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAEb,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAGhF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACxD;;;;;OAKG;IACH,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,GAClC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,YAAY,CACV,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,IAAI,GAAG,SAAS,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,uDAI9B,qBAAqB;kCA+HhB,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;;CA2CzC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import isNil from "lodash/isNil";
|
|
2
|
+
import { getOwnerDocument } from "@rowsncolumns/grid";
|
|
2
3
|
import { useCallback, useRef, useState } from "react";
|
|
3
4
|
import { useActiveEditor, useEditingCellCoordinate, useGetAddressFromSelection, useGetSelectionsFromFormula, } from "../atoms";
|
|
4
5
|
import { detokenize } from "./use-selection-resize";
|
|
@@ -12,6 +13,8 @@ export const useSelectionMove = ({ tokenizer, getCellCoordsFromOffset, scrollToC
|
|
|
12
13
|
const selectionIndexRef = useRef(undefined);
|
|
13
14
|
const isDraggingRef = useRef(false);
|
|
14
15
|
const startCell = useRef(undefined);
|
|
16
|
+
/** Document the in-flight gesture listens on (the grid may live in a popout window) */
|
|
17
|
+
const gestureDocumentRef = useRef(null);
|
|
15
18
|
const initialRange = useRef(undefined);
|
|
16
19
|
const activeEditor = useActiveEditor();
|
|
17
20
|
const getSelectionToAddress = useGetAddressFromSelection();
|
|
@@ -95,8 +98,10 @@ export const useSelectionMove = ({ tokenizer, getCellCoordsFromOffset, scrollToC
|
|
|
95
98
|
startCell.current = undefined;
|
|
96
99
|
initialRange.current = undefined;
|
|
97
100
|
setIsDragging(false);
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
const ownerDocument = gestureDocumentRef.current ?? document;
|
|
102
|
+
gestureDocumentRef.current = null;
|
|
103
|
+
ownerDocument.removeEventListener("pointermove", onMouseMove);
|
|
104
|
+
ownerDocument.removeEventListener("pointerup", onMouseUp);
|
|
100
105
|
}, [activeEditor, onMouseMove]);
|
|
101
106
|
// Mousedown
|
|
102
107
|
const onMouseDownMoveSelection = useCallback((e) => {
|
|
@@ -126,8 +131,10 @@ export const useSelectionMove = ({ tokenizer, getCellCoordsFromOffset, scrollToC
|
|
|
126
131
|
// jsdom / older browsers without pointer capture
|
|
127
132
|
}
|
|
128
133
|
setIsDragging(true);
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
|
|
135
|
+
gestureDocumentRef.current = ownerDocument;
|
|
136
|
+
ownerDocument.addEventListener("pointermove", onMouseMove);
|
|
137
|
+
ownerDocument.addEventListener("pointerup", onMouseUp);
|
|
131
138
|
}
|
|
132
139
|
// Focus
|
|
133
140
|
activeEditor?.focus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-resize.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-resize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,SAAS,EACT,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIhF,KAAK,uBAAuB,GAAG;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACxD;;;;;OAKG;IACH,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,GAClC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAC9C;;;;OAIG;IACH,YAAY,CACV,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,IAAI,GAAG,SAAS,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,WAU/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,wFAMhC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"use-selection-resize.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-resize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,SAAS,EACT,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIhF,KAAK,uBAAuB,GAAG;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACxD;;;;;OAKG;IACH,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,GAClC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAC9C;;;;OAIG;IACH,YAAY,CACV,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,IAAI,GAAG,SAAS,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,WAU/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,wFAMhC,uBAAuB,SAmIlB,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,SAmDzC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cellRangeToBounds } from "@rowsncolumns/grid";
|
|
1
|
+
import { cellRangeToBounds, getOwnerDocument } from "@rowsncolumns/grid";
|
|
2
2
|
import isNil from "lodash/isNil";
|
|
3
3
|
import { useCallback, useRef } from "react";
|
|
4
4
|
import { useActiveEditor, useEditingCellCoordinate, useGetAddressFromSelection, useGetSelectionsFromFormula, } from "../atoms";
|
|
@@ -22,6 +22,8 @@ export const useSelectionResize = ({ resizeHandleSize = 6, tokenizer, getCellCoo
|
|
|
22
22
|
const selectionIndexRef = useRef(undefined);
|
|
23
23
|
const isDraggingRef = useRef(false);
|
|
24
24
|
const anchorCell = useRef(undefined);
|
|
25
|
+
/** Document the in-flight gesture listens on (the grid may live in a popout window) */
|
|
26
|
+
const gestureDocumentRef = useRef(null);
|
|
25
27
|
const activeEditor = useActiveEditor();
|
|
26
28
|
const getSelectionToAddress = useGetAddressFromSelection();
|
|
27
29
|
const getSelectionsFromFormula = useGetSelectionsFromFormula();
|
|
@@ -115,8 +117,10 @@ export const useSelectionResize = ({ resizeHandleSize = 6, tokenizer, getCellCoo
|
|
|
115
117
|
activeEditor?.focus();
|
|
116
118
|
isDraggingRef.current = false;
|
|
117
119
|
anchorCell.current = undefined;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
const ownerDocument = gestureDocumentRef.current ?? document;
|
|
121
|
+
gestureDocumentRef.current = null;
|
|
122
|
+
ownerDocument.removeEventListener("pointermove", onMouseMove);
|
|
123
|
+
ownerDocument.removeEventListener("pointerup", onMouseUp);
|
|
120
124
|
}, [activeEditor, onMouseMove]);
|
|
121
125
|
// Mousedown
|
|
122
126
|
const onMouseDownResizeHandle = useCallback((e) => {
|
|
@@ -144,8 +148,10 @@ export const useSelectionResize = ({ resizeHandleSize = 6, tokenizer, getCellCoo
|
|
|
144
148
|
catch {
|
|
145
149
|
// jsdom / older browsers without pointer capture
|
|
146
150
|
}
|
|
147
|
-
|
|
148
|
-
|
|
151
|
+
const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
|
|
152
|
+
gestureDocumentRef.current = ownerDocument;
|
|
153
|
+
ownerDocument.addEventListener("pointermove", onMouseMove);
|
|
154
|
+
ownerDocument.addEventListener("pointerup", onMouseUp);
|
|
149
155
|
}
|
|
150
156
|
// Focus
|
|
151
157
|
activeEditor?.focus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { findLastContentfulCell, isNull } from "@rowsncolumns/grid";
|
|
2
2
|
import { cellToArea } from "@rowsncolumns/grid";
|
|
3
|
-
import { useIsomorphicLayoutEffect } from "@rowsncolumns/grid";
|
|
3
|
+
import { getOwnerDocument, useIsomorphicLayoutEffect } from "@rowsncolumns/grid";
|
|
4
4
|
import { Align, cellIdentifier, cellRangeToBounds, clampCellCoords, clampIndex, Direction, findNextCellInDataRegion, findNextCellWithinBounds, getBoundedCells, isAreasEqual, isEqualCells, MouseButtonCodes, newSelectionFromDrag, selectionSpansCells, } from "@rowsncolumns/grid";
|
|
5
5
|
import { useCallback, useReducer, useRef, useState } from "react";
|
|
6
6
|
import { scheduleImmediatePriorityCallback, scheduleNormalPriorityCallback, } from "../api/scheduler";
|
|
@@ -105,24 +105,35 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
105
105
|
* release always fires `contextmenu`; neither may reach the grid's cell
|
|
106
106
|
* context menu while the user is dragging the fill handle.
|
|
107
107
|
*/
|
|
108
|
+
/**
|
|
109
|
+
* Documents the in-flight gestures listen on. The grid may render into a
|
|
110
|
+
* popout window, whose document is not the bundle's global `document`; a
|
|
111
|
+
* gesture binds its move/up listeners to the document of the element it
|
|
112
|
+
* started on and unbinds from that same document.
|
|
113
|
+
*/
|
|
114
|
+
const selectionDocumentRef = useRef(null);
|
|
115
|
+
const fillDocumentRef = useRef(null);
|
|
116
|
+
const dragSelectionDocumentRef = useRef(null);
|
|
117
|
+
const tapDocumentRef = useRef(null);
|
|
108
118
|
const contextMenuSuppressorRef = useRef(null);
|
|
109
119
|
const releaseContextMenuSuppressor = useCallback(() => {
|
|
110
|
-
const
|
|
111
|
-
if (!
|
|
120
|
+
const suppressor = contextMenuSuppressorRef.current;
|
|
121
|
+
if (!suppressor)
|
|
112
122
|
return;
|
|
113
123
|
contextMenuSuppressorRef.current = null;
|
|
114
|
-
|
|
124
|
+
suppressor.ownerDocument.removeEventListener("contextmenu", suppressor.handler, true);
|
|
115
125
|
}, []);
|
|
116
126
|
const suppressNextContextMenu = useCallback(() => {
|
|
117
127
|
if (contextMenuSuppressorRef.current)
|
|
118
128
|
return;
|
|
129
|
+
const ownerDocument = fillDocumentRef.current ?? document;
|
|
119
130
|
const handler = (e) => {
|
|
120
131
|
e.preventDefault();
|
|
121
132
|
e.stopPropagation();
|
|
122
133
|
releaseContextMenuSuppressor();
|
|
123
134
|
};
|
|
124
|
-
contextMenuSuppressorRef.current = handler;
|
|
125
|
-
|
|
135
|
+
contextMenuSuppressorRef.current = { handler, ownerDocument };
|
|
136
|
+
ownerDocument.addEventListener("contextmenu", handler, true);
|
|
126
137
|
}, [releaseContextMenuSuppressor]);
|
|
127
138
|
const selectionsRef = useRef([]);
|
|
128
139
|
const fillSelectionRef = useRef(undefined);
|
|
@@ -349,9 +360,11 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
349
360
|
const handleMouseUp = useCallback(() => {
|
|
350
361
|
/* Reset selection mode */
|
|
351
362
|
isSelecting.current = false;
|
|
352
|
-
/* Remove listener */
|
|
353
|
-
|
|
354
|
-
|
|
363
|
+
/* Remove listener from the document the gesture started on */
|
|
364
|
+
const ownerDocument = selectionDocumentRef.current ?? document;
|
|
365
|
+
selectionDocumentRef.current = null;
|
|
366
|
+
ownerDocument.removeEventListener("mousemove", handleMouseMove);
|
|
367
|
+
ownerDocument.removeEventListener("mouseup", handleMouseUp);
|
|
355
368
|
/* Update last selection */
|
|
356
369
|
const curSelections = selectionsRef.current;
|
|
357
370
|
const len = curSelections.length;
|
|
@@ -881,8 +894,10 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
881
894
|
const hasSelections = selectionsRef.current.length > 0;
|
|
882
895
|
const isDeselecting = isMetaKey && allowDeselect;
|
|
883
896
|
if (!isContextMenuClick && selectionPolicy !== "single") {
|
|
884
|
-
|
|
885
|
-
|
|
897
|
+
const ownerDocument = getOwnerDocument(e.currentTarget ?? e.target) ?? document;
|
|
898
|
+
selectionDocumentRef.current = ownerDocument;
|
|
899
|
+
ownerDocument.addEventListener("mouseup", handleMouseUp);
|
|
900
|
+
ownerDocument.addEventListener("mousemove", handleMouseMove);
|
|
886
901
|
}
|
|
887
902
|
/* Activate selection mode */
|
|
888
903
|
// Disable flag for context menu
|
|
@@ -1245,9 +1260,10 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1245
1260
|
isFilling.current = false;
|
|
1246
1261
|
const toggle = isFillToggleModifier(e);
|
|
1247
1262
|
const button = fillButtonRef.current;
|
|
1248
|
-
/* Remove listener */
|
|
1249
|
-
|
|
1250
|
-
|
|
1263
|
+
/* Remove listener from the document the gesture started on */
|
|
1264
|
+
const ownerDocument = fillDocumentRef.current ?? document;
|
|
1265
|
+
ownerDocument.removeEventListener("mousemove", handleFillMouseMove);
|
|
1266
|
+
ownerDocument.removeEventListener("mouseup", handleFillMouseUp);
|
|
1251
1267
|
// The right-button (or macOS Ctrl+click) `contextmenu` event follows this
|
|
1252
1268
|
// mouseup; keep swallowing it for one tick, then drop the suppressor so a
|
|
1253
1269
|
// later, unrelated right-click still opens the cell context menu.
|
|
@@ -1341,6 +1357,8 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1341
1357
|
const handleFillMouseDown = useCallback((e) => {
|
|
1342
1358
|
e.stopPropagation();
|
|
1343
1359
|
e.preventDefault();
|
|
1360
|
+
const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
|
|
1361
|
+
fillDocumentRef.current = ownerDocument;
|
|
1344
1362
|
const isRightButton = e.button === MouseButtonCodes.right;
|
|
1345
1363
|
fillButtonRef.current = isRightButton ? "right" : "left";
|
|
1346
1364
|
// Ctrl+drag on the handle must never become the macOS Ctrl+click
|
|
@@ -1350,8 +1368,8 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1350
1368
|
suppressNextContextMenu();
|
|
1351
1369
|
}
|
|
1352
1370
|
isFilling.current = true;
|
|
1353
|
-
|
|
1354
|
-
|
|
1371
|
+
ownerDocument.addEventListener("mousemove", handleFillMouseMove);
|
|
1372
|
+
ownerDocument.addEventListener("mouseup", handleFillMouseUp);
|
|
1355
1373
|
}, [handleFillMouseMove, handleFillMouseUp, suppressNextContextMenu]);
|
|
1356
1374
|
/**
|
|
1357
1375
|
* Remove the last selection from state
|
|
@@ -1478,9 +1496,11 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1478
1496
|
draggedSelection.current = void 0;
|
|
1479
1497
|
draggedSelectionIndex.current = void 0;
|
|
1480
1498
|
hasUserMovedSelection.current = false;
|
|
1481
|
-
/* Remove event handlers */
|
|
1482
|
-
|
|
1483
|
-
|
|
1499
|
+
/* Remove event handlers from the document the gesture started on */
|
|
1500
|
+
const ownerDocument = dragSelectionDocumentRef.current ?? document;
|
|
1501
|
+
dragSelectionDocumentRef.current = null;
|
|
1502
|
+
ownerDocument.removeEventListener("mouseup", handleSelectionMouseUp);
|
|
1503
|
+
ownerDocument.removeEventListener("mousemove", handleSelectionMouseMove);
|
|
1484
1504
|
/* Force render */
|
|
1485
1505
|
forceRender();
|
|
1486
1506
|
}, [
|
|
@@ -1528,9 +1548,11 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1528
1548
|
}
|
|
1529
1549
|
/* Set dragging flag */
|
|
1530
1550
|
isDragging.current = true;
|
|
1531
|
-
/* Listen
|
|
1532
|
-
|
|
1533
|
-
|
|
1551
|
+
/* Listen on the document the gesture started on */
|
|
1552
|
+
const ownerDocument = getOwnerDocument(e.currentTarget) ?? document;
|
|
1553
|
+
dragSelectionDocumentRef.current = ownerDocument;
|
|
1554
|
+
ownerDocument.addEventListener("mouseup", handleSelectionMouseUp);
|
|
1555
|
+
ownerDocument.addEventListener("mousemove", handleSelectionMouseMove);
|
|
1534
1556
|
/* Force a re-render */
|
|
1535
1557
|
forceRender();
|
|
1536
1558
|
}, [
|
|
@@ -1619,12 +1641,16 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1619
1641
|
handleMouseDown(event);
|
|
1620
1642
|
handleMouseUp();
|
|
1621
1643
|
}
|
|
1622
|
-
|
|
1644
|
+
const ownerDocument = tapDocumentRef.current ?? document;
|
|
1645
|
+
tapDocumentRef.current = null;
|
|
1646
|
+
ownerDocument.removeEventListener("pointerup", onPointerUp);
|
|
1623
1647
|
}, [handleMouseDown, handleMouseUp]);
|
|
1624
1648
|
const onPointerDown = useCallback((event) => {
|
|
1625
1649
|
startTimeRef.current = Date.now();
|
|
1626
1650
|
startPosRef.current = { x: event.clientX, y: event.clientY };
|
|
1627
|
-
|
|
1651
|
+
const ownerDocument = getOwnerDocument(event.currentTarget) ?? document;
|
|
1652
|
+
tapDocumentRef.current = ownerDocument;
|
|
1653
|
+
ownerDocument.addEventListener("pointerup", onPointerUp);
|
|
1628
1654
|
}, [onPointerUp]);
|
|
1629
1655
|
// Add a ref. makeEditable renders way too often
|
|
1630
1656
|
const handleKeyDownRef = 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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useGridContext } from "@rowsncolumns/grid";
|
|
1
|
+
import { getOwnerDocument, useGridContext } from "@rowsncolumns/grid";
|
|
2
2
|
import { Button, cn } from "@rowsncolumns/ui";
|
|
3
3
|
import { isNil } from "@rowsncolumns/utils";
|
|
4
4
|
import React, { useCallback, useMemo, useRef, useState } from "react";
|
|
@@ -37,9 +37,11 @@ export const useTableResizer = ({ sheetId, tables, theme, newSelection, modifySe
|
|
|
37
37
|
}
|
|
38
38
|
// Switch focus to sheet
|
|
39
39
|
focusSheet();
|
|
40
|
-
// Unbind
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
// Unbind from the document the gesture started on
|
|
41
|
+
const ownerDocument = gestureDocumentRef.current ?? document;
|
|
42
|
+
gestureDocumentRef.current = null;
|
|
43
|
+
ownerDocument.removeEventListener("pointermove", onMouseMove);
|
|
44
|
+
ownerDocument.removeEventListener("pointerup", onMouseUp);
|
|
43
45
|
}, [
|
|
44
46
|
onMouseMove,
|
|
45
47
|
onResizeTable,
|
|
@@ -48,7 +50,9 @@ export const useTableResizer = ({ sheetId, tables, theme, newSelection, modifySe
|
|
|
48
50
|
getCellCoordsFromOffset,
|
|
49
51
|
sheetId,
|
|
50
52
|
]);
|
|
51
|
-
|
|
53
|
+
/** Document the in-flight gesture listens on (the grid may live in a popout window) */
|
|
54
|
+
const gestureDocumentRef = useRef(null);
|
|
55
|
+
const onMouseDown = useCallback((table, e) => {
|
|
52
56
|
const { range } = table;
|
|
53
57
|
// Create a new selection
|
|
54
58
|
const start = {
|
|
@@ -67,9 +71,11 @@ export const useTableResizer = ({ sheetId, tables, theme, newSelection, modifySe
|
|
|
67
71
|
modifySelection(end);
|
|
68
72
|
// Setter
|
|
69
73
|
setIsResizingTable(true);
|
|
70
|
-
// Bind
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
// Bind on the document the gesture started on
|
|
75
|
+
const ownerDocument = getOwnerDocument(e?.currentTarget) ?? document;
|
|
76
|
+
gestureDocumentRef.current = ownerDocument;
|
|
77
|
+
ownerDocument.addEventListener("pointermove", onMouseMove);
|
|
78
|
+
ownerDocument.addEventListener("pointerup", onMouseUp);
|
|
73
79
|
}, [newSelection, modifySelection, onMouseMove, onMouseUp]);
|
|
74
80
|
// Resizer components
|
|
75
81
|
const tableResizers = useMemo(() => {
|
|
@@ -81,7 +87,7 @@ export const useTableResizer = ({ sheetId, tables, theme, newSelection, modifySe
|
|
|
81
87
|
rowIndex: range.endRowIndex,
|
|
82
88
|
columnIndex: range.endColumnIndex,
|
|
83
89
|
};
|
|
84
|
-
return (React.createElement(TableResizer, { key: table.id, cornerCell: cornerCell, onPointerDown: () => onMouseDown(table), backgroundColor: theme.themeColors.accent1 }));
|
|
90
|
+
return (React.createElement(TableResizer, { key: table.id, cornerCell: cornerCell, onPointerDown: (e) => onMouseDown(table, e), backgroundColor: theme.themeColors.accent1 }));
|
|
85
91
|
});
|
|
86
92
|
}, [tables, sheetId, theme, onMouseDown]);
|
|
87
93
|
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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useIsomorphicLayoutEffect } from "@rowsncolumns/grid";
|
|
2
|
-
import { throttle } from "@rowsncolumns/grid";
|
|
2
|
+
import { getOwnerDocument, throttle } from "@rowsncolumns/grid";
|
|
3
3
|
import { canUseDOM, isFocusable } from "@rowsncolumns/utils";
|
|
4
4
|
import { isNil } from "@rowsncolumns/utils";
|
|
5
5
|
import { useCallback, useRef } from "react";
|
|
@@ -26,6 +26,8 @@ const getTouchCenter = (touches) => {
|
|
|
26
26
|
export const useTouch = ({ scrollTo, scale = 1, onChangeScale, minScale = 0.25, maxScale = 4, }) => {
|
|
27
27
|
const scrollerRef = useRef(null);
|
|
28
28
|
const isImmediateRef = useRef(false);
|
|
29
|
+
/** Document the in-flight gesture listens on (the grid may live in a popout window) */
|
|
30
|
+
const gestureDocumentRef = useRef(null);
|
|
29
31
|
const scaleRef = useRef(scale);
|
|
30
32
|
const prevScaleRef = useRef(scale);
|
|
31
33
|
const pinchStartDistanceRef = useRef(null);
|
|
@@ -151,9 +153,11 @@ export const useTouch = ({ scrollTo, scale = 1, onChangeScale, minScale = 0.25,
|
|
|
151
153
|
pinchActivatedRef.current = false;
|
|
152
154
|
pinchCenterRef.current = null;
|
|
153
155
|
// Remove listeners
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
156
|
+
const ownerDocument = gestureDocumentRef.current ?? document;
|
|
157
|
+
gestureDocumentRef.current = null;
|
|
158
|
+
ownerDocument.removeEventListener("touchmove", onTouchMove, false);
|
|
159
|
+
ownerDocument.removeEventListener("touchend", onTouchEnd, false);
|
|
160
|
+
ownerDocument.removeEventListener("touchcancel", onTouchEnd, false);
|
|
157
161
|
}, [getScroller, onTouchMove]);
|
|
158
162
|
// Touch start
|
|
159
163
|
const onTouchStart = useCallback((event) => {
|
|
@@ -179,9 +183,13 @@ export const useTouch = ({ scrollTo, scale = 1, onChangeScale, minScale = 0.25,
|
|
|
179
183
|
scaleRef.current;
|
|
180
184
|
getScroller()?.doTouchStart(event.touches, event.timeStamp);
|
|
181
185
|
// event.preventDefault();
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
186
|
+
const ownerDocument = getOwnerDocument(event.currentTarget) ?? document;
|
|
187
|
+
gestureDocumentRef.current = ownerDocument;
|
|
188
|
+
ownerDocument.addEventListener("touchmove", onTouchMove, {
|
|
189
|
+
passive: false,
|
|
190
|
+
});
|
|
191
|
+
ownerDocument.addEventListener("touchend", onTouchEnd, false);
|
|
192
|
+
ownerDocument.addEventListener("touchcancel", onTouchEnd, false);
|
|
185
193
|
}, [getScroller, onTouchMove, onTouchEnd]);
|
|
186
194
|
// Callback when grid dimensions change
|
|
187
195
|
const onDimensionsChange = useCallback(({ containerWidth, containerHeight, estimatedTotalWidth, estimatedTotalHeight, }) => {
|
package/dist/esm/release-date.js
CHANGED