@rowsncolumns/spreadsheet 10.5.2 → 10.5.5
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/api/selections.d.ts +15 -1
- package/dist/cjs/api/selections.d.ts.map +1 -1
- package/dist/cjs/api/selections.js +12 -2
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +88 -70
- package/dist/cjs/components/canvas-grid/typings.d.ts +40 -1
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.d.ts +10 -3
- package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.js +21 -9
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +9 -5
- package/dist/cjs/components/cell/line-height.d.ts +22 -0
- package/dist/cjs/components/cell/line-height.d.ts.map +1 -0
- package/dist/cjs/components/cell/line-height.js +32 -0
- package/dist/cjs/components/cell/typings.d.ts +8 -2
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/hooks/export-range-tiles.d.ts +81 -0
- package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
- package/dist/cjs/hooks/export-range-tiles.js +171 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +3 -2
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
- package/dist/cjs/hooks/use-editable.d.ts +8 -1
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +6 -1
- package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +36 -16
- package/dist/cjs/hooks/use-export-range.d.ts +14 -6
- package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-export-range.js +240 -158
- package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
- package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/cjs/hooks/use-grid-children.js +4 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +13 -6
- package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
- package/dist/cjs/hooks/use-resize-observer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-resize-observer.js +43 -11
- package/dist/cjs/hooks/use-selection-renderer.d.ts +5 -1
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +8 -2
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +4 -2
- package/dist/cjs/hooks/use-sizer.d.ts +8 -2
- package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sizer.js +54 -33
- package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
- package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
- package/dist/cjs/providers/spreadsheet-provider.js +7 -5
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/api/selections.d.ts +15 -1
- package/dist/esm/api/selections.d.ts.map +1 -1
- package/dist/esm/api/selections.js +11 -2
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +30 -12
- package/dist/esm/components/canvas-grid/typings.d.ts +40 -1
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
- package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.js +14 -9
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +7 -3
- package/dist/esm/components/cell/line-height.d.ts +22 -0
- package/dist/esm/components/cell/line-height.d.ts.map +1 -0
- package/dist/esm/components/cell/line-height.js +25 -0
- package/dist/esm/components/cell/typings.d.ts +8 -2
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
- package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
- package/dist/esm/hooks/export-range-tiles.js +126 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +3 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
- package/dist/esm/hooks/use-editable.d.ts +8 -1
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +6 -1
- package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +24 -6
- package/dist/esm/hooks/use-export-range.d.ts +14 -6
- package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-export-range.js +158 -120
- package/dist/esm/hooks/use-grid-children.d.ts +4 -1
- package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/esm/hooks/use-grid-children.js +4 -2
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +13 -6
- package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
- package/dist/esm/hooks/use-resize-observer.d.ts.map +1 -1
- package/dist/esm/hooks/use-resize-observer.js +38 -9
- package/dist/esm/hooks/use-selection-renderer.d.ts +5 -1
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +8 -2
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +4 -2
- package/dist/esm/hooks/use-sizer.d.ts +8 -2
- package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-sizer.js +53 -31
- package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
- package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
- package/dist/esm/providers/spreadsheet-provider.js +8 -6
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1,44 +1,98 @@
|
|
|
1
|
-
import { Align } from "@rowsncolumns/grid";
|
|
2
1
|
import { getDevicePixelRatio } from "@rowsncolumns/grid";
|
|
3
2
|
import { useCallback } from "react";
|
|
3
|
+
import { planExportStops, sourceOffset, } from "./export-range-tiles";
|
|
4
4
|
import { useCallbackRef } from "./use-callback-ref";
|
|
5
|
-
|
|
5
|
+
import { useStableRef } from "./use-stable-ref";
|
|
6
|
+
/** The export zooms out this far to fit a range in the viewport before it tiles. */
|
|
7
|
+
const MIN_EXPORT_SCALE = 0.25;
|
|
8
|
+
/**
|
|
9
|
+
* Frames to keep waiting for a repaint that never comes (a host that ignores
|
|
10
|
+
* `onChangeScale`, a scroll the grid clamped elsewhere). The capture then goes
|
|
11
|
+
* on from whatever the grid did land on, so the output stays right.
|
|
12
|
+
*/
|
|
13
|
+
const PAINT_WAIT_FRAME_BUDGET = 120;
|
|
14
|
+
/** A scrollbar-driven scroll can settle a hair off the requested offset on sheets taller than the scrollbar can address. */
|
|
15
|
+
const SCROLL_TOLERANCE = 2;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves once the layer has repainted with `ready()` holding and a whole
|
|
18
|
+
* animation frame has then passed without another paint. The grid's canvas is
|
|
19
|
+
* drawn by react-konva's batched draw on the frame after a React commit, and a
|
|
20
|
+
* windowed engine folds the rows of a freshly scrolled-to viewport in a second
|
|
21
|
+
* commit right behind the first — the quiet frame is what lets that second
|
|
22
|
+
* paint land before the copy, instead of a fixed number of frames that may or
|
|
23
|
+
* may not cover it. Paints from before `ready()` held do not count.
|
|
24
|
+
*/
|
|
25
|
+
const waitForPaint = (layer, ready) => new Promise((resolve) => {
|
|
26
|
+
let paintedThisFrame = false;
|
|
27
|
+
let paintedWhileReady = false;
|
|
28
|
+
let frames = 0;
|
|
29
|
+
const onDraw = () => {
|
|
30
|
+
paintedThisFrame = true;
|
|
31
|
+
};
|
|
32
|
+
layer.on("draw", onDraw);
|
|
33
|
+
const finish = () => {
|
|
34
|
+
layer.off("draw", onDraw);
|
|
35
|
+
resolve();
|
|
36
|
+
};
|
|
37
|
+
const tick = () => {
|
|
38
|
+
frames += 1;
|
|
39
|
+
if (!ready()) {
|
|
40
|
+
paintedThisFrame = false;
|
|
41
|
+
paintedWhileReady = false;
|
|
42
|
+
}
|
|
43
|
+
else if (paintedThisFrame) {
|
|
44
|
+
paintedThisFrame = false;
|
|
45
|
+
paintedWhileReady = true;
|
|
46
|
+
}
|
|
47
|
+
else if (paintedWhileReady) {
|
|
48
|
+
finish();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (frames >= PAINT_WAIT_FRAME_BUDGET) {
|
|
52
|
+
finish();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
requestAnimationFrame(tick);
|
|
56
|
+
};
|
|
57
|
+
requestAnimationFrame(tick);
|
|
58
|
+
});
|
|
59
|
+
const isAtScroll = (position, target) => Math.abs(position.scrollTop - target.scrollTop) <= SCROLL_TOLERANCE &&
|
|
60
|
+
Math.abs(position.scrollLeft - target.scrollLeft) <= SCROLL_TOLERANCE;
|
|
61
|
+
const getFileExtension = (fmt) => {
|
|
62
|
+
switch (fmt) {
|
|
63
|
+
case "image/jpeg":
|
|
64
|
+
case "image/jpg":
|
|
65
|
+
return ".jpg";
|
|
66
|
+
case "image/webp":
|
|
67
|
+
return ".webp";
|
|
68
|
+
case "image/png":
|
|
69
|
+
default:
|
|
70
|
+
return ".png";
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
export const useExportRange = ({ sheetId, gridLineWidth, cellBackgroundColor, frozenRows, frozenColumns, getCanvasLayers, getColumnHeaderCanvasLayer, getRowHeaderCanvasLayer, getSheetName, getR1C1AddressFromSelection, getScrollPosition, getRowOffset, getColumnOffset, getSheetDimensions, getGridDimensions, scrollTo, scale, onChangeScale, }) => {
|
|
74
|
+
// The capture spans renders; this is how it sees the scale the host applied.
|
|
75
|
+
const scaleRef = useStableRef(scale);
|
|
6
76
|
return useCallbackRef(useCallback((range, options) => {
|
|
7
77
|
const layers = getCanvasLayers();
|
|
8
|
-
|
|
78
|
+
const layer = layers?.[0];
|
|
79
|
+
if (!layer)
|
|
9
80
|
return undefined;
|
|
10
81
|
const { filename, format, includeHeaders } = options || {};
|
|
11
82
|
const baseScale = scale ?? 1;
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
const normalizeRangeStart = (rangeValue) => ({
|
|
19
|
-
...rangeValue,
|
|
20
|
-
startRowIndex: Math.max(1, rangeValue.startRowIndex),
|
|
21
|
-
startColumnIndex: Math.max(1, rangeValue.startColumnIndex),
|
|
22
|
-
});
|
|
23
|
-
const isStartInViewport = (viewport, normalizedRange) => normalizedRange.startRowIndex >= viewport.visibleRowStartIndex &&
|
|
24
|
-
normalizedRange.startRowIndex <= viewport.visibleRowStopIndex &&
|
|
25
|
-
normalizedRange.startColumnIndex >=
|
|
26
|
-
viewport.visibleColumnStartIndex &&
|
|
27
|
-
normalizedRange.startColumnIndex <= viewport.visibleColumnStopIndex;
|
|
28
|
-
const isRangeInViewport = (viewport, normalizedRange) => normalizedRange.startRowIndex >= viewport.visibleRowStartIndex &&
|
|
29
|
-
normalizedRange.endRowIndex <= viewport.visibleRowStopIndex &&
|
|
30
|
-
normalizedRange.startColumnIndex >=
|
|
31
|
-
viewport.visibleColumnStartIndex &&
|
|
32
|
-
normalizedRange.endColumnIndex <= viewport.visibleColumnStopIndex;
|
|
83
|
+
const normalizedRange = {
|
|
84
|
+
...range,
|
|
85
|
+
startRowIndex: Math.max(1, range.startRowIndex),
|
|
86
|
+
startColumnIndex: Math.max(1, range.startColumnIndex),
|
|
87
|
+
};
|
|
33
88
|
const exportRangeAsync = async () => {
|
|
34
89
|
const initialScrollCoords = getScrollPosition();
|
|
35
90
|
let nextScale = baseScale;
|
|
36
|
-
let didScroll = false;
|
|
37
91
|
if (onChangeScale) {
|
|
38
|
-
const startX = getColumnOffset(
|
|
39
|
-
const endX = getColumnOffset(
|
|
40
|
-
const startY = getRowOffset(
|
|
41
|
-
const endY = getRowOffset(
|
|
92
|
+
const startX = getColumnOffset(normalizedRange.startColumnIndex);
|
|
93
|
+
const endX = getColumnOffset(normalizedRange.endColumnIndex + 1);
|
|
94
|
+
const startY = getRowOffset(normalizedRange.startRowIndex);
|
|
95
|
+
const endY = getRowOffset(normalizedRange.endRowIndex + 1);
|
|
42
96
|
const currentWidth = Math.max(endX - startX, 0);
|
|
43
97
|
const currentHeight = Math.max(endY - startY, 0);
|
|
44
98
|
const [viewWidth, viewHeight] = getSheetDimensions();
|
|
@@ -46,112 +100,93 @@ export const useExportRange = ({ sheetId, gridLineWidth, cellBackgroundColor, ge
|
|
|
46
100
|
const unscaledWidth = currentWidth / baseScale;
|
|
47
101
|
const unscaledHeight = currentHeight / baseScale;
|
|
48
102
|
const fitScale = Math.min(viewWidth / unscaledWidth, viewHeight / unscaledHeight, baseScale);
|
|
49
|
-
const minScale = Math.min(
|
|
103
|
+
const minScale = Math.min(MIN_EXPORT_SCALE, baseScale);
|
|
50
104
|
nextScale = Math.min(Math.max(fitScale, minScale), baseScale);
|
|
51
105
|
}
|
|
52
106
|
}
|
|
53
107
|
try {
|
|
54
108
|
if (onChangeScale && nextScale !== baseScale) {
|
|
55
109
|
onChangeScale(nextScale);
|
|
56
|
-
await waitForPaint();
|
|
57
|
-
}
|
|
58
|
-
const normalizedRange = normalizeRangeStart(range);
|
|
59
|
-
const viewport = getViewPort();
|
|
60
|
-
if (!isStartInViewport(viewport, normalizedRange)) {
|
|
61
|
-
scrollToCell?.({
|
|
62
|
-
rowIndex: normalizedRange.startRowIndex,
|
|
63
|
-
columnIndex: normalizedRange.startColumnIndex,
|
|
64
|
-
}, Align.start);
|
|
65
|
-
didScroll = true;
|
|
66
|
-
await waitForPaint();
|
|
67
|
-
}
|
|
68
|
-
const viewportAfterStart = getViewPort();
|
|
69
|
-
if (!isRangeInViewport(viewportAfterStart, normalizedRange)) {
|
|
70
|
-
scrollToCell?.({
|
|
71
|
-
rowIndex: normalizedRange.endRowIndex,
|
|
72
|
-
columnIndex: normalizedRange.endColumnIndex,
|
|
73
|
-
}, Align.end);
|
|
74
|
-
didScroll = true;
|
|
75
|
-
await waitForPaint();
|
|
110
|
+
await waitForPaint(layer, () => scaleRef.current === nextScale);
|
|
76
111
|
}
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
112
|
+
// Measured after the zoom so every offset is at the export scale.
|
|
113
|
+
const dimensions = getGridDimensions();
|
|
114
|
+
if (!dimensions)
|
|
115
|
+
return undefined;
|
|
116
|
+
const headerWidth = includeHeaders ? getColumnOffset(1) : 0;
|
|
117
|
+
const headerHeight = includeHeaders ? getRowOffset(1) : 0;
|
|
118
|
+
const rangeLeft = getColumnOffset(normalizedRange.startColumnIndex);
|
|
119
|
+
const rangeRight = getColumnOffset(normalizedRange.endColumnIndex + 1) +
|
|
120
|
+
gridLineWidth;
|
|
121
|
+
const rangeTop = getRowOffset(normalizedRange.startRowIndex);
|
|
122
|
+
const rangeBottom = getRowOffset(normalizedRange.endRowIndex + 1) + gridLineWidth;
|
|
123
|
+
const scrollAtPlan = getScrollPosition();
|
|
124
|
+
const stops = planExportStops({
|
|
125
|
+
x: {
|
|
126
|
+
rangeStart: rangeLeft,
|
|
127
|
+
rangeEnd: rangeRight,
|
|
128
|
+
frozenSize: getColumnOffset(frozenColumns),
|
|
129
|
+
viewportSize: dimensions.containerWidth,
|
|
130
|
+
maxScroll: Math.max(0, dimensions.estimatedTotalWidth - dimensions.containerWidth),
|
|
131
|
+
currentScroll: scrollAtPlan.scrollLeft,
|
|
132
|
+
headerSize: headerWidth,
|
|
133
|
+
},
|
|
134
|
+
y: {
|
|
135
|
+
rangeStart: rangeTop,
|
|
136
|
+
rangeEnd: rangeBottom,
|
|
137
|
+
frozenSize: getRowOffset(frozenRows),
|
|
138
|
+
viewportSize: dimensions.containerHeight,
|
|
139
|
+
maxScroll: Math.max(0, dimensions.estimatedTotalHeight - dimensions.containerHeight),
|
|
140
|
+
currentScroll: scrollAtPlan.scrollTop,
|
|
141
|
+
headerSize: headerHeight,
|
|
142
|
+
},
|
|
85
143
|
});
|
|
86
|
-
// @ts-ignore
|
|
87
|
-
tl.x -= scrollCoords.scrollLeft;
|
|
88
|
-
// @ts-ignore
|
|
89
|
-
tl.y -= scrollCoords.scrollTop;
|
|
90
|
-
// @ts-ignore
|
|
91
|
-
br.x -= scrollCoords.scrollLeft;
|
|
92
|
-
// @ts-ignore
|
|
93
|
-
br.y -= scrollCoords.scrollTop;
|
|
94
144
|
const sheetName = getSheetName?.(range.sheetId ?? sheetId);
|
|
95
145
|
const dpr = getDevicePixelRatio();
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const baseWidth = (br?.x ?? 0) - baseX + (br?.width ?? 0) + gridLineWidth;
|
|
99
|
-
const baseHeight = (br?.y ?? 0) - baseY + (br?.height ?? 0) + gridLineWidth;
|
|
100
|
-
const headerWidth = includeHeaders ? getColumnOffset(1) : 0;
|
|
101
|
-
const headerHeight = includeHeaders ? getRowOffset(1) : 0;
|
|
102
|
-
const destX = headerWidth;
|
|
103
|
-
const destY = headerHeight;
|
|
104
|
-
const width = baseWidth + headerWidth;
|
|
105
|
-
const height = baseHeight + headerHeight;
|
|
146
|
+
const width = rangeRight - rangeLeft + headerWidth;
|
|
147
|
+
const height = rangeBottom - rangeTop + headerHeight;
|
|
106
148
|
const finalFileName = filename ??
|
|
107
149
|
getR1C1AddressFromSelection?.(normalizedRange, sheetName)?.substring(1);
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
default:
|
|
117
|
-
return ".png";
|
|
118
|
-
}
|
|
150
|
+
const canvases = {
|
|
151
|
+
body: layer.getCanvas()._canvas,
|
|
152
|
+
rowHeader: includeHeaders
|
|
153
|
+
? getRowHeaderCanvasLayer()?.[0]?.getCanvas()._canvas
|
|
154
|
+
: null,
|
|
155
|
+
columnHeader: includeHeaders
|
|
156
|
+
? getColumnHeaderCanvasLayer()?.[0]?.getCanvas()._canvas
|
|
157
|
+
: null,
|
|
119
158
|
};
|
|
120
|
-
|
|
121
|
-
const rowHeaderCanvas = includeHeaders
|
|
122
|
-
? getRowHeaderCanvasLayer()?.[0]?.getCanvas()._canvas
|
|
123
|
-
: null;
|
|
124
|
-
const columnHeaderCanvas = includeHeaders
|
|
125
|
-
? getColumnHeaderCanvasLayer()?.[0]?.getCanvas()._canvas
|
|
126
|
-
: null;
|
|
127
|
-
if (!bodyCanvas)
|
|
159
|
+
if (!canvases.body)
|
|
128
160
|
return undefined;
|
|
129
|
-
const canvas = bodyCanvas;
|
|
130
161
|
const tempCanvas = document.createElement("canvas");
|
|
131
162
|
tempCanvas.width = width * dpr;
|
|
132
163
|
tempCanvas.height = height * dpr;
|
|
133
164
|
const tempCtx = tempCanvas.getContext("2d");
|
|
134
|
-
const intermediateCanvas = document.createElement("canvas");
|
|
135
|
-
intermediateCanvas.width = width * dpr;
|
|
136
|
-
intermediateCanvas.height = height * dpr;
|
|
137
|
-
const intermediateCtx = intermediateCanvas.getContext("2d");
|
|
138
|
-
const bodySourceX = baseX;
|
|
139
|
-
const bodySourceY = baseY;
|
|
140
|
-
if (intermediateCtx) {
|
|
141
|
-
intermediateCtx.drawImage(canvas, bodySourceX * dpr, bodySourceY * dpr, baseWidth * dpr, baseHeight * dpr, destX * dpr, destY * dpr, baseWidth * dpr, baseHeight * dpr);
|
|
142
|
-
}
|
|
143
165
|
if (tempCtx) {
|
|
144
166
|
tempCtx.fillStyle = cellBackgroundColor;
|
|
145
167
|
tempCtx.fillRect(0, 0, tempCanvas.width, tempCanvas.height);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
168
|
+
}
|
|
169
|
+
const copyPiece = (piece, landed) => {
|
|
170
|
+
const source = canvases[piece.canvas];
|
|
171
|
+
if (!tempCtx || !source)
|
|
172
|
+
return;
|
|
173
|
+
const sx = sourceOffset(piece.x, landed.scrollLeft);
|
|
174
|
+
const sy = sourceOffset(piece.y, landed.scrollTop);
|
|
175
|
+
tempCtx.drawImage(source, sx * dpr, sy * dpr, piece.x.size * dpr, piece.y.size * dpr, piece.x.dest * dpr, piece.y.dest * dpr, piece.x.size * dpr, piece.y.size * dpr);
|
|
176
|
+
};
|
|
177
|
+
for (const stop of stops) {
|
|
178
|
+
const target = {
|
|
179
|
+
scrollTop: stop.scrollTop,
|
|
180
|
+
scrollLeft: stop.scrollLeft,
|
|
181
|
+
};
|
|
182
|
+
if (!isAtScroll(getScrollPosition(), target)) {
|
|
183
|
+
scrollTo(target, true);
|
|
184
|
+
await waitForPaint(layer, () => isAtScroll(getScrollPosition(), target));
|
|
154
185
|
}
|
|
186
|
+
// Copy from where the grid actually landed, not where it was sent.
|
|
187
|
+
const landed = getScrollPosition();
|
|
188
|
+
for (const piece of stop.pieces)
|
|
189
|
+
copyPiece(piece, landed);
|
|
155
190
|
}
|
|
156
191
|
if (format === "clipboard") {
|
|
157
192
|
await new Promise((resolve, reject) => {
|
|
@@ -195,11 +230,13 @@ export const useExportRange = ({ sheetId, gridLineWidth, cellBackgroundColor, ge
|
|
|
195
230
|
const shouldRestoreScale = onChangeScale && nextScale !== baseScale;
|
|
196
231
|
if (shouldRestoreScale) {
|
|
197
232
|
onChangeScale(baseScale);
|
|
198
|
-
await waitForPaint();
|
|
233
|
+
await waitForPaint(layer, () => scaleRef.current === baseScale);
|
|
199
234
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
235
|
+
const current = getScrollPosition();
|
|
236
|
+
if (current.scrollTop !== initialScrollCoords.scrollTop ||
|
|
237
|
+
current.scrollLeft !== initialScrollCoords.scrollLeft) {
|
|
238
|
+
scrollTo(initialScrollCoords, true);
|
|
239
|
+
await waitForPaint(layer, () => isAtScroll(getScrollPosition(), initialScrollCoords));
|
|
203
240
|
}
|
|
204
241
|
}
|
|
205
242
|
};
|
|
@@ -208,20 +245,21 @@ export const useExportRange = ({ sheetId, gridLineWidth, cellBackgroundColor, ge
|
|
|
208
245
|
sheetId,
|
|
209
246
|
gridLineWidth,
|
|
210
247
|
cellBackgroundColor,
|
|
248
|
+
frozenRows,
|
|
249
|
+
frozenColumns,
|
|
211
250
|
getCanvasLayers,
|
|
212
|
-
getCellOffsetFromCoords,
|
|
213
251
|
getSheetName,
|
|
214
252
|
getR1C1AddressFromSelection,
|
|
215
253
|
getScrollPosition,
|
|
216
|
-
getViewPort,
|
|
217
254
|
getColumnHeaderCanvasLayer,
|
|
218
255
|
getRowHeaderCanvasLayer,
|
|
219
256
|
getRowOffset,
|
|
220
257
|
getColumnOffset,
|
|
221
258
|
getSheetDimensions,
|
|
259
|
+
getGridDimensions,
|
|
222
260
|
scrollTo,
|
|
223
|
-
scrollToCell,
|
|
224
261
|
scale,
|
|
225
262
|
onChangeScale,
|
|
263
|
+
scaleRef,
|
|
226
264
|
]));
|
|
227
265
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GridChildrenProps } from "@rowsncolumns/grid";
|
|
2
2
|
import React from "react";
|
|
3
|
+
import type { CanvasGridProps } from "../components/canvas-grid/typings";
|
|
3
4
|
import type { SheetCoordinate, SheetRange } from "../types";
|
|
4
5
|
import type { useEmbedsCharts } from "./use-embeds-charts";
|
|
5
6
|
type UseGridChildrenProps = {
|
|
@@ -18,12 +19,14 @@ type UseGridChildrenProps = {
|
|
|
18
19
|
isHeaderMenuInFrozenColumn?: boolean;
|
|
19
20
|
popoverComponent: React.JSX.Element | null | undefined;
|
|
20
21
|
cellExpandComponent: React.JSX.Element | null | undefined;
|
|
22
|
+
/** Trace precedents / dependents arrows; they scroll with the body. */
|
|
23
|
+
arrowComponents?: CanvasGridProps["arrowComponents"];
|
|
21
24
|
popoverRange?: SheetRange | SheetCoordinate;
|
|
22
25
|
gridLineWidth?: number;
|
|
23
26
|
frozenColumns: number;
|
|
24
27
|
frozenRows: number;
|
|
25
28
|
};
|
|
26
|
-
export declare const useGridChildren: ({ stickyEditor, editorComponent, chartComponents, embedComponents, slicerComponents, pivotPlaceholders, tableResizers, hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers, gridLineWidth, frozenColumns, frozenRows, headerMenuComponent, isHeaderMenuInFrozenColumn, popoverRange, popoverComponent, cellExpandComponent, }: UseGridChildrenProps) => (props: GridChildrenProps) => React.JSX.Element;
|
|
29
|
+
export declare const useGridChildren: ({ stickyEditor, editorComponent, chartComponents, embedComponents, slicerComponents, pivotPlaceholders, tableResizers, hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers, gridLineWidth, frozenColumns, frozenRows, headerMenuComponent, isHeaderMenuInFrozenColumn, popoverRange, popoverComponent, cellExpandComponent, arrowComponents, }: UseGridChildrenProps) => (props: GridChildrenProps) => React.JSX.Element;
|
|
27
30
|
export declare const StyledGridChildren: ({ className, elevate, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
28
31
|
elevate?: boolean;
|
|
29
32
|
}) => React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-grid-children.d.ts","sourceRoot":"","sources":["../../../hooks/use-grid-children.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAsB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-grid-children.d.ts","sourceRoot":"","sources":["../../../hooks/use-grid-children.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACvE,eAAe,EACX,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,iBAAiB,CAAC,GACrD,IAAI,GACJ,SAAS,CAAC;IACd,gBAAgB,EACZ,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,kBAAkB,CAAC,GACtD,IAAI,GACJ,SAAS,CAAC;IACd,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,yBAAyB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,sBAAsB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7D,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,uEAAuE;IACvE,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,qXAqB7B,oBAAoB,aAiBX,iBAAiB,sBA2I5B,CAAC;AA+BF,eAAO,MAAM,kBAAkB,GAAI,kCAIhC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,sBAS9D,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { cn } from "@rowsncolumns/ui";
|
|
|
2
2
|
import React, { useCallback } from "react";
|
|
3
3
|
import { useEditingCellCoordinate } from "../atoms";
|
|
4
4
|
import { isSheetRange } from "../helpers";
|
|
5
|
-
export const useGridChildren = ({ stickyEditor, editorComponent, chartComponents, embedComponents, slicerComponents, pivotPlaceholders, tableResizers, hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers, gridLineWidth = 1, frozenColumns, frozenRows, headerMenuComponent, isHeaderMenuInFrozenColumn, popoverRange, popoverComponent, cellExpandComponent, }) => {
|
|
5
|
+
export const useGridChildren = ({ stickyEditor, editorComponent, chartComponents, embedComponents, slicerComponents, pivotPlaceholders, tableResizers, hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers, gridLineWidth = 1, frozenColumns, frozenRows, headerMenuComponent, isHeaderMenuInFrozenColumn, popoverRange, popoverComponent, cellExpandComponent, arrowComponents, }) => {
|
|
6
6
|
const editingCellCoordinate = useEditingCellCoordinate();
|
|
7
7
|
// Quite a bit of logic for non sticky editor
|
|
8
8
|
// Remove if majority dont use this
|
|
@@ -42,7 +42,8 @@ export const useGridChildren = ({ stickyEditor, editorComponent, chartComponents
|
|
|
42
42
|
slicerComponents?.body,
|
|
43
43
|
pivotPlaceholders,
|
|
44
44
|
popoverPlacement === "body" ? popoverComponent : null,
|
|
45
|
-
cellExpandComponent
|
|
45
|
+
cellExpandComponent,
|
|
46
|
+
arrowComponents)),
|
|
46
47
|
React.createElement(StyledGridChildren, { style: {
|
|
47
48
|
left: frozenColumnWidth + gridLineWidth,
|
|
48
49
|
} },
|
|
@@ -104,6 +105,7 @@ export const useGridChildren = ({ stickyEditor, editorComponent, chartComponents
|
|
|
104
105
|
popoverComponent,
|
|
105
106
|
popoverPlacement,
|
|
106
107
|
cellExpandComponent,
|
|
108
|
+
arrowComponents,
|
|
107
109
|
]);
|
|
108
110
|
};
|
|
109
111
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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"}
|
|
@@ -136,17 +136,23 @@ onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onChangeBatch, getUserEnte
|
|
|
136
136
|
onRedo?.();
|
|
137
137
|
e.preventDefault();
|
|
138
138
|
return;
|
|
139
|
-
// Cmd/Ctrl + F
|
|
139
|
+
// Cmd/Ctrl + F. Claimed only when the host handles it so the
|
|
140
|
+
// browser's find keeps working otherwise. Cmd/Ctrl + Shift + F
|
|
141
|
+
// (filter) is matched by code further down.
|
|
140
142
|
case "f":
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
+
if (isShift)
|
|
144
|
+
break;
|
|
145
|
+
if (onRequestSearch) {
|
|
146
|
+
onRequestSearch();
|
|
143
147
|
e.preventDefault();
|
|
144
148
|
}
|
|
145
149
|
return;
|
|
146
|
-
// Cmd/Ctrl + H — Find & Replace
|
|
150
|
+
// Cmd/Ctrl + H — Find & Replace. Claimed only when the host
|
|
151
|
+
// handles it: on macOS Cmd+H hides the app (an Electron menu only
|
|
152
|
+
// gets the keys the page leaves alone).
|
|
147
153
|
case "h":
|
|
148
|
-
if (!isShift) {
|
|
149
|
-
onRequestReplace
|
|
154
|
+
if (!isShift && onRequestReplace) {
|
|
155
|
+
onRequestReplace();
|
|
150
156
|
e.preventDefault();
|
|
151
157
|
}
|
|
152
158
|
return;
|
|
@@ -516,6 +522,7 @@ onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onChangeBatch, getUserEnte
|
|
|
516
522
|
case "KeyF":
|
|
517
523
|
if (isMeta) {
|
|
518
524
|
onCreateBasicFilter?.(sheetId, activeCell, selections);
|
|
525
|
+
e.preventDefault();
|
|
519
526
|
}
|
|
520
527
|
break;
|
|
521
528
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-navigate-sheet-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-navigate-sheet-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EACV,eAAe,EACf,KAAK,EACL,UAAU,EACX,MAAM,2BAA2B,CAAC;AAMnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,EACrB,YAAY,CAAC,EAAE,OAAO,EACtB,KAAK,CAAC,EAAE,KAAK,KACV,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,oEAKrC,uBAAuB,kBAGP,UAAU,YAAY,eAAe,
|
|
1
|
+
{"version":3,"file":"use-navigate-sheet-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-navigate-sheet-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EACV,eAAe,EACf,KAAK,EACL,UAAU,EACX,MAAM,2BAA2B,CAAC;AAMnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,EACrB,YAAY,CAAC,EAAE,OAAO,EACtB,KAAK,CAAC,EAAE,KAAK,KACV,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,oEAKrC,uBAAuB,kBAGP,UAAU,YAAY,eAAe,SA4CvD,CAAC"}
|
|
@@ -14,8 +14,11 @@ export const useNavigateToSheetRange = ({ onChangeActiveSheet, onChangeSelection
|
|
|
14
14
|
};
|
|
15
15
|
// Switch to new sheet
|
|
16
16
|
onChangeActiveSheet?.(sheetRange.sheetId);
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// A single-cell target clears the selection, as a click on that cell
|
|
18
|
+
// does; leaving the previous range selected would send the next
|
|
19
|
+
// paste there instead of to the cell the user navigated to.
|
|
20
|
+
if (allowSelection) {
|
|
21
|
+
onChangeSelections?.(sheetRange.sheetId, isSheetRangeACell(sheetRange) ? [] : [{ range: sheetRange }]);
|
|
19
22
|
}
|
|
20
23
|
// Set active cell
|
|
21
24
|
if (allowSelection) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-resize-observer.d.ts","sourceRoot":"","sources":["../../../hooks/use-resize-observer.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEnD,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,gBAAgB,OAAK,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"use-resize-observer.d.ts","sourceRoot":"","sources":["../../../hooks/use-resize-observer.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEnD,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,gBAAgB,OAAK,MAAM,CAAC,CAAC,CA4ExE,CAAC"}
|
|
@@ -12,10 +12,29 @@ export const useResizeObserver = () => {
|
|
|
12
12
|
y: 0,
|
|
13
13
|
});
|
|
14
14
|
const node = useRef(null);
|
|
15
|
-
const
|
|
16
|
-
const disconnect = useCallback(() =>
|
|
15
|
+
const binding = useRef(null);
|
|
16
|
+
const disconnect = useCallback(() => {
|
|
17
|
+
binding.current?.resize.disconnect();
|
|
18
|
+
binding.current?.adoption.disconnect();
|
|
19
|
+
binding.current = null;
|
|
20
|
+
}, []);
|
|
17
21
|
const observe = useCallback(() => {
|
|
18
|
-
|
|
22
|
+
const target = node.current;
|
|
23
|
+
if (!target)
|
|
24
|
+
return;
|
|
25
|
+
const ownerDocument = target.ownerDocument;
|
|
26
|
+
if (binding.current?.node === target &&
|
|
27
|
+
binding.current.document === ownerDocument)
|
|
28
|
+
return;
|
|
29
|
+
disconnect();
|
|
30
|
+
const ownerWindow = ownerDocument.defaultView;
|
|
31
|
+
if (!ownerWindow)
|
|
32
|
+
return;
|
|
33
|
+
const resize = new ownerWindow.ResizeObserver(([entry]) => {
|
|
34
|
+
// An already queued notification from the old document must not restore its old dimensions.
|
|
35
|
+
if (target.ownerDocument !== ownerDocument ||
|
|
36
|
+
binding.current?.resize !== resize)
|
|
37
|
+
return;
|
|
19
38
|
const { left, top, width, height, bottom, right, x, y } = entry.contentRect;
|
|
20
39
|
setObserverEntry({
|
|
21
40
|
left,
|
|
@@ -28,13 +47,23 @@ export const useResizeObserver = () => {
|
|
|
28
47
|
y,
|
|
29
48
|
});
|
|
30
49
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
50
|
+
// A retained grid can be adopted into a pop-out without rendering again. Chromium's original
|
|
51
|
+
// document keeps the observation, so bind anew in the destination when the DOM moves. Observing
|
|
52
|
+
// child-list changes also catches an adopted ancestor (the grid's own parent need not change).
|
|
53
|
+
const adoption = new ownerWindow.MutationObserver(() => observe());
|
|
54
|
+
binding.current = {
|
|
55
|
+
node: target,
|
|
56
|
+
document: ownerDocument,
|
|
57
|
+
resize,
|
|
58
|
+
adoption,
|
|
59
|
+
};
|
|
60
|
+
resize.observe(target);
|
|
61
|
+
adoption.observe(ownerDocument, { childList: true, subtree: true });
|
|
62
|
+
}, [disconnect]);
|
|
63
|
+
// Also follow a ref assigned to a replacement element in an ordinary React commit.
|
|
35
64
|
useIsomorphicLayoutEffect(() => {
|
|
36
65
|
observe();
|
|
37
|
-
|
|
38
|
-
|
|
66
|
+
});
|
|
67
|
+
useIsomorphicLayoutEffect(() => disconnect, [disconnect]);
|
|
39
68
|
return [node, observerEntry];
|
|
40
69
|
};
|
|
@@ -16,6 +16,10 @@ export type UseSelectionRendererProps = {
|
|
|
16
16
|
sheetId: number;
|
|
17
17
|
selectionBackgroundColor: string;
|
|
18
18
|
selectionBorderColor: string;
|
|
19
|
+
/** Border width of a range selection outside formula mode (`CanvasGrid`'s prop). */
|
|
20
|
+
selectionStrokeWidth?: number;
|
|
21
|
+
/** Whether the active cell draws its own border while a range is selected (`CanvasGrid`'s prop). */
|
|
22
|
+
showActiveCellBorderInSelection?: boolean;
|
|
19
23
|
scale?: number;
|
|
20
24
|
getSheetName?(sheetId: number): string | undefined;
|
|
21
25
|
onChangeActiveCell: CanvasGridProps["onChangeActiveCell"];
|
|
@@ -73,5 +77,5 @@ export type UseSelectionRendererProps = {
|
|
|
73
77
|
*/
|
|
74
78
|
isFillShrink?: boolean;
|
|
75
79
|
};
|
|
76
|
-
export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
|
|
80
|
+
export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
|
|
77
81
|
//# sourceMappingURL=use-selection-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ const anchorsInsertOptions = (insertOptions, range, type, index, isEmptySelectio
|
|
|
28
28
|
: range.startColumnIndex <= bandEnd &&
|
|
29
29
|
range.endColumnIndex >= insertOptions.start;
|
|
30
30
|
};
|
|
31
|
-
export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize = 6, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables = false, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns = false, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink = false, }) => {
|
|
31
|
+
export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize = 6, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables = false, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns = false, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink = false, }) => {
|
|
32
32
|
const formulaMode = useFormulaModeValue();
|
|
33
33
|
const selectionIndex = useFormulaSelectionIndex();
|
|
34
34
|
const hoveredCellRef = useRef(hoveredCell);
|
|
@@ -71,7 +71,11 @@ export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgro
|
|
|
71
71
|
: getSelectionStrokeStyle(formulaMode, isFill, isActiveCell, isEmptySelections);
|
|
72
72
|
const strokeWidth = isBorder
|
|
73
73
|
? props.strokeWidth
|
|
74
|
-
: getSelectionStrokeWidth(formulaMode, isFill, isActiveCell, isResizingTable
|
|
74
|
+
: getSelectionStrokeWidth(formulaMode, isFill, isActiveCell, isResizingTable, {
|
|
75
|
+
selectionStrokeWidth,
|
|
76
|
+
showActiveCellBorderInSelection,
|
|
77
|
+
hasSelections: !isEmptySelections,
|
|
78
|
+
});
|
|
75
79
|
const fillOpacity = isBorder
|
|
76
80
|
? props.fillOpacity
|
|
77
81
|
: isFill && isFillShrink
|
|
@@ -179,6 +183,8 @@ export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgro
|
|
|
179
183
|
selectionCount,
|
|
180
184
|
selectionBackgroundColor,
|
|
181
185
|
selectionBorderColor,
|
|
186
|
+
selectionStrokeWidth,
|
|
187
|
+
showActiveCellBorderInSelection,
|
|
182
188
|
selectionIndex,
|
|
183
189
|
isResizingTable,
|
|
184
190
|
resizeHandleBorderColor,
|