@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.
Files changed (85) hide show
  1. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  2. package/dist/cjs/components/canvas-grid/index.js +85 -70
  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/hooks/export-range-tiles.d.ts +81 -0
  16. package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
  17. package/dist/cjs/hooks/export-range-tiles.js +171 -0
  18. package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
  19. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  20. package/dist/cjs/hooks/use-cell-renderer.js +3 -2
  21. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
  22. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  23. package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
  24. package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
  25. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  26. package/dist/cjs/hooks/use-editor-submit.js +36 -16
  27. package/dist/cjs/hooks/use-export-range.d.ts +14 -6
  28. package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
  29. package/dist/cjs/hooks/use-export-range.js +240 -158
  30. package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
  31. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  32. package/dist/cjs/hooks/use-grid-children.js +4 -2
  33. package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  34. package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
  35. package/dist/cjs/hooks/use-sizer.d.ts +8 -2
  36. package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
  37. package/dist/cjs/hooks/use-sizer.js +54 -33
  38. package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
  39. package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
  40. package/dist/cjs/providers/spreadsheet-provider.js +7 -5
  41. package/dist/cjs/release-date.js +1 -1
  42. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  43. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  44. package/dist/esm/components/canvas-grid/index.js +27 -12
  45. package/dist/esm/components/canvas-grid/typings.d.ts +18 -1
  46. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  47. package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
  48. package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
  49. package/dist/esm/components/cell/cell-text-runs.js +14 -9
  50. package/dist/esm/components/cell/index.d.ts.map +1 -1
  51. package/dist/esm/components/cell/index.js +7 -3
  52. package/dist/esm/components/cell/line-height.d.ts +22 -0
  53. package/dist/esm/components/cell/line-height.d.ts.map +1 -0
  54. package/dist/esm/components/cell/line-height.js +25 -0
  55. package/dist/esm/components/cell/typings.d.ts +8 -2
  56. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  57. package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
  58. package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
  59. package/dist/esm/hooks/export-range-tiles.js +126 -0
  60. package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
  61. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  62. package/dist/esm/hooks/use-cell-renderer.js +3 -2
  63. package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
  64. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  65. package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
  66. package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
  67. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  68. package/dist/esm/hooks/use-editor-submit.js +24 -6
  69. package/dist/esm/hooks/use-export-range.d.ts +14 -6
  70. package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
  71. package/dist/esm/hooks/use-export-range.js +158 -120
  72. package/dist/esm/hooks/use-grid-children.d.ts +4 -1
  73. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  74. package/dist/esm/hooks/use-grid-children.js +4 -2
  75. package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  76. package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
  77. package/dist/esm/hooks/use-sizer.d.ts +8 -2
  78. package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
  79. package/dist/esm/hooks/use-sizer.js +53 -31
  80. package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
  81. package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
  82. package/dist/esm/providers/spreadsheet-provider.js +8 -6
  83. package/dist/esm/release-date.js +1 -1
  84. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  85. package/package.json +6 -6
@@ -20,29 +20,38 @@ var defaultGetText = function () { return ""; };
20
20
  * Dynamically resize columns after user has scrolled down/view port changed ?
21
21
  */
