@rowsncolumns/spreadsheet 10.5.1 → 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.
Files changed (89) hide show
  1. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  2. package/dist/cjs/components/canvas-grid/index.js +103 -71
  3. package/dist/cjs/components/canvas-grid/typings.d.ts +18 -1
  4. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  5. package/dist/cjs/components/cell/cell-text-runs.d.ts +10 -3
  6. package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
  7. package/dist/cjs/components/cell/cell-text-runs.js +21 -9
  8. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  9. package/dist/cjs/components/cell/index.js +9 -5
  10. package/dist/cjs/components/cell/line-height.d.ts +22 -0
  11. package/dist/cjs/components/cell/line-height.d.ts.map +1 -0
  12. package/dist/cjs/components/cell/line-height.js +32 -0
  13. package/dist/cjs/components/cell/typings.d.ts +8 -2
  14. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  15. package/dist/cjs/components/formula-input/index.d.ts.map +1 -1
  16. package/dist/cjs/components/formula-input/index.js +28 -1
  17. package/dist/cjs/hooks/export-range-tiles.d.ts +81 -0
  18. package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
  19. package/dist/cjs/hooks/export-range-tiles.js +171 -0
  20. package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
  21. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  22. package/dist/cjs/hooks/use-cell-renderer.js +3 -2
  23. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
  24. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  25. package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
  26. package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
  27. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  28. package/dist/cjs/hooks/use-editor-submit.js +36 -16
  29. package/dist/cjs/hooks/use-export-range.d.ts +14 -6
  30. package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
  31. package/dist/cjs/hooks/use-export-range.js +240 -158
  32. package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
  33. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  34. package/dist/cjs/hooks/use-grid-children.js +4 -2
  35. package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  36. package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
  37. package/dist/cjs/hooks/use-sizer.d.ts +8 -2
  38. package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
  39. package/dist/cjs/hooks/use-sizer.js +54 -33
  40. package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
  41. package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
  42. package/dist/cjs/providers/spreadsheet-provider.js +7 -5
  43. package/dist/cjs/release-date.js +1 -1
  44. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  45. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  46. package/dist/esm/components/canvas-grid/index.js +44 -13
  47. package/dist/esm/components/canvas-grid/typings.d.ts +18 -1
  48. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  49. package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
  50. package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
  51. package/dist/esm/components/cell/cell-text-runs.js +14 -9
  52. package/dist/esm/components/cell/index.d.ts.map +1 -1
  53. package/dist/esm/components/cell/index.js +7 -3
  54. package/dist/esm/components/cell/line-height.d.ts +22 -0
  55. package/dist/esm/components/cell/line-height.d.ts.map +1 -0
  56. package/dist/esm/components/cell/line-height.js +25 -0
  57. package/dist/esm/components/cell/typings.d.ts +8 -2
  58. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  59. package/dist/esm/components/formula-input/index.d.ts.map +1 -1
  60. package/dist/esm/components/formula-input/index.js +26 -1
  61. package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
  62. package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
  63. package/dist/esm/hooks/export-range-tiles.js +126 -0
  64. package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
  65. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  66. package/dist/esm/hooks/use-cell-renderer.js +3 -2
  67. package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
  68. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  69. package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
  70. package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
  71. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  72. package/dist/esm/hooks/use-editor-submit.js +24 -6
  73. package/dist/esm/hooks/use-export-range.d.ts +14 -6
  74. package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
  75. package/dist/esm/hooks/use-export-range.js +158 -120
  76. package/dist/esm/hooks/use-grid-children.d.ts +4 -1
  77. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  78. package/dist/esm/hooks/use-grid-children.js +4 -2
  79. package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  80. package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
  81. package/dist/esm/hooks/use-sizer.d.ts +8 -2
  82. package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
  83. package/dist/esm/hooks/use-sizer.js +53 -31
  84. package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
  85. package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
  86. package/dist/esm/providers/spreadsheet-provider.js +8 -6
  87. package/dist/esm/release-date.js +1 -1
  88. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  89. package/package.json +6 -6
@@ -3,54 +3,107 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useExportRange = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var grid_1 = require("@rowsncolumns/grid");
6
- var grid_2 = require("@rowsncolumns/grid");
7
6
  var react_1 = require("react");
7
+ var export_range_tiles_1 = require("./export-range-tiles");
8
8
  var use_callback_ref_1 = require("./use-callback-ref");
