@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.
Files changed (115) hide show
  1. package/dist/cjs/api/selections.d.ts +15 -1
  2. package/dist/cjs/api/selections.d.ts.map +1 -1
  3. package/dist/cjs/api/selections.js +12 -2
  4. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  5. package/dist/cjs/components/canvas-grid/index.js +88 -70
  6. package/dist/cjs/components/canvas-grid/typings.d.ts +40 -1
  7. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  8. package/dist/cjs/components/cell/cell-text-runs.d.ts +10 -3
  9. package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
  10. package/dist/cjs/components/cell/cell-text-runs.js +21 -9
  11. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  12. package/dist/cjs/components/cell/index.js +9 -5
  13. package/dist/cjs/components/cell/line-height.d.ts +22 -0
  14. package/dist/cjs/components/cell/line-height.d.ts.map +1 -0
  15. package/dist/cjs/components/cell/line-height.js +32 -0
  16. package/dist/cjs/components/cell/typings.d.ts +8 -2
  17. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  18. package/dist/cjs/hooks/export-range-tiles.d.ts +81 -0
  19. package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
  20. package/dist/cjs/hooks/export-range-tiles.js +171 -0
  21. package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
  22. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  23. package/dist/cjs/hooks/use-cell-renderer.js +3 -2
  24. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
  25. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  26. package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
  27. package/dist/cjs/hooks/use-editable.d.ts +8 -1
  28. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  29. package/dist/cjs/hooks/use-editable.js +6 -1
  30. package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
  31. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  32. package/dist/cjs/hooks/use-editor-submit.js +36 -16
  33. package/dist/cjs/hooks/use-export-range.d.ts +14 -6
  34. package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
  35. package/dist/cjs/hooks/use-export-range.js +240 -158
  36. package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
  37. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  38. package/dist/cjs/hooks/use-grid-children.js +4 -2
  39. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  40. package/dist/cjs/hooks/use-keyboard-handler.js +13 -6
  41. package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  42. package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
  43. package/dist/cjs/hooks/use-resize-observer.d.ts.map +1 -1
  44. package/dist/cjs/hooks/use-resize-observer.js +43 -11
  45. package/dist/cjs/hooks/use-selection-renderer.d.ts +5 -1
  46. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  47. package/dist/cjs/hooks/use-selection-renderer.js +8 -2
  48. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  49. package/dist/cjs/hooks/use-selection.js +4 -2
  50. package/dist/cjs/hooks/use-sizer.d.ts +8 -2
  51. package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
  52. package/dist/cjs/hooks/use-sizer.js +54 -33
  53. package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
  54. package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
  55. package/dist/cjs/providers/spreadsheet-provider.js +7 -5
  56. package/dist/cjs/release-date.js +1 -1
  57. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  58. package/dist/esm/api/selections.d.ts +15 -1
  59. package/dist/esm/api/selections.d.ts.map +1 -1
  60. package/dist/esm/api/selections.js +11 -2
  61. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  62. package/dist/esm/components/canvas-grid/index.js +30 -12
  63. package/dist/esm/components/canvas-grid/typings.d.ts +40 -1
  64. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  65. package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
  66. package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
  67. package/dist/esm/components/cell/cell-text-runs.js +14 -9
  68. package/dist/esm/components/cell/index.d.ts.map +1 -1
  69. package/dist/esm/components/cell/index.js +7 -3
  70. package/dist/esm/components/cell/line-height.d.ts +22 -0
  71. package/dist/esm/components/cell/line-height.d.ts.map +1 -0
  72. package/dist/esm/components/cell/line-height.js +25 -0
  73. package/dist/esm/components/cell/typings.d.ts +8 -2
  74. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  75. package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
  76. package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
  77. package/dist/esm/hooks/export-range-tiles.js +126 -0
  78. package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
  79. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  80. package/dist/esm/hooks/use-cell-renderer.js +3 -2
  81. package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
  82. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  83. package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
  84. package/dist/esm/hooks/use-editable.d.ts +8 -1
  85. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  86. package/dist/esm/hooks/use-editable.js +6 -1
  87. package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
  88. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  89. package/dist/esm/hooks/use-editor-submit.js +24 -6
  90. package/dist/esm/hooks/use-export-range.d.ts +14 -6
  91. package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
  92. package/dist/esm/hooks/use-export-range.js +158 -120
  93. package/dist/esm/hooks/use-grid-children.d.ts +4 -1
  94. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  95. package/dist/esm/hooks/use-grid-children.js +4 -2
  96. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  97. package/dist/esm/hooks/use-keyboard-handler.js +13 -6
  98. package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  99. package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
  100. package/dist/esm/hooks/use-resize-observer.d.ts.map +1 -1
  101. package/dist/esm/hooks/use-resize-observer.js +38 -9
  102. package/dist/esm/hooks/use-selection-renderer.d.ts +5 -1
  103. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  104. package/dist/esm/hooks/use-selection-renderer.js +8 -2
  105. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  106. package/dist/esm/hooks/use-selection.js +4 -2
  107. package/dist/esm/hooks/use-sizer.d.ts +8 -2
  108. package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
  109. package/dist/esm/hooks/use-sizer.js +53 -31
  110. package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
  111. package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
  112. package/dist/esm/providers/spreadsheet-provider.js +8 -6
  113. package/dist/esm/release-date.js +1 -1
  114. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  115. package/package.json +6 -6