22
22
  var useSizer = function (_a) {
23
- var getTextFormat = _a.getTextFormat, getTextFormatRuns = _a.getTextFormatRuns, _b = _a.initialVisibleRows, initialVisibleRows = _b === void 0 ? 20 : _b, _c = _a.initialVisibleColumns, initialVisibleColumns = _c === void 0 ? 20 : _c, _d = _a.cellVerticalSpacing, cellVerticalSpacing = _d === void 0 ? 0 : _d, _e = _a.cellHorizontalSpacing, cellHorizontalSpacing = _e === void 0 ? 10 : _e, _f = _a.minColumnDimension, minColumnDimension = _f === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _f, _g = _a.minRowDimension, minRowDimension = _g === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _g, _h = _a.resizeStrategy, resizeStrategy = _h === void 0 ? "lazy" : _h, rowCount = _a.rowCount, columnCount = _a.columnCount, getDataRowCount = _a.getDataRowCount, _j = _a.fontFamily, fontFamily = _j === void 0 ? "Arial" : _j, _k = _a.fontSize, fontSize = _k === void 0 ? 12 : _k, _l = _a.fontWeight, fontWeight = _l === void 0 ? "" : _l, _m = _a.fontStyle, fontStyle = _m === void 0 ? "" : _m, _o = _a.frozenRows, frozenRows = _o === void 0 ? 0 : _o, _p = _a.frozenColumns, frozenColumns = _p === void 0 ? 0 : _p, _q = _a.scale, scale = _q === void 0 ? 1 : _q, isHiddenRow = _a.isHiddenRow, isHiddenColumn = _a.isHiddenColumn, _r = _a.getTextValue, getTextValue = _r === void 0 ? defaultGetText : _r, getSpacing = _a.getSpacing, getViewPort = _a.getViewPort, shouldWrapCell = _a.shouldWrapCell, columnWidth = _a.columnWidth, getActualCellWidth = _a.getActualCellWidth;
23
+ var getTextFormat = _a.getTextFormat, getTextFormatRuns = _a.getTextFormatRuns, _b = _a.initialVisibleRows, initialVisibleRows = _b === void 0 ? 20 : _b, _c = _a.initialVisibleColumns, initialVisibleColumns = _c === void 0 ? 20 : _c, _d = _a.cellVerticalSpacing, cellVerticalSpacing = _d === void 0 ? 0 : _d, _e = _a.cellHorizontalSpacing, cellHorizontalSpacing = _e === void 0 ? 10 : _e, _f = _a.minColumnDimension, minColumnDimension = _f === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _f, _g = _a.minRowDimension, minRowDimension = _g === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _g, _h = _a.resizeStrategy, resizeStrategy = _h === void 0 ? "lazy" : _h, rowCount = _a.rowCount, columnCount = _a.columnCount, getDataRowCount = _a.getDataRowCount, _j = _a.fontFamily, fontFamily = _j === void 0 ? "Arial" : _j, _k = _a.fontSize, fontSize = _k === void 0 ? 12 : _k, _l = _a.fontWeight, fontWeight = _l === void 0 ? "" : _l, _m = _a.fontStyle, fontStyle = _m === void 0 ? "" : _m, _o = _a.lineHeightMode, lineHeightMode = _o === void 0 ? "fontMetrics" : _o, _p = _a.frozenRows, frozenRows = _p === void 0 ? 0 : _p, _q = _a.frozenColumns, frozenColumns = _q === void 0 ? 0 : _q, _r = _a.scale, scale = _r === void 0 ? 1 : _r, isHiddenRow = _a.isHiddenRow, isHiddenColumn = _a.isHiddenColumn, _s = _a.getTextValue, getTextValue = _s === void 0 ? defaultGetText : _s, getSpacing = _a.getSpacing, getViewPort = _a.getViewPort, shouldWrapCell = _a.shouldWrapCell, columnWidth = _a.columnWidth, getActualCellWidth = _a.getActualCellWidth;
24
24
  var autoSizer = (0, react_1.useRef)(grid_1.autoSizerCanvas);
25
25
  var scaleRef = (0, react_1.useRef)(scale);
26
26
  // Keep scale in sync
27
27
  scaleRef.current = scale;
28
28
  /* Update any styles, fonts if necessary */
29
29
  (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
30
- autoSizer.current.setFont({ fontFamily: fontFamily, fontSize: fontSize, fontWeight: fontWeight, fontStyle: fontStyle });
31
- }, [fontFamily, fontSize, fontWeight, fontStyle]);
30
+ autoSizer.current.setFont({
31
+ fontFamily: fontFamily,
32
+ fontSize: fontSize,
33
+ fontWeight: fontWeight,
34
+ fontStyle: fontStyle,
35
+ lineHeightMode: lineHeightMode,
36
+ });
37
+ }, [fontFamily, fontSize, fontWeight, fontStyle, lineHeightMode]);
32
38
  var setAutoSizerTextFormat = (0, react_1.useCallback)(function (textFormat, scale) {
33
39
  var _a, _b;
34
40
  var baseFontSize = (0, helpers_1.pointToPixel)((_a = textFormat.fontSize) !== null && _a !== void 0 ? _a : fontSize);
35
41
  var textFontSize = textFormat.baselineOffset
36
42
  ? baseFontSize * BASELINE_OFFSET_FONT_SCALE
37
43
  : baseFontSize;
44
+ // The sizer is a shared singleton — pin the mode on every measure so a
45
+ // grid in `fixed` mode cannot leak its line box into this one.
38
46
  autoSizer.current.setFont({
39
47
  fontWeight: textFormat.bold ? "bold" : "",
40
48
  fontSize: textFontSize,
41
49
  fontFamily: (_b = textFormat.fontFamily) !== null && _b !== void 0 ? _b : fontFamily,
42
50
  fontStyle: textFormat.italic ? "italic" : "",
43
51
  scale: scale,
52
+ lineHeightMode: lineHeightMode,
44
53
  });
45
- }, [fontFamily, fontSize]);
54
+ }, [fontFamily, fontSize, lineHeightMode]);
46
55
  /**
47
56
  * Measure a single atom under its segment-merged format. We can't
48
57
  * delegate to `autoSizer.measureText` here: that runs the input
@@ -53,11 +62,12 @@ var useSizer = function (_a) {
53
62
  * "Hello world" (with bold "world") produced a width as if the
54
63
  * space didn't exist — auto-fit then sized the column too narrow
55
64
  * and the bold run touched the right edge. Width comes from the
56
- * raw 2D canvas API; height mirrors the autoSizer's
57
- * `fontSize * 1.2 * scale` line-box.
65
+ * raw 2D canvas API; the line box and leading are the autoSizer's
66
+ * for the atom's font, so a run in a taller face grows its line the
67
+ * way the painter's `CellTextRuns` draws it.
58
68
  */
