@rowsncolumns/spreadsheet 10.5.2 → 10.5.3
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 +85 -70
- package/dist/cjs/components/canvas-grid/typings.d.ts +18 -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-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-navigate-sheet-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -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/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +27 -12
- package/dist/esm/components/canvas-grid/typings.d.ts +18 -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-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-navigate-sheet-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-navigate-sheet-range.js +5 -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-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,4 +1,4 @@
|
|
|
1
|
-
import type { HiddenType, ViewPortProps } from "@rowsncolumns/grid";
|
|
1
|
+
import type { HiddenType, LineHeightMode, ViewPortProps } from "@rowsncolumns/grid";
|
|
2
2
|
import type { CanvasGridProps } from "../components/canvas-grid/typings";
|
|
3
3
|
import type { AXIS, Color, TextFormatRun } from "../types";
|
|
4
4
|
type GetColumnWidthOptions = {
|
|
@@ -41,6 +41,12 @@ export interface UseSizerProps {
|
|
|
41
41
|
fontSize?: number;
|
|
42
42
|
fontWeight?: string;
|
|
43
43
|
fontStyle?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Where the height of one line of text comes from — the font's own
|
|
46
|
+
* metrics (default) or the legacy `fontSize * 1.2` box. Must match the
|
|
47
|
+
* painter's `lineHeightMode` or wrapped rows clip (#1141).
|
|
48
|
+
*/
|
|
49
|
+
lineHeightMode?: LineHeightMode;
|
|
44
50
|
/**
|
|
45
51
|
* Strategy used to calculate column width
|
|
46
52
|
* lazy = visible rows
|
|
@@ -144,7 +150,7 @@ export interface GetCellDimensionsOptions {
|
|
|
144
150
|
* TODO
|
|
145
151
|
* Dynamically resize columns after user has scrolled down/view port changed ?
|
|
146
152
|
*/
|
|
147
|
-
export declare const useSizer: ({ getTextFormat, getTextFormatRuns, initialVisibleRows, initialVisibleColumns, cellVerticalSpacing, cellHorizontalSpacing, minColumnDimension, minRowDimension, resizeStrategy, rowCount, columnCount, getDataRowCount, fontFamily, fontSize, fontWeight, fontStyle, frozenRows, frozenColumns, scale, isHiddenRow, isHiddenColumn, getTextValue, getSpacing, getViewPort, shouldWrapCell, columnWidth, getActualCellWidth, }: UseSizerProps) => {
|
|
153
|
+
export declare const useSizer: ({ getTextFormat, getTextFormatRuns, initialVisibleRows, initialVisibleColumns, cellVerticalSpacing, cellHorizontalSpacing, minColumnDimension, minRowDimension, resizeStrategy, rowCount, columnCount, getDataRowCount, fontFamily, fontSize, fontWeight, fontStyle, lineHeightMode, frozenRows, frozenColumns, scale, isHiddenRow, isHiddenColumn, getTextValue, getSpacing, getViewPort, shouldWrapCell, columnWidth, getActualCellWidth, }: UseSizerProps) => {
|
|
148
154
|
getColumnWidth: (sheetId: number, columnIndex: number, options?: GetColumnWidthOptions) => number;
|
|
149
155
|
getTextDimension: (sheetId: number, rowIndex: number, columnIndex: number, formattedValue: string | undefined, customTextFormat?: TextFormat) => {
|
|
150
156
|
width: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-sizer.d.ts","sourceRoot":"","sources":["../../../hooks/use-sizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-sizer.d.ts","sourceRoot":"","sources":["../../../hooks/use-sizer.ts"],"names":[],"mappings":"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"}
|