@@ -94,7 +94,7 @@ var planEntryFill = function (value, activeCell, selections) {
94
94
  };
95
95
  exports.planEntryFill = planEntryFill;
96
96
  var useEditorSubmit = function (_a) {
97
- var sheetId = _a.sheetId, onChangeActiveSheet = _a.onChangeActiveSheet, setActiveCell = _a.setActiveCell, onChange = _a.onChange, onComplete = _a.onComplete, getCommitValidation = _a.getCommitValidation, showValidationAlert = _a.showValidationAlert, selections = _a.selections, onChangeBatch = _a.onChangeBatch, formulaLocale = _a.formulaLocale;
97
+ var sheetId = _a.sheetId, onChangeActiveSheet = _a.onChangeActiveSheet, setActiveCell = _a.setActiveCell, onChange = _a.onChange, onComplete = _a.onComplete, getCommitValidation = _a.getCommitValidation, showValidationAlert = _a.showValidationAlert, selections = _a.selections, onChangeBatch = _a.onChangeBatch, batchHistory = _a.batchHistory, formulaLocale = _a.formulaLocale;
98
98
  var _b = tslib_1.__read((0, formula_mode_atom_1.useFormulaMode)(), 2), formulaMode = _b[0], setFormulaMode = _b[1];
99
99
  var _c = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), _ = _c[0], setEditingCellCoordinate = _c[1];
100
100
  var setActiveEditor = (0, atoms_1.useSetActiveEditor)();
@@ -124,25 +124,44 @@ var useEditorSubmit = function (_a) {
124
124
  onComplete === null || onComplete === void 0 ? void 0 : onComplete();
125
125
  };