59
69
  var measureAtom = (0, react_1.useCallback)(function (atom, base, currentScale) {
60
- var _a, _b, _c, _d, _e, _f, _g;
70
+ var _a, _b, _c, _d, _e, _f;
61
71
  var merged = {
62
72
  bold: (_a = atom.format.bold) !== null && _a !== void 0 ? _a : base.bold,
63
73
  italic: (_b = atom.format.italic) !== null && _b !== void 0 ? _b : base.italic,
@@ -68,15 +78,14 @@ var useSizer = function (_a) {
68
78
  setAutoSizerTextFormat(merged, currentScale);
69
79
  var ctx = autoSizer.current.context;
70
80
  var width = (_f = ctx === null || ctx === void 0 ? void 0 : ctx.measureText(atom.text).width) !== null && _f !== void 0 ? _f : 0;
71
- var fontPx = (0, helpers_1.pointToPixel)((_g = merged.fontSize) !== null && _g !== void 0 ? _g : fontSize);
72
- var height = fontPx * 1.2 * currentScale;
73
- return { width: width, height: height };
74
- }, [fontSize, setAutoSizerTextFormat]);
81
+ return tslib_1.__assign({ width: width }, autoSizer.current.lineMetrics());
82
+ }, [setAutoSizerTextFormat]);
75
83
  /**
76
84
  * Measure a rich-text cell. Walks segments per line, sets the
77
85
  * autoSizer font per atom, sums widths per line, takes the tallest
78
- * atom's measured height as that line's height (Excel scales rows
79
- * to fit the largest glyph in a mixed-format line). For wrapped
86
+ * atom's line box as that line's box (Excel scales rows to fit the
87
+ * largest glyph in a mixed-format line) and stacks lines with the
88
+ * leading of the tallest atom, as `CellTextRuns` does. For wrapped
80
89
  * cells it applies greedy whitespace-break wrap with per-atom font
81
90
  * metrics, matching what `CellTextRuns` paints. Returns the raw
82
91
  * scaled glyph box — caller adds cell-spacing padding afterwards.
@@ -85,19 +94,22 @@ var useSizer = function (_a) {
85
94
  var e_1, _a;
86
95
  var segments = (0, rich_text_1.buildRichTextSegments)(text, runs);
87
96
  var inputLines = (0, rich_text_1.segmentsToLines)(segments);
88
- // Baseline height for empty lines — single-space measurement
89
- // through the autoSizer so the scale + line-height ratio match.
90
- var baseLineHeight = (function () {
91
- var _a, _b;
97
+ // Line box for empty lines, and the floor of every other line.
98
+ var baseLine = (function () {
92
99
  setAutoSizerTextFormat(base, currentScale);
93
- return (_b = (_a = autoSizer.current.measureText(" ")) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0;
100
+ return autoSizer.current.lineMetrics();
94
101
  })();
95
102
  var totalWidth = 0;
96
103
  var totalHeight = 0;
104
+ var lineCount = 0;
105
+ var pushLine = function (box, leading) {
106
+ totalHeight += lineCount === 0 ? box : leading + box;
107
+ lineCount++;
108
+ };
97
109
  var _loop_1 = function (line) {
98
110
  var e_2, _b, e_3, _c, e_4, _d, e_5, _e;
99
111
  if (line.length === 0) {
100
- totalHeight += baseLineHeight;
112
+ pushLine(baseLine.box, baseLine.leading);
101
113
  return "continue";
102
114
  }
103
115
  var atoms = [];
@@ -127,16 +139,19 @@ var useSizer = function (_a) {
127
139
  finally { if (e_2) throw e_2.error; }
128
140
  }
129
141
  if (!shouldWrap) {
130
- // Single-line case: sum widths, max atom height = line height.
142
+ // Single-line case: sum widths, tallest atom's box = line box.
131
143
  var lineWidth_1 = 0;
132
- var lineMaxHeight_1 = baseLineHeight;
144
+ var lineBox_1 = baseLine.box;
145
+ var lineLeading_1 = baseLine.leading;
133
146
  try {
134
147
  for (var atoms_1 = (e_4 = void 0, tslib_1.__values(atoms)), atoms_1_1 = atoms_1.next(); !atoms_1_1.done; atoms_1_1 = atoms_1.next()) {
135
148
  var atom = atoms_1_1.value;
136
- var _h = measureAtom(atom, base, currentScale), width = _h.width, height = _h.height;
149
+ var _h = measureAtom(atom, base, currentScale), width = _h.width, box = _h.box, leading = _h.leading;
137
150
  lineWidth_1 += width;
138
- if (height > lineMaxHeight_1)
139
- lineMaxHeight_1 = height;
151
+ if (box > lineBox_1)
152
+ lineBox_1 = box;
153
+ if (leading > lineLeading_1)
154
+ lineLeading_1 = leading;
140
155
  }
141
156
  }
142
157
  catch (e_4_1) { e_4 = { error: e_4_1 }; }
@@ -148,7 +163,7 @@ var useSizer = function (_a) {
148
163
  }
149
164
  if (lineWidth_1 > totalWidth)
150
165
  totalWidth = lineWidth_1;
151
- totalHeight += lineMaxHeight_1;
166
+ pushLine(lineBox_1, lineLeading_1);
152
167
  return "continue";
153
168
  }
154
169
  // Wrapped case: greedy whitespace-break wrap with per-atom
@@ -156,24 +171,31 @@ var useSizer = function (_a) {
156
171
  // (kept inline because we need running per-line max-height).
157
172
  var cursorX = 0;
158
173
  var lineWidth = 0;
159
- var lineMaxHeight = baseLineHeight;
174
+ var lineBox = baseLine.box;
175
+ var lineLeading = baseLine.leading;
160
176
  var flush = function () {
161
177
  if (lineWidth > totalWidth)
162
178
  totalWidth = lineWidth;
163
- totalHeight += lineMaxHeight;
179
+ pushLine(lineBox, lineLeading);
164
180
  cursorX = 0;
165
181
  lineWidth = 0;
166
- lineMaxHeight = baseLineHeight;
182
+ lineBox = baseLine.box;
183
+ lineLeading = baseLine.leading;
184
+ };
185
+ var grow = function (box, leading) {
186
+ if (box > lineBox)
187
+ lineBox = box;
188
+ if (leading > lineLeading)
189
+ lineLeading = leading;
167
190
  };
168
191
  try {
169
192
  for (var atoms_2 = (e_5 = void 0, tslib_1.__values(atoms)), atoms_2_1 = atoms_2.next(); !atoms_2_1.done; atoms_2_1 = atoms_2.next()) {
170
193
  var atom = atoms_2_1.value;
171
- var _j = measureAtom(atom, base, currentScale), atomWidth = _j.width, atomHeight = _j.height;
194
+ var _j = measureAtom(atom, base, currentScale), atomWidth = _j.width, atomBox = _j.box, atomLeading = _j.leading;
172
195
  if (cursorX + atomWidth <= maxGlyphWidth || cursorX === 0) {
173
196
  cursorX += atomWidth;
174
197
  lineWidth = cursorX;
175
- if (atomHeight > lineMaxHeight)
176
- lineMaxHeight = atomHeight;
198
+ grow(atomBox, atomLeading);
177
199
  }
178
200
  else if (atom.isWhitespace) {
179
201
  flush();
@@ -182,8 +204,7 @@ var useSizer = function (_a) {
182
204
  flush();
183
205
  cursorX = atomWidth;
184
206
  lineWidth = atomWidth;
185
- if (atomHeight > lineMaxHeight)
186
- lineMaxHeight = atomHeight;
207
+ grow(atomBox, atomLeading);
187
208
  }
188
209
  }
189
210
  }
@@ -4,6 +4,15 @@ import type { SpreadsheetApi } from "../api/spreadsheet-api";
4
4
  type Props = {
5
5
  children?: ReactNode;
6
6
  };
7
+ type PortalProps = Props & {
8
+ /**
9
+ * Where every dialog, menu, popover, select, tooltip and editor dropdown
10
+ * under this provider mounts. Defaults to the `document.body` of the
11
+ * window running the JS; a host that renders the grid in a second window
12
+ * (popout, iframe) passes that window's body so they open next to the grid.
13
+ */
14
+ portalContainer?: HTMLElement | null;
15
+ };
7
16
  export declare const multiInstanceStore: {
8
17
  get: <Value>(atom: import("jotai").Atom<Value>) => Value;
9
18
  set: <Value, Args extends unknown[], Result>(atom: import("jotai").WritableAtom<Value, Args, Result>, ...args: Args) => Result;
@@ -17,8 +26,8 @@ export declare const multiInstanceAtom: import("jotai").PrimitiveAtom<Map<string
17
26
  init: Map<string, SpreadsheetApi<import("@rowsncolumns/common-types").CellData>>;
18
27
  };