9
+ var use_stable_ref_1 = require("./use-stable-ref");
10
+ /** The export zooms out this far to fit a range in the viewport before it tiles. */
11
+ var MIN_EXPORT_SCALE = 0.25;
12
+ /**
13
+ * Frames to keep waiting for a repaint that never comes (a host that ignores
14
+ * `onChangeScale`, a scroll the grid clamped elsewhere). The capture then goes
15
+ * on from whatever the grid did land on, so the output stays right.
16
+ */
17
+ var PAINT_WAIT_FRAME_BUDGET = 120;
18
+ /** A scrollbar-driven scroll can settle a hair off the requested offset on sheets taller than the scrollbar can address. */
19
+ var SCROLL_TOLERANCE = 2;
20
+ /**
21
+ * Resolves once the layer has repainted with `ready()` holding and a whole
22
+ * animation frame has then passed without another paint. The grid's canvas is
23
+ * drawn by react-konva's batched draw on the frame after a React commit, and a
24
+ * windowed engine folds the rows of a freshly scrolled-to viewport in a second
25
+ * commit right behind the first — the quiet frame is what lets that second
26
+ * paint land before the copy, instead of a fixed number of frames that may or
27
+ * may not cover it. Paints from before `ready()` held do not count.
28
+ */
29
+ var waitForPaint = function (layer, ready) {
30
+ return new Promise(function (resolve) {
31
+ var paintedThisFrame = false;
32
+ var paintedWhileReady = false;
33
+ var frames = 0;
34
+ var onDraw = function () {
35
+ paintedThisFrame = true;
36
+ };
37
+ layer.on("draw", onDraw);
38
+ var finish = function () {
39
+ layer.off("draw", onDraw);
40
+ resolve();
41
+ };
42
+ var tick = function () {
43
+ frames += 1;
44
+ if (!ready()) {
45
+ paintedThisFrame = false;
46
+ paintedWhileReady = false;
47
+ }
48
+ else if (paintedThisFrame) {
49
+ paintedThisFrame = false;
50
+ paintedWhileReady = true;
51
+ }
52
+ else if (paintedWhileReady) {
53
+ finish();
54
+ return;
55
+ }
56
+ if (frames >= PAINT_WAIT_FRAME_BUDGET) {
57
+ finish();
58
+ return;
59
+ }
60
+ requestAnimationFrame(tick);
61
+ };
62
+ requestAnimationFrame(tick);
63
+ });
64
+ };
65
+ var isAtScroll = function (position, target) {
66
+ return Math.abs(position.scrollTop - target.scrollTop) <= SCROLL_TOLERANCE &&
67
+ Math.abs(position.scrollLeft - target.scrollLeft) <= SCROLL_TOLERANCE;
68
+ };
69
+ var getFileExtension = function (fmt) {
70
+ switch (fmt) {
71
+ case "image/jpeg":
72
+ case "image/jpg":
73
+ return ".jpg";
74
+ case "image/webp":
75
+ return ".webp";
76
+ case "image/png":
77
+ default:
78
+ return ".png";
79
+ }
80
+ };
9
81
  var useExportRange = function (_a) {
10
- var sheetId = _a.sheetId, gridLineWidth = _a.gridLineWidth, cellBackgroundColor = _a.cellBackgroundColor, getCanvasLayers = _a.getCanvasLayers, getColumnHeaderCanvasLayer = _a.getColumnHeaderCanvasLayer, getRowHeaderCanvasLayer = _a.getRowHeaderCanvasLayer, getSheetName = _a.getSheetName, getCellOffsetFromCoords = _a.getCellOffsetFromCoords, getR1C1AddressFromSelection = _a.getR1C1AddressFromSelection, getScrollPosition = _a.getScrollPosition, getViewPort = _a.getViewPort, getRowOffset = _a.getRowOffset, getColumnOffset = _a.getColumnOffset, getSheetDimensions = _a.getSheetDimensions, scrollTo = _a.scrollTo, scrollToCell = _a.scrollToCell, scale = _a.scale, onChangeScale = _a.onChangeScale;
82
+ var sheetId = _a.sheetId, gridLineWidth = _a.gridLineWidth, cellBackgroundColor = _a.cellBackgroundColor, frozenRows = _a.frozenRows, frozenColumns = _a.frozenColumns, getCanvasLayers = _a.getCanvasLayers, getColumnHeaderCanvasLayer = _a.getColumnHeaderCanvasLayer, getRowHeaderCanvasLayer = _a.getRowHeaderCanvasLayer, getSheetName = _a.getSheetName, getR1C1AddressFromSelection = _a.getR1C1AddressFromSelection, getScrollPosition = _a.getScrollPosition, getRowOffset = _a.getRowOffset, getColumnOffset = _a.getColumnOffset, getSheetDimensions = _a.getSheetDimensions, getGridDimensions = _a.getGridDimensions, scrollTo = _a.scrollTo, scale = _a.scale, onChangeScale = _a.onChangeScale;
83
+ // The capture spans renders; this is how it sees the scale the host applied.
84
+ var scaleRef = (0, use_stable_ref_1.useStableRef)(scale);
11
85
  return (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (range, options) {
12
86
  var layers = getCanvasLayers();
13
- if (!(layers === null || layers === void 0 ? void 0 : layers.length))
87
+ var layer = layers === null || layers === void 0 ? void 0 : layers[0];
88
+ if (!layer)
14
89
  return undefined;
15
90
  var _a = options || {}, filename = _a.filename, format = _a.format, includeHeaders = _a.includeHeaders;
16
91
  var baseScale = scale !== null && scale !== void 0 ? scale : 1;
17
- var minExportScale = 0.25;
18
- var waitForPaint = function () {
19
- return new Promise(function (resolve) {
20
- requestAnimationFrame(function () {
21
- requestAnimationFrame(function () { return resolve(); });
22
- });
23
- });
24
- };
25
- var normalizeRangeStart = function (rangeValue) { return (tslib_1.__assign(tslib_1.__assign({}, rangeValue), { startRowIndex: Math.max(1, rangeValue.startRowIndex), startColumnIndex: Math.max(1, rangeValue.startColumnIndex) })); };
26
- var isStartInViewport = function (viewport, normalizedRange) {
27
- return normalizedRange.startRowIndex >= viewport.visibleRowStartIndex &&
28
- normalizedRange.startRowIndex <= viewport.visibleRowStopIndex &&
29
- normalizedRange.startColumnIndex >=
30
- viewport.visibleColumnStartIndex &&
31
- normalizedRange.startColumnIndex <= viewport.visibleColumnStopIndex;
32
- };
33
- var isRangeInViewport = function (viewport, normalizedRange) {
34
- return normalizedRange.startRowIndex >= viewport.visibleRowStartIndex &&
35
- normalizedRange.endRowIndex <= viewport.visibleRowStopIndex &&
36
- normalizedRange.startColumnIndex >=
37
- viewport.visibleColumnStartIndex &&
38
- normalizedRange.endColumnIndex <= viewport.visibleColumnStopIndex;
39
- };
92
+ var normalizedRange = tslib_1.__assign(tslib_1.__assign({}, range), { startRowIndex: Math.max(1, range.startRowIndex), startColumnIndex: Math.max(1, range.startColumnIndex) });
40
93
  var exportRangeAsync = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
41
- var initialScrollCoords, nextScale, didScroll, startX, endX, startY, endY, currentWidth, currentHeight, _a, viewWidth, viewHeight, unscaledWidth, unscaledHeight, fitScale, minScale, normalizedRange, viewport, viewportAfterStart, scrollCoords, tl, br, sheetName, dpr, baseX, baseY, baseWidth, baseHeight, headerWidth, headerHeight, destX, destY, width, height, finalFileName, getFileExtension, bodyCanvas, rowHeaderCanvas, columnHeaderCanvas, canvas, tempCanvas_1, tempCtx, intermediateCanvas, intermediateCtx, bodySourceX, bodySourceY, dataURL, anchor, shouldRestoreScale;
42
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
43
- return tslib_1.__generator(this, function (_q) {
44
- switch (_q.label) {
94
+ var initialScrollCoords, nextScale, startX, endX, startY, endY, currentWidth, currentHeight, _a, viewWidth, viewHeight, unscaledWidth, unscaledHeight, fitScale, minScale, dimensions, headerWidth, headerHeight, rangeLeft, rangeRight, rangeTop, rangeBottom, scrollAtPlan, stops, sheetName, dpr_1, width, height, finalFileName, canvases_1, tempCanvas_1, tempCtx_1, copyPiece, _loop_1, stops_1, stops_1_1, stop_1, e_1_1, dataURL, anchor, shouldRestoreScale, current;
95
+ var e_1, _b;
96
+ var _c, _d, _e, _f, _g, _h;
97
+ return tslib_1.__generator(this, function (_j) {
98
+ switch (_j.label) {
45
99
  case 0:
46
100
  initialScrollCoords = getScrollPosition();
47
101
  nextScale = baseScale;
48
- didScroll = false;
49
102
  if (onChangeScale) {
50
- startX = getColumnOffset(range.startColumnIndex);
51
- endX = getColumnOffset(range.endColumnIndex + 1);
52
- startY = getRowOffset(range.startRowIndex);
53
- endY = getRowOffset(range.endRowIndex + 1);
103
+ startX = getColumnOffset(normalizedRange.startColumnIndex);
104
+ endX = getColumnOffset(normalizedRange.endColumnIndex + 1);
105
+ startY = getRowOffset(normalizedRange.startRowIndex);
106
+ endY = getRowOffset(normalizedRange.endRowIndex + 1);
54
107
  currentWidth = Math.max(endX - startX, 0);
55
108
  currentHeight = Math.max(endY - startY, 0);
56
109
  _a = tslib_1.__read(getSheetDimensions(), 2), viewWidth = _a[0], viewHeight = _a[1];
@@ -58,124 +111,148 @@ var useExportRange = function (_a) {
58
111
  unscaledWidth = currentWidth / baseScale;
59
112
  unscaledHeight = currentHeight / baseScale;
60
113
  fitScale = Math.min(viewWidth / unscaledWidth, viewHeight / unscaledHeight, baseScale);
61
- minScale = Math.min(minExportScale, baseScale);
114
+ minScale = Math.min(MIN_EXPORT_SCALE, baseScale);
62
115
  nextScale = Math.min(Math.max(fitScale, minScale), baseScale);
63
116
  }
64
117
  }
65
- _q.label = 1;
118
+ _j.label = 1;
66
119
  case 1:
67
- _q.trys.push([1, , 10, 15]);
120
+ _j.trys.push([1, , 14, 19]);
68
121
  if (!(onChangeScale && nextScale !== baseScale)) return [3 /*break*/, 3];
69
122
  onChangeScale(nextScale);
70
- return [4 /*yield*/, waitForPaint()];
123
+ return [4 /*yield*/, waitForPaint(layer, function () { return scaleRef.current === nextScale; })];
71
124
  case 2:
72
- _q.sent();
73
- _q.label = 3;
125
+ _j.sent();
126
+ _j.label = 3;
74
127
  case 3:
75
- normalizedRange = normalizeRangeStart(range);
76
- viewport = getViewPort();
77
- if (!!isStartInViewport(viewport, normalizedRange)) return [3 /*break*/, 5];
78
- scrollToCell === null || scrollToCell === void 0 ? void 0 : scrollToCell({
79
- rowIndex: normalizedRange.startRowIndex,
80
- columnIndex: normalizedRange.startColumnIndex,
81
- }, grid_1.Align.start);
82
- didScroll = true;
83
- return [4 /*yield*/, waitForPaint()];
84
- case 4:
85
- _q.sent();
86
- _q.label = 5;
87
- case 5:
88
- viewportAfterStart = getViewPort();
89
- if (!!isRangeInViewport(viewportAfterStart, normalizedRange)) return [3 /*break*/, 7];
90
- scrollToCell === null || scrollToCell === void 0 ? void 0 : scrollToCell({
91
- rowIndex: normalizedRange.endRowIndex,
92
- columnIndex: normalizedRange.endColumnIndex,
93
- }, grid_1.Align.end);
94
- didScroll = true;
95
- return [4 /*yield*/, waitForPaint()];
96
- case 6:
97
- _q.sent();
98
- _q.label = 7;
99
- case 7:
100
- scrollCoords = getScrollPosition();
101
- tl = getCellOffsetFromCoords({
102
- rowIndex: normalizedRange.startRowIndex,
103
- columnIndex: normalizedRange.startColumnIndex,
104
- });
105
- br = getCellOffsetFromCoords({
106
- rowIndex: normalizedRange.endRowIndex,
107
- columnIndex: normalizedRange.endColumnIndex,
108
- });
109
- // @ts-ignore
110
- tl.x -= scrollCoords.scrollLeft;
111
- // @ts-ignore
112
- tl.y -= scrollCoords.scrollTop;
113
- // @ts-ignore
114
- br.x -= scrollCoords.scrollLeft;
115
- // @ts-ignore
116
- br.y -= scrollCoords.scrollTop;
117
- sheetName = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName((_b = range.sheetId) !== null && _b !== void 0 ? _b : sheetId);
118
- dpr = (0, grid_2.getDevicePixelRatio)();
119
- baseX = (_c = tl === null || tl === void 0 ? void 0 : tl.x) !== null && _c !== void 0 ? _c : 0;
120
- baseY = (_d = tl === null || tl === void 0 ? void 0 : tl.y) !== null && _d !== void 0 ? _d : 0;
121
- baseWidth = ((_e = br === null || br === void 0 ? void 0 : br.x) !== null && _e !== void 0 ? _e : 0) - baseX + ((_f = br === null || br === void 0 ? void 0 : br.width) !== null && _f !== void 0 ? _f : 0) + gridLineWidth;
122
- baseHeight = ((_g = br === null || br === void 0 ? void 0 : br.y) !== null && _g !== void 0 ? _g : 0) - baseY + ((_h = br === null || br === void 0 ? void 0 : br.height) !== null && _h !== void 0 ? _h : 0) + gridLineWidth;
128
+ dimensions = getGridDimensions();
129
+ if (!dimensions)
130
+ return [2 /*return*/, undefined];
123
131
  headerWidth = includeHeaders ? getColumnOffset(1) : 0;
124
132
  headerHeight = includeHeaders ? getRowOffset(1) : 0;
125
- destX = headerWidth;
126
- destY = headerHeight;
127
- width = baseWidth + headerWidth;
128
- height = baseHeight + headerHeight;
129
- finalFileName = filename !== null && filename !== void 0 ? filename : (_j = getR1C1AddressFromSelection === null || getR1C1AddressFromSelection === void 0 ? void 0 : getR1C1AddressFromSelection(normalizedRange, sheetName)) === null || _j === void 0 ? void 0 : _j.substring(1);
130
- getFileExtension = function (fmt) {
131
- switch (fmt) {
132
- case "image/jpeg":
133
- case "image/jpg":
134
- return ".jpg";
135
- case "image/webp":
136
- return ".webp";
137
- case "image/png":
138
- default:
139
- return ".png";
140
- }
133
+ rangeLeft = getColumnOffset(normalizedRange.startColumnIndex);
134
+ rangeRight = getColumnOffset(normalizedRange.endColumnIndex + 1) +
135
+ gridLineWidth;
136
+ rangeTop = getRowOffset(normalizedRange.startRowIndex);
137
+ rangeBottom = getRowOffset(normalizedRange.endRowIndex + 1) + gridLineWidth;
138
+ scrollAtPlan = getScrollPosition();
139
+ stops = (0, export_range_tiles_1.planExportStops)({
140
+ x: {
141
+ rangeStart: rangeLeft,
142
+ rangeEnd: rangeRight,
143
+ frozenSize: getColumnOffset(frozenColumns),
144
+ viewportSize: dimensions.containerWidth,
145
+ maxScroll: Math.max(0, dimensions.estimatedTotalWidth - dimensions.containerWidth),
146
+ currentScroll: scrollAtPlan.scrollLeft,
147
+ headerSize: headerWidth,
148
+ },
149
+ y: {
150
+ rangeStart: rangeTop,
151
+ rangeEnd: rangeBottom,
152
+ frozenSize: getRowOffset(frozenRows),
153
+ viewportSize: dimensions.containerHeight,
154
+ maxScroll: Math.max(0, dimensions.estimatedTotalHeight - dimensions.containerHeight),
155
+ currentScroll: scrollAtPlan.scrollTop,
156
+ headerSize: headerHeight,
157
+ },
158
+ });
159
+ sheetName = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName((_c = range.sheetId) !== null && _c !== void 0 ? _c : sheetId);
160
+ dpr_1 = (0, grid_1.getDevicePixelRatio)();
161
+ width = rangeRight - rangeLeft + headerWidth;
162
+ height = rangeBottom - rangeTop + headerHeight;
163
+ finalFileName = filename !== null && filename !== void 0 ? filename : (_d = getR1C1AddressFromSelection === null || getR1C1AddressFromSelection === void 0 ? void 0 : getR1C1AddressFromSelection(normalizedRange, sheetName)) === null || _d === void 0 ? void 0 : _d.substring(1);
164
+ canvases_1 = {
165
+ body: layer.getCanvas()._canvas,
166
+ rowHeader: includeHeaders
167
+ ? (_f = (_e = getRowHeaderCanvasLayer()) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.getCanvas()._canvas
168
+ : null,
169
+ columnHeader: includeHeaders
170
+ ? (_h = (_g = getColumnHeaderCanvasLayer()) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h.getCanvas()._canvas
171
+ : null,
141
172
  };
142
- bodyCanvas = (_k = layers[0]) === null || _k === void 0 ? void 0 : _k.getCanvas()._canvas;
143
- rowHeaderCanvas = includeHeaders
144
- ? (_m = (_l = getRowHeaderCanvasLayer()) === null || _l === void 0 ? void 0 : _l[0]) === null || _m === void 0 ? void 0 : _m.getCanvas()._canvas
145
- : null;
146
- columnHeaderCanvas = includeHeaders
147
- ? (_p = (_o = getColumnHeaderCanvasLayer()) === null || _o === void 0 ? void 0 : _o[0]) === null || _p === void 0 ? void 0 : _p.getCanvas()._canvas
148
- : null;
149
- if (!bodyCanvas)
173
+ if (!canvases_1.body)
150
174
  return [2 /*return*/, undefined];
151
- canvas = bodyCanvas;
152
175
  tempCanvas_1 = document.createElement("canvas");
153
- tempCanvas_1.width = width * dpr;
154
- tempCanvas_1.height = height * dpr;
155
- tempCtx = tempCanvas_1.getContext("2d");
156
- intermediateCanvas = document.createElement("canvas");
157
- intermediateCanvas.width = width * dpr;
158
- intermediateCanvas.height = height * dpr;
159
- intermediateCtx = intermediateCanvas.getContext("2d");
160
- bodySourceX = baseX;
161
- bodySourceY = baseY;
162
- if (intermediateCtx) {
163
- intermediateCtx.drawImage(canvas, bodySourceX * dpr, bodySourceY * dpr, baseWidth * dpr, baseHeight * dpr, destX * dpr, destY * dpr, baseWidth * dpr, baseHeight * dpr);
176
+ tempCanvas_1.width = width * dpr_1;
177
+ tempCanvas_1.height = height * dpr_1;
178
+ tempCtx_1 = tempCanvas_1.getContext("2d");
179
+ if (tempCtx_1) {
180
+ tempCtx_1.fillStyle = cellBackgroundColor;
181
+ tempCtx_1.fillRect(0, 0, tempCanvas_1.width, tempCanvas_1.height);
164
182
  }
165
- if (tempCtx) {
166
- tempCtx.fillStyle = cellBackgroundColor;
167
- tempCtx.fillRect(0, 0, tempCanvas_1.width, tempCanvas_1.height);
168
- tempCtx.drawImage(intermediateCanvas, 0, 0);
169
- if (includeHeaders) {
170
- if (columnHeaderCanvas) {
171
- tempCtx.drawImage(columnHeaderCanvas, baseX * dpr, 0, baseWidth * dpr, headerHeight * dpr, destX * dpr, 0, baseWidth * dpr, headerHeight * dpr);
172
- }
173
- if (rowHeaderCanvas) {
174
- tempCtx.drawImage(rowHeaderCanvas, 0, baseY * dpr, headerWidth * dpr, baseHeight * dpr, 0, destY * dpr, headerWidth * dpr, baseHeight * dpr);
183
+ copyPiece = function (piece, landed) {
184
+ var source = canvases_1[piece.canvas];
185
+ if (!tempCtx_1 || !source)
186
+ return;
187
+ var sx = (0, export_range_tiles_1.sourceOffset)(piece.x, landed.scrollLeft);
188
+ var sy = (0, export_range_tiles_1.sourceOffset)(piece.y, landed.scrollTop);
189
+ tempCtx_1.drawImage(source, sx * dpr_1, sy * dpr_1, piece.x.size * dpr_1, piece.y.size * dpr_1, piece.x.dest * dpr_1, piece.y.dest * dpr_1, piece.x.size * dpr_1, piece.y.size * dpr_1);
190
+ };
191
+ _loop_1 = function (stop_1) {
192
+ var target, landed, _k, _l, piece;
193
+ var e_2, _m;
194
+ return tslib_1.__generator(this, function (_o) {
195
+ switch (_o.label) {
196
+ case 0:
197
+ target = {
198
+ scrollTop: stop_1.scrollTop,
199
+ scrollLeft: stop_1.scrollLeft,
200
+ };
201
+ if (!!isAtScroll(getScrollPosition(), target)) return [3 /*break*/, 2];
202
+ scrollTo(target, true);
203
+ return [4 /*yield*/, waitForPaint(layer, function () {
204
+ return isAtScroll(getScrollPosition(), target);
205
+ })];
206
+ case 1:
207
+ _o.sent();
208
+ _o.label = 2;
209
+ case 2:
210
+ landed = getScrollPosition();
211
+ try {
212
+ for (_k = (e_2 = void 0, tslib_1.__values(stop_1.pieces)), _l = _k.next(); !_l.done; _l = _k.next()) {
213
+ piece = _l.value;
214
+ copyPiece(piece, landed);
215
+ }
216
+ }
217
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
218
+ finally {
219
+ try {
220
+ if (_l && !_l.done && (_m = _k.return)) _m.call(_k);
221
+ }
222
+ finally { if (e_2) throw e_2.error; }
223
+ }
224
+ return [2 /*return*/];
175
225
  }
176
- }
226
+ });
227
+ };
228
+ _j.label = 4;
229
+ case 4:
230
+ _j.trys.push([4, 9, 10, 11]);
231
+ stops_1 = tslib_1.__values(stops), stops_1_1 = stops_1.next();
232
+ _j.label = 5;
233
+ case 5:
234
+ if (!!stops_1_1.done) return [3 /*break*/, 8];
235
+ stop_1 = stops_1_1.value;
236
+ return [5 /*yield**/, _loop_1(stop_1)];
237
+ case 6:
238
+ _j.sent();
239
+ _j.label = 7;
240
+ case 7:
241
+ stops_1_1 = stops_1.next();
242
+ return [3 /*break*/, 5];
243
+ case 8: return [3 /*break*/, 11];
244
+ case 9:
245
+ e_1_1 = _j.sent();
246
+ e_1 = { error: e_1_1 };
247
+ return [3 /*break*/, 11];
248
+ case 10:
249
+ try {
250
+ if (stops_1_1 && !stops_1_1.done && (_b = stops_1.return)) _b.call(stops_1);
177
251
  }
178
- if (!(format === "clipboard")) return [3 /*break*/, 9];
252
+ finally { if (e_1) throw e_1.error; }
253
+ return [7 /*endfinally*/];
254
+ case 11:
255
+ if (!(format === "clipboard")) return [3 /*break*/, 13];
179
256
  return [4 /*yield*/, new Promise(function (resolve, reject) {
180
257
  tempCanvas_1.toBlob(function (blob) {
181
258
  if (!blob) {
@@ -186,10 +263,10 @@ var useExportRange = function (_a) {
186
263
  navigator.clipboard.write([item]).then(resolve).catch(reject);
187
264
  }, "image/png");
188
265
  })];
189
- case 8:
190
- _q.sent();
266
+ case 12:
267
+ _j.sent();
191
268
  return [2 /*return*/, undefined];
192
- case 9:
269
+ case 13:
193
270
  if (format === "blob") {
194
271
  return [2 /*return*/, new Promise(function (resolve, reject) {
195
272
  tempCanvas_1.toBlob(function (blob) {
@@ -214,23 +291,27 @@ var useExportRange = function (_a) {
214
291
  blob === null || blob === void 0 ? void 0 : blob.arrayBuffer().then(resolve);
215
292
  });
216
293
  })];
217
- case 10:
294
+ case 14:
218
295
  shouldRestoreScale = onChangeScale && nextScale !== baseScale;
219
- if (!shouldRestoreScale) return [3 /*break*/, 12];
296
+ if (!shouldRestoreScale) return [3 /*break*/, 16];
220
297
  onChangeScale(baseScale);
221
- return [4 /*yield*/, waitForPaint()];
222
- case 11:
223
- _q.sent();
224
- _q.label = 12;
225
- case 12:
226
- if (!(didScroll || shouldRestoreScale)) return [3 /*break*/, 14];
227
- scrollTo === null || scrollTo === void 0 ? void 0 : scrollTo(initialScrollCoords, true);
228
- return [4 /*yield*/, waitForPaint()];
229
- case 13:
230
- _q.sent();
231
- _q.label = 14;
232
- case 14: return [7 /*endfinally*/];
233
- case 15: return [2 /*return*/];
298
+ return [4 /*yield*/, waitForPaint(layer, function () { return scaleRef.current === baseScale; })];
299
+ case 15:
300
+ _j.sent();
301
+ _j.label = 16;
302
+ case 16:
303
+ current = getScrollPosition();
304
+ if (!(current.scrollTop !== initialScrollCoords.scrollTop ||
305
+ current.scrollLeft !== initialScrollCoords.scrollLeft)) return [3 /*break*/, 18];
306
+ scrollTo(initialScrollCoords, true);
307
+ return [4 /*yield*/, waitForPaint(layer, function () {
308
+ return isAtScroll(getScrollPosition(), initialScrollCoords);
309
+ })];
310
+ case 17:
311
+ _j.sent();
312
+ _j.label = 18;
313
+ case 18: return [7 /*endfinally*/];
314
+ case 19: return [2 /*return*/];
234
315
  }
235
316
  });
236
317
  }); };
@@ -239,21 +320,22 @@ var useExportRange = function (_a) {
239
320
  sheetId,
240
321
  gridLineWidth,
241
322
  cellBackgroundColor,
323
+ frozenRows,
324
+ frozenColumns,
242
325
  getCanvasLayers,
243
- getCellOffsetFromCoords,
244
326
  getSheetName,
245
327
  getR1C1AddressFromSelection,
246
328
  getScrollPosition,
247
- getViewPort,
248
329
  getColumnHeaderCanvasLayer,
249
330
  getRowHeaderCanvasLayer,
250
331
  getRowOffset,
251
332
  getColumnOffset,
252
333
  getSheetDimensions,
334
+ getGridDimensions,
253
335
  scrollTo,
254
- scrollToCell,
255
336
  scale,
256
337
  onChangeScale,
338
+ scaleRef,
257
339
  ]));
258
340
  };
259
341
  exports.useExportRange = useExportRange;
@@ -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;AAI3C,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,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,oWAoB7B,oBAAoB,aAiBX,iBAAiB,sBAyI5B,CAAC;AA+BF,eAAO,MAAM,kBAAkB,GAAI,kCAIhC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,sBAS9D,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"}
@@ -7,7 +7,7 @@ var react_1 = tslib_1.__importStar(require("react"));
7
7
  var atoms_1 = require("../atoms");
8
8
  var helpers_1 = require("../helpers");
9
9
  var useGridChildren = function (_a) {
10
- var stickyEditor = _a.stickyEditor, editorComponent = _a.editorComponent, chartComponents = _a.chartComponents, embedComponents = _a.embedComponents, slicerComponents = _a.slicerComponents, pivotPlaceholders = _a.pivotPlaceholders, tableResizers = _a.tableResizers, hiddenColumnMarkers = _a.hiddenColumnMarkers, frozenHiddenColumnMarkers = _a.frozenHiddenColumnMarkers, hiddenRowMarkers = _a.hiddenRowMarkers, frozenHiddenRowMarkers = _a.frozenHiddenRowMarkers, _b = _a.gridLineWidth, gridLineWidth = _b === void 0 ? 1 : _b, frozenColumns = _a.frozenColumns, frozenRows = _a.frozenRows, headerMenuComponent = _a.headerMenuComponent, isHeaderMenuInFrozenColumn = _a.isHeaderMenuInFrozenColumn, popoverRange = _a.popoverRange, popoverComponent = _a.popoverComponent, cellExpandComponent = _a.cellExpandComponent;
10
+ var stickyEditor = _a.stickyEditor, editorComponent = _a.editorComponent, chartComponents = _a.chartComponents, embedComponents = _a.embedComponents, slicerComponents = _a.slicerComponents, pivotPlaceholders = _a.pivotPlaceholders, tableResizers = _a.tableResizers, hiddenColumnMarkers = _a.hiddenColumnMarkers, frozenHiddenColumnMarkers = _a.frozenHiddenColumnMarkers, hiddenRowMarkers = _a.hiddenRowMarkers, frozenHiddenRowMarkers = _a.frozenHiddenRowMarkers, _b = _a.gridLineWidth, gridLineWidth = _b === void 0 ? 1 : _b, frozenColumns = _a.frozenColumns, frozenRows = _a.frozenRows, headerMenuComponent = _a.headerMenuComponent, isHeaderMenuInFrozenColumn = _a.isHeaderMenuInFrozenColumn, popoverRange = _a.popoverRange, popoverComponent = _a.popoverComponent, cellExpandComponent = _a.cellExpandComponent, arrowComponents = _a.arrowComponents;
11
11
  var editingCellCoordinate = (0, atoms_1.useEditingCellCoordinate)();
12
12
  // Quite a bit of logic for non sticky editor
13
13
  // Remove if majority dont use this
@@ -47,7 +47,8 @@ var useGridChildren = function (_a) {
47
47
  slicerComponents.body,
48
48
  pivotPlaceholders,
49
49
  popoverPlacement === "body" ? popoverComponent : null,
50
- cellExpandComponent)),
50
+ cellExpandComponent,
51
+ arrowComponents)),
51
52
  react_1.default.createElement(exports.StyledGridChildren, { style: {
52
53
  left: frozenColumnWidth + gridLineWidth,
53
54
  } },
@@ -109,6 +110,7 @@ var useGridChildren = function (_a) {
109
110
  popoverComponent,
110
111
  popoverPlacement,
111
112
  cellExpandComponent,
113
+ arrowComponents,
112
114
  ]);
113
115
  };
114
116
  exports.useGridChildren = useGridChildren;
@@ -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,SAsCvD,CAAC"}
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"}
@@ -19,8 +19,11 @@ var useNavigateToSheetRange = function (_a) {
19
19
  };
20
20
  // Switch to new sheet
21
21
  onChangeActiveSheet === null || onChangeActiveSheet === void 0 ? void 0 : onChangeActiveSheet(sheetRange.sheetId);
22
- if (allowSelection && !(0, selections_1.isSheetRangeACell)(sheetRange)) {
23
- onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetRange.sheetId, [{ range: sheetRange }]);
22
+ // A single-cell target clears the selection, as a click on that cell
23
+ // does; leaving the previous range selected would send the next
24
+ // paste there instead of to the cell the user navigated to.
25
+ if (allowSelection) {
26
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetRange.sheetId, (0, selections_1.isSheetRangeACell)(sheetRange) ? [] : [{ range: sheetRange }]);
24
27
  }
25
28
  // Set active cell
26
29
  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":"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"}
1
+ {"version":3,"file":"use-sizer.d.ts","sourceRoot":"","sources":["../../../hooks/use-sizer.ts"],"names":[],"mappings":"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"}