126
126
  commit = function () {
127
- var e_3, _a;
128
- var _b;
129
- onChange === null || onChange === void 0 ? void 0 : onChange(editingSheetId, activeCell, value, textFormatRuns, previousValue, isDirty);
127
+ var _a;
128
+ var writeActiveCell = function () {
129
+ return onChange === null || onChange === void 0 ? void 0 : onChange(editingSheetId, activeCell, value, textFormatRuns, previousValue, isDirty);
130
+ };
130
131
  // Ctrl+Enter: the same entry into every other selected cell (formulas shift per cell).
131
132
  // Explicit per-cell values — never a read-back of the cell just written — so the spread
132
- // is correct even when the engine applies `onChange` asynchronously (legacy setState).
133
- if ((options === null || options === void 0 ? void 0 : options.fillSelection) && onChangeBatch) {
134
- try {
135
- for (var _c = tslib_1.__values((0, exports.planEntryFill)(value, activeCell, (_b = selectionsRef.current) !== null && _b !== void 0 ? _b : [])), _d = _c.next(); !_d.done; _d = _c.next()) {
136
- var write = _d.value;
137
- onChangeBatch(editingSheetId, write.range, write.values);
138
- }
139
- }
140
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
141
- finally {
133
+ // is correct even when the engine applies `onChange` asynchronously (legacy setState),
134
+ // and so the writes can share one history batch (the rnc batcher defers them all).
135
+ var fillWrites = (options === null || options === void 0 ? void 0 : options.fillSelection) && onChangeBatch
136
+ ? (0, exports.planEntryFill)(value, activeCell, (_a = selectionsRef.current) !== null && _a !== void 0 ? _a : [])
137
+ : [];
138
+ if (fillWrites.length === 0) {
139
+ writeActiveCell();
140
+ }
141
+ else {
142
+ // One gesture, one undo entry: the active cell and every rectangle together.
143
+ var writeAll = function () {
144
+ var e_3, _a;
145
+ writeActiveCell();
142
146
  try {
143
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
147
+ for (var fillWrites_1 = tslib_1.__values(fillWrites), fillWrites_1_1 = fillWrites_1.next(); !fillWrites_1_1.done; fillWrites_1_1 = fillWrites_1.next()) {
148
+ var write = fillWrites_1_1.value;
149
+ onChangeBatch === null || onChangeBatch === void 0 ? void 0 : onChangeBatch(editingSheetId, write.range, write.values);
150
+ }
144
151
  }
145
- finally { if (e_3) throw e_3.error; }
152
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
153
+ finally {
154
+ try {
155
+ if (fillWrites_1_1 && !fillWrites_1_1.done && (_a = fillWrites_1.return)) _a.call(fillWrites_1);
156
+ }
157
+ finally { if (e_3) throw e_3.error; }
158
+ }
159
+ };
160
+ if (batchHistory) {
161
+ batchHistory(writeAll);
162
+ }
163
+ else {
164
+ writeAll();
146
165
  }
147
166
  }
148
167
  // Switch to active sheet
@@ -208,6 +227,7 @@ var useEditorSubmit = function (_a) {
208
227
  getCommitValidation,
209
228
  showValidationAlert,
210
229
  onChangeBatch,
230
+ batchHistory,
211
231
  formulaLocale,
212
232
  ]);
213
233
  };
@@ -1,24 +1,32 @@
1
- import type { CellInterface, CellPosition, ScrollCoords, ViewPortProps } from "@rowsncolumns/grid";
1
+ import type { ScrollCoords } from "@rowsncolumns/grid";
2
2
  import type { Layer } from "konva/lib/Layer";
3
3
  import type { CanvasGridMethods, CanvasGridProps, ExportFormats } from "../components/canvas-grid/typings";
4
4
  import type { SheetRange } from "../types";
5
+ export type GridDimensions = {
6
+ containerWidth: number;
7
+ containerHeight: number;
8
+ estimatedTotalWidth: number;
9
+ estimatedTotalHeight: number;
10
+ };
5
11
  export type UseExportRangeProps = {
6
12
  sheetId: number;
7
13
  gridLineWidth: number;
8
14
  cellBackgroundColor: string;
15
+ /** Frozen row count as the grid sees it (the header row included). */
16
+ frozenRows: number;
17
+ /** Frozen column count as the grid sees it (the header column included). */
18
+ frozenColumns: number;
9
19
  getCanvasLayers: () => Layer[] | undefined;
10
20
  getRowHeaderCanvasLayer: () => Layer[] | undefined;
11
21
  getColumnHeaderCanvasLayer: () => Layer[] | undefined;
12
22
  getSheetName: CanvasGridProps["getSheetName"];
13
- getCellOffsetFromCoords(cell: CellInterface): CellPosition | undefined;
14
23
  getR1C1AddressFromSelection: CanvasGridMethods["getR1C1AddressFromSelection"];
15
24
  getScrollPosition(): ScrollCoords;
16
- getViewPort(): ViewPortProps;
17
25
  getRowOffset(rowIndex: number): number;
18
26
  getColumnOffset(columnIndex: number): number;
19
27
  getSheetDimensions(): readonly [number, number];
20
- scrollTo?(scrollCoords: ScrollCoords, immediate?: boolean): void;
21
- scrollToCell?: CanvasGridMethods["scrollToCell"];
28
+ getGridDimensions(): GridDimensions | undefined;
29
+ scrollTo(scrollCoords: ScrollCoords, immediate?: boolean): void;
22
30
  scale?: number;
23
31
  onChangeScale?(scale: number): void;
24
32
  };
@@ -32,5 +40,5 @@ export type ExportRangeOutput = {
32
40
  (range: SheetRange, options: ExportRangeOptions<"clipboard">): Promise<void>;
33
41
  (range: SheetRange, options?: ExportRangeOptions): Promise<ArrayBuffer | Blob | void> | undefined;
34
42
  };
35
- export declare const useExportRange: ({ sheetId, gridLineWidth, cellBackgroundColor, getCanvasLayers, getColumnHeaderCanvasLayer, getRowHeaderCanvasLayer, getSheetName, getCellOffsetFromCoords, getR1C1AddressFromSelection, getScrollPosition, getViewPort, getRowOffset, getColumnOffset, getSheetDimensions, scrollTo, scrollToCell, scale, onChangeScale, }: UseExportRangeProps) => ExportRangeOutput;
43
+ export declare const useExportRange: ({ sheetId, gridLineWidth, cellBackgroundColor, frozenRows, frozenColumns, getCanvasLayers, getColumnHeaderCanvasLayer, getRowHeaderCanvasLayer, getSheetName, getR1C1AddressFromSelection, getScrollPosition, getRowOffset, getColumnOffset, getSheetDimensions, getGridDimensions, scrollTo, scale, onChangeScale, }: UseExportRangeProps) => ExportRangeOutput;
36
44
  //# sourceMappingURL=use-export-range.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-export-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-export-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IACnD,0BAA0B,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IACtD,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;IAC9C,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACvE,2BAA2B,EAAE,iBAAiB,CAAC,6BAA6B,CAAC,CAAC;IAC9E,iBAAiB,IAAI,YAAY,CAAC;IAClC,WAAW,IAAI,aAAa,CAAC;IAC7B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,kBAAkB,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjE,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAAI;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAC5C,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,GAClC,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,6TAmB5B,mBAAmB,KAAG,iBAkTxB,CAAC"}
1
+ {"version":3,"file":"use-export-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-export-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU3C,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IACnD,0BAA0B,EAAE,MAAM,KAAK,EAAE,GAAG,SAAS,CAAC;IACtD,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;IAC9C,2BAA2B,EAAE,iBAAiB,CAAC,6BAA6B,CAAC,CAAC;IAC9E,iBAAiB,IAAI,YAAY,CAAC;IAClC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,kBAAkB,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAAI;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAC5C,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,GAClC,SAAS,CAAC;CACf,CAAC;AA2EF,eAAO,MAAM,cAAc,GAAI,uTAmB5B,mBAAmB,KAAG,iBAoPxB,CAAC"}
@@ -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;