19
28
  export declare const useSpreadsheetInstances: () => Map<string, SpreadsheetApi<import("@rowsncolumns/common-types").CellData>>;
20
- export declare const SpreadsheetProvider: FC<Props>;
21
- export declare const SpreadsheetStateProvider: FC<Props>;
29
+ export declare const SpreadsheetProvider: FC<PortalProps>;
30
+ export declare const SpreadsheetStateProvider: FC<PortalProps>;
22
31
  export declare const SpreadsheetMultiInstanceProvider: FC<Props>;
23
32
  export declare const SpreadsheetTooltipProvider: FC<Props>;
24
33
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"spreadsheet-provider.d.ts","sourceRoot":"","sources":["../../../providers/spreadsheet-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;0GAqCswE,GAAI;;;;0GAAJ,GAAI;;wDArC1vE,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;CAA+C,CAAC;AAM9E,eAAO,MAAM,uBAAuB,kFAEnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAQzC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,KAAK,CAM9C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAAC,KAAK,CAEtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,KAAK,CAEhD,CAAC"}
1
+ {"version":3,"file":"spreadsheet-provider.d.ts","sourceRoot":"","sources":["../../../providers/spreadsheet-provider.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,WAAW,GAAG,KAAK,GAAG;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;0GA+CwmD,GAAI;;;;0GAAJ,GAAI;;wDA/C5lD,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;CAA+C,CAAC;AAM9E,eAAO,MAAM,uBAAuB,kFAEnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,WAAW,CAa/C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,WAAW,CAWpD,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAAC,KAAK,CAEtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,KAAK,CAEhD,CAAC"}
@@ -16,16 +16,18 @@ var useSpreadsheetInstances = function () {
16
16
  };
17
17
  exports.useSpreadsheetInstances = useSpreadsheetInstances;
18
18
  var SpreadsheetProvider = function (_a) {
19
- var children = _a.children;
19
+ var children = _a.children, portalContainer = _a.portalContainer;
20
20
  return (react_1.default.createElement(jotai_1.Provider, null,
21
- react_1.default.createElement(ui_1.ModalProvider, null,
22
- react_1.default.createElement(ui_1.TooltipProvider, null, children))));
21
+ react_1.default.createElement(ui_1.PortalContainerProvider, { container: portalContainer },
22
+ react_1.default.createElement(ui_1.ModalProvider, null,
23
+ react_1.default.createElement(ui_1.TooltipProvider, null, children)))));
23
24
  };
24
25
  exports.SpreadsheetProvider = SpreadsheetProvider;
25
26
  var SpreadsheetStateProvider = function (_a) {
26
- var children = _a.children;
27
+ var children = _a.children, portalContainer = _a.portalContainer;
27
28
  return (react_1.default.createElement(jotai_1.Provider, null,
28
- react_1.default.createElement(ui_1.ModalProvider, null, children)));
29
+ react_1.default.createElement(ui_1.PortalContainerProvider, { container: portalContainer },
30
+ react_1.default.createElement(ui_1.ModalProvider, null, children))));
29
31
  };
30
32
  exports.SpreadsheetStateProvider = SpreadsheetStateProvider;
31
33
  var SpreadsheetMultiInstanceProvider = function (_a) {
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.releaseDate = void 0;
5
5
  exports.releaseDate =
6
6
  // @ts-ignore
7
- (_a = new Date("2026-10-12")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
7
+ (_a = new Date("2026-10-14")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
@@ -1 +1 @@
1
- {"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/calculated-column-fill.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/chart-sheet.ts","../../api/chart-source-ranges.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/fill-series.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/insert-options.ts","../../api/move-overwrite.ts","../../api/multi-selection.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table-auto-expansion.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/calculated-column-fill.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/chart-actions.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/fill-options.atom.ts","../../atoms/fill-series-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/insert-cells-dialog.atom.ts","../../atoms/insert-options.atom.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/move-chart-dialog.atom.ts","../../atoms/move-overwrite-confirm.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/selected-chart-series.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/sparkline-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/table-auto-expansion.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculated-column-smart-tag/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/chart-sheet-view/index.tsx","../../components/context-menu/embed-context-menu.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-function-menu.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/fill-series-dialog/index.tsx","../../components/filter-box/date-tree.ts","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-cells-dialog/index.tsx","../../components/insert-function-dialog/index.tsx","../../components/insert-options-smart-tag/index.tsx","../../components/loading-indicator/index.tsx","../../components/move-chart-dialog/index.tsx","../../components/move-overwrite-confirm-dialog/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/fill-options-menu.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/sparkline-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/table-auto-expansion-smart-tag/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/sparkline-actions.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-editor.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-chart-clipboard.ts","../../hooks/use-chart-source-ranges.ts","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-reveal-chart-embed.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-hit-zones.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/copy-as-picture.ts","../../utils/maybe.ts","../../utils/pivot-chart-field-buttons.ts","../../utils/z-order.ts"],"version":"5.8.3"}
1
+ {"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/calculated-column-fill.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/chart-sheet.ts","../../api/chart-source-ranges.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/fill-series.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/insert-options.ts","../../api/move-overwrite.ts","../../api/multi-selection.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table-auto-expansion.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/calculated-column-fill.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/chart-actions.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/fill-options.atom.ts","../../atoms/fill-series-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/insert-cells-dialog.atom.ts","../../atoms/insert-options.atom.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/move-chart-dialog.atom.ts","../../atoms/move-overwrite-confirm.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/selected-chart-series.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/sparkline-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/table-auto-expansion.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculated-column-smart-tag/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/line-height.ts","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/chart-sheet-view/index.tsx","../../components/context-menu/embed-context-menu.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-function-menu.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/fill-series-dialog/index.tsx","../../components/filter-box/date-tree.ts","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-cells-dialog/index.tsx","../../components/insert-function-dialog/index.tsx","../../components/insert-options-smart-tag/index.tsx","../../components/loading-indicator/index.tsx","../../components/move-chart-dialog/index.tsx","../../components/move-overwrite-confirm-dialog/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/fill-options-menu.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/sparkline-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/table-auto-expansion-smart-tag/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/sparkline-actions.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-editor.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/export-range-tiles.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-chart-clipboard.ts","../../hooks/use-chart-source-ranges.ts","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-reveal-chart-embed.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-hit-zones.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/copy-as-picture.ts","../../utils/maybe.ts","../../utils/pivot-chart-field-buttons.ts","../../utils/z-order.ts"],"version":"5.8.3"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAoDA,OAAO,KASN,MAAM,OAAO,CAAC;AAqNf,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAoBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAm4LnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAoDA,OAAO,KASN,MAAM,OAAO,CAAC;AAqNf,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAoBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAw5LnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
@@ -127,7 +127,7 @@ function isDetachedEditor(editor) {
127
127
  return element != null && !element.isConnected;
128
128
  }
129
129
  function CanvasGridComponent(props, forwardedRef) {
130
- const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
130
+ const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, lineHeightMode = "fontMetrics", columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, batchHistory, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
131
131
  // Host-driven filter props. `hostHiddenRowRanges`
132
132
  // supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
133
133
  // column's distinct values. Both let a million-row filter render without scanning
@@ -716,6 +716,10 @@ function CanvasGridComponent(props, forwardedRef) {
716
716
  cellEditorInstance?.focus();
717
717
  }
718
718
  }, [activeEditor, cellEditorInstance]);
719
+ /**
720
+ * Container and total size of the grid, as the grid measures them
721
+ */
722
+ const getGridDimensions = useCallback(() => gridRef.current?.getDimensions(), []);
719
723
  /**
720
724
  * Canvas layers
721
725
  */
@@ -1348,19 +1352,19 @@ function CanvasGridComponent(props, forwardedRef) {
1348
1352
  sheetId,
1349
1353
  cellBackgroundColor,
1350
1354
  gridLineWidth,
1355
+ frozenRows,
1356
+ frozenColumns,
1351
1357
  getCanvasLayers,
1352
1358
  getRowHeaderCanvasLayer,
1353
1359
  getColumnHeaderCanvasLayer,
1354
- getCellOffsetFromCoords,
1355
1360
  getR1C1AddressFromSelection,
1356
1361
  getSheetName,
1357
1362
  getScrollPosition,
1358
- getViewPort,
1359
1363
  getRowOffset,
1360
1364
  getColumnOffset,
1361
1365
  getSheetDimensions,
1366
+ getGridDimensions,
1362
1367
  scrollTo,
1363
- scrollToCell,
1364
1368
  scale,
1365
1369
  onChangeScale,
1366
1370
  });
@@ -1893,6 +1897,7 @@ function CanvasGridComponent(props, forwardedRef) {
1893
1897
  // Measure with the same font the painter draws with (#1117).
1894
1898
  fontFamily: defaultFontFamily,
1895
1899
  fontSize: defaultFontSize,
1900
+ lineHeightMode,
1896
1901
  resizeStrategy: "full",
1897
1902
  });
1898
1903
  /**
@@ -2416,10 +2421,12 @@ function CanvasGridComponent(props, forwardedRef) {
2416
2421
  focus: focusSheet,
2417
2422
  scrollToCell,
2418
2423
  isMergedCell,
2419
- onFill,
2424
+ // A readonly grid gets no write handler: a fill-handle drag or a
2425
+ // selection drag-move then changes nothing, whatever started the gesture.
2426
+ onFill: readonly ? undefined : onFill,
2420
2427
  onFillHandleRelease: handleFillHandleRelease,
2421
- onFillShrink: handleFillShrink,
2422
- onMoveSelection,
2428
+ onFillShrink: readonly ? undefined : handleFillShrink,
2429
+ onMoveSelection: readonly ? undefined : onMoveSelection,
2423
2430
  onInsertCutCells,
2424
2431
  confirmMoveOverwrite,
2425
2432
  isHiddenColumn,
@@ -2438,6 +2445,7 @@ function CanvasGridComponent(props, forwardedRef) {
2438
2445
  activeCell,
2439
2446
  selections,
2440
2447
  sheetId,
2448
+ readonly,
2441
2449
  focusSheet,
2442
2450
  onPaste,
2443
2451
  onCopy,
@@ -2678,6 +2686,7 @@ function CanvasGridComponent(props, forwardedRef) {
2678
2686
  showValidationAlert,
2679
2687
  selections,
2680
2688
  onChangeBatch,
2689
+ batchHistory,
2681
2690
  formulaLocale,
2682
2691
  });
2683
2692
  /**
@@ -3081,14 +3090,15 @@ function CanvasGridComponent(props, forwardedRef) {
3081
3090
  selectionTopBound,
3082
3091
  showHeaderMenuButton,
3083
3092
  scale,
3084
- onResize,
3093
+ // Column widths and row heights are sheet writes too
3094
+ onResize: readonly ? undefined : onResize,
3085
3095
  focusSheet,
3086
3096
  isRowHeader,
3087
3097
  isColumnHeader,
3088
3098
  isHiddenColumn,
3089
3099
  containerWidth: width - scrollbarSize,
3090
3100
  containerHeight: height - scrollbarSize,
3091
- onAutoFit: handleAutoFit,
3101
+ onAutoFit: readonly ? undefined : handleAutoFit,
3092
3102
  backgroundColor: selectionBorderColor,
3093
3103
  sheetId,
3094
3104
  selectedRowHeadersIds,
@@ -3596,6 +3606,7 @@ function CanvasGridComponent(props, forwardedRef) {
3596
3606
  onCheckboxClick: handleCheckboxClick,
3597
3607
  onExpandCollapse: handleExpandCollapse,
3598
3608
  defaultFontSizePoint: defaultFontSize,
3609
+ lineHeightMode,
3599
3610
  Cell,
3600
3611
  HeaderCell,
3601
3612
  theme,
@@ -3669,8 +3680,10 @@ function CanvasGridComponent(props, forwardedRef) {
3669
3680
  * Hide fill handle
3670
3681
  * 1. When user is in edit mode
3671
3682
  * 2. When user is in formula mode and user has made selections
3683
+ * 3. When the grid is readonly — a fill is a write
3672
3684
  */
3673
- const showFillHandle = !isSelectionInProgress &&
3685
+ const showFillHandle = !readonly &&
3686
+ !isSelectionInProgress &&
3674
3687
  !isEditInProgress &&
3675
3688
  !isResizingTable &&
3676
3689
  !(formulaMode && formulaSelections.length);
@@ -4124,12 +4137,14 @@ function CanvasGridComponent(props, forwardedRef) {
4124
4137
  popoverComponent,
4125
4138
  popoverRange,
4126
4139
  cellExpandComponent,
4140
+ arrowComponents,
4127
4141
  });
4128
4142
  /**
4129
4143
  * Only enable selection drag if user is not editing and not
4130
- * in formula mode
4144
+ * in formula mode. A readonly grid has nothing to move, so the
4145
+ * gesture does not start at all (no move cursor, no selection jump).
4131
4146
  */
4132
- const enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
4147
+ const enableSelectionDrag = !readonly && !isSelectionInProgress && !isEditInProgress && !formulaMode;
4133
4148
  // A chartsheet IS its chart: no grid, headers, editor or cell menus — only the chart and its
4134
4149
  // context menu (Excel).
4135
4150
  if (sheetType === "chartsheet") {
@@ -1,6 +1,6 @@
1
1
  import type { CalculatorFunction } from "@rowsncolumns/common-types";
2
2
  import type { FormulaResult } from "@rowsncolumns/fast-formula-parser";
3
- import type { Align, AreaStyle, CellInterface, CellPosition, Direction, GridProps, GridRange, GridRef, OptionalCellInterface, ScrollCoords, SelectionArea, Style, ViewPortProps } from "@rowsncolumns/grid";
3
+ import type { Align, AreaStyle, CellInterface, CellPosition, Direction, GridProps, GridRange, GridRef, LineHeightMode, OptionalCellInterface, ScrollCoords, SelectionArea, Style, ViewPortProps } from "@rowsncolumns/grid";
4
4
  import type { Mention, MentionTagComponentProps, OptionItem, ProseMirrorEditorProps, TextFormatRun } from "@rowsncolumns/ui";
5
5
  import type { FormulaLocale, FormulaLocaleInput } from "@rowsncolumns/utils";
6
6
  import type { CellDiff } from "@rowsncolumns/version-comparison";
@@ -231,6 +231,14 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
231
231
  * Default row height
232
232
  */
233
233
  defaultRowHeight?: number;
234
+ /**
235
+ * Where the height of one line of cell text comes from, for both the
236
+ * painter and row auto-fit. `fontMetrics` (default) measures each font's
237
+ * bounding box (`fontBoundingBoxAscent + fontBoundingBoxDescent`) once
238
+ * and stacks lines with Excel's 2px leading, so wrapped rows fit like
239
+ * Excel's; `fixed` keeps the pre-#1141 `fontSize * 1.2` line box.
240
+ */
241
+ lineHeightMode?: LineHeightMode;
234
242
  /**
235
243
  * Default column width
236
244
  */
@@ -1277,6 +1285,15 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
1277
1285
  * User tries to redo an action
1278
1286
  */
1279
1287
  onRedo?(): void;
1288
+ /**
1289
+ * Run `action` with every write it issues recorded as ONE undo entry — the `batchHistory` of
1290
+ * `useSpreadsheetState` / `useSpreadsheetEngine`, so a host spreading its state into the grid
1291
+ * passes it for free. The grid uses it for gestures that are one step in Excel but several writes
1292
+ * here: Ctrl+Enter commits the active cell through `onChange` and spreads the entry into the rest
1293
+ * of the selection through `onChangeBatch`, one call per rectangle. Without it each write is its
1294
+ * own undo entry.
1295
+ */
1296
+ batchHistory?<R>(action: () => R): R;
1280
1297
  /**
1281
1298
  * Callback when user paste a set of cells
1282
1299
  * @param e Browser event