@rowsncolumns/spreadsheet 10.2.74 → 10.2.75

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 (194) hide show
  1. package/dist/cjs/api/excel-validation-kinds.d.ts +71 -0
  2. package/dist/cjs/api/excel-validation-kinds.d.ts.map +1 -0
  3. package/dist/cjs/api/excel-validation-kinds.js +304 -0
  4. package/dist/cjs/api/go-to-special.d.ts +32 -0
  5. package/dist/cjs/api/go-to-special.d.ts.map +1 -0
  6. package/dist/cjs/api/go-to-special.js +111 -0
  7. package/dist/cjs/api/validation-tooltip.d.ts +17 -0
  8. package/dist/cjs/api/validation-tooltip.d.ts.map +1 -0
  9. package/dist/cjs/api/validation-tooltip.js +42 -0
  10. package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts +28 -0
  11. package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
  12. package/dist/cjs/atoms/advanced-filter-dialog.atom.js +32 -0
  13. package/dist/cjs/atoms/go-to-dialog.atom.d.ts +11 -1
  14. package/dist/cjs/atoms/go-to-dialog.atom.d.ts.map +1 -1
  15. package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts +29 -0
  16. package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
  17. package/dist/cjs/atoms/goal-seek-dialog.atom.js +30 -0
  18. package/dist/cjs/atoms/index.d.ts +1 -0
  19. package/dist/cjs/atoms/index.d.ts.map +1 -1
  20. package/dist/cjs/atoms/index.js +1 -0
  21. package/dist/cjs/atoms/subtotal-dialog.atom.d.ts +39 -0
  22. package/dist/cjs/atoms/subtotal-dialog.atom.d.ts.map +1 -0
  23. package/dist/cjs/atoms/subtotal-dialog.atom.js +30 -0
  24. package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts +34 -0
  25. package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
  26. package/dist/cjs/atoms/text-to-columns-dialog.atom.js +36 -0
  27. package/dist/cjs/atoms/watch-window.atom.d.ts +37 -0
  28. package/dist/cjs/atoms/watch-window.atom.d.ts.map +1 -0
  29. package/dist/cjs/atoms/watch-window.atom.js +61 -0
  30. package/dist/cjs/components/advanced-filter-dialog/index.d.ts +28 -0
  31. package/dist/cjs/components/advanced-filter-dialog/index.d.ts.map +1 -0
  32. package/dist/cjs/components/advanced-filter-dialog/index.js +134 -0
  33. package/dist/cjs/components/calculation-options-dialog/index.d.ts +33 -0
  34. package/dist/cjs/components/calculation-options-dialog/index.d.ts.map +1 -0
  35. package/dist/cjs/components/calculation-options-dialog/index.js +69 -0
  36. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  37. package/dist/cjs/components/canvas-grid/index.js +104 -21
  38. package/dist/cjs/components/canvas-grid/typings.d.ts +19 -2
  39. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  40. package/dist/cjs/components/cell/alignment.d.ts +30 -0
  41. package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
  42. package/dist/cjs/components/cell/alignment.js +56 -1
  43. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  44. package/dist/cjs/components/cell/index.js +15 -7
  45. package/dist/cjs/components/cell-diff/index.d.ts +3 -2
  46. package/dist/cjs/components/cell-diff/index.d.ts.map +1 -1
  47. package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
  48. package/dist/cjs/components/cell-editor/index.js +2 -1
  49. package/dist/cjs/components/context-menu/index.d.ts +6 -1
  50. package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
  51. package/dist/cjs/components/context-menu/index.js +146 -3
  52. package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -1
  53. package/dist/cjs/components/embeds/embed-component.js +16 -1
  54. package/dist/cjs/components/go-to-dialog/index.d.ts +11 -1
  55. package/dist/cjs/components/go-to-dialog/index.d.ts.map +1 -1
  56. package/dist/cjs/components/go-to-dialog/index.js +67 -24
  57. package/dist/cjs/components/goal-seek-dialog/index.d.ts +32 -0
  58. package/dist/cjs/components/goal-seek-dialog/index.d.ts.map +1 -0
  59. package/dist/cjs/components/goal-seek-dialog/index.js +149 -0
  60. package/dist/cjs/components/subtotal-dialog/index.d.ts +30 -0
  61. package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -0
  62. package/dist/cjs/components/subtotal-dialog/index.js +126 -0
  63. package/dist/cjs/components/text-to-columns-dialog/index.d.ts +37 -0
  64. package/dist/cjs/components/text-to-columns-dialog/index.d.ts.map +1 -0
  65. package/dist/cjs/components/text-to-columns-dialog/index.js +166 -0
  66. package/dist/cjs/components/toolbar/background-color-selector.d.ts +13 -1
  67. package/dist/cjs/components/toolbar/background-color-selector.d.ts.map +1 -1
  68. package/dist/cjs/components/toolbar/background-color-selector.js +57 -11
  69. package/dist/cjs/components/toolbar/cell-style-selector.d.ts +15 -2
  70. package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
  71. package/dist/cjs/components/toolbar/cell-style-selector.js +56 -3
  72. package/dist/cjs/components/toolbar/fill-selectors.d.ts +49 -0
  73. package/dist/cjs/components/toolbar/fill-selectors.d.ts.map +1 -0
  74. package/dist/cjs/components/toolbar/fill-selectors.js +196 -0
  75. package/dist/cjs/components/toolbar/index.d.ts +1 -0
  76. package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
  77. package/dist/cjs/components/toolbar/index.js +1 -0
  78. package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
  79. package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
  80. package/dist/cjs/components/toolbar/text-horizontal-align-selector.js +23 -4
  81. package/dist/cjs/components/watch-window/index.d.ts +25 -0
  82. package/dist/cjs/components/watch-window/index.d.ts.map +1 -0
  83. package/dist/cjs/components/watch-window/index.js +63 -0
  84. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  85. package/dist/cjs/hooks/use-cell-renderer.js +17 -6
  86. package/dist/cjs/hooks/use-get-tooltip.d.ts.map +1 -1
  87. package/dist/cjs/hooks/use-get-tooltip.js +7 -2
  88. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  89. package/dist/cjs/hooks/use-keyboard-handler.js +24 -12
  90. package/dist/cjs/index.d.ts +8 -0
  91. package/dist/cjs/index.d.ts.map +1 -1
  92. package/dist/cjs/index.js +8 -0
  93. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  94. package/dist/cjs/types.d.ts +117 -4
  95. package/dist/cjs/types.d.ts.map +1 -1
  96. package/dist/cjs/types.js +19 -1
  97. package/dist/esm/api/excel-validation-kinds.d.ts +71 -0
  98. package/dist/esm/api/excel-validation-kinds.d.ts.map +1 -0
  99. package/dist/esm/api/excel-validation-kinds.js +287 -0
  100. package/dist/esm/api/go-to-special.d.ts +32 -0
  101. package/dist/esm/api/go-to-special.d.ts.map +1 -0
  102. package/dist/esm/api/go-to-special.js +96 -0
  103. package/dist/esm/api/validation-tooltip.d.ts +17 -0
  104. package/dist/esm/api/validation-tooltip.d.ts.map +1 -0
  105. package/dist/esm/api/validation-tooltip.js +34 -0
  106. package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts +28 -0
  107. package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
  108. package/dist/esm/atoms/advanced-filter-dialog.atom.js +21 -0
  109. package/dist/esm/atoms/go-to-dialog.atom.d.ts +11 -1
  110. package/dist/esm/atoms/go-to-dialog.atom.d.ts.map +1 -1
  111. package/dist/esm/atoms/goal-seek-dialog.atom.d.ts +29 -0
  112. package/dist/esm/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
  113. package/dist/esm/atoms/goal-seek-dialog.atom.js +21 -0
  114. package/dist/esm/atoms/index.d.ts +1 -0
  115. package/dist/esm/atoms/index.d.ts.map +1 -1
  116. package/dist/esm/atoms/index.js +1 -0
  117. package/dist/esm/atoms/subtotal-dialog.atom.d.ts +39 -0
  118. package/dist/esm/atoms/subtotal-dialog.atom.d.ts.map +1 -0
  119. package/dist/esm/atoms/subtotal-dialog.atom.js +21 -0
  120. package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts +34 -0
  121. package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
  122. package/dist/esm/atoms/text-to-columns-dialog.atom.js +25 -0
  123. package/dist/esm/atoms/watch-window.atom.d.ts +37 -0
  124. package/dist/esm/atoms/watch-window.atom.d.ts.map +1 -0
  125. package/dist/esm/atoms/watch-window.atom.js +37 -0
  126. package/dist/esm/components/advanced-filter-dialog/index.d.ts +28 -0
  127. package/dist/esm/components/advanced-filter-dialog/index.d.ts.map +1 -0
  128. package/dist/esm/components/advanced-filter-dialog/index.js +125 -0
  129. package/dist/esm/components/calculation-options-dialog/index.d.ts +33 -0
  130. package/dist/esm/components/calculation-options-dialog/index.d.ts.map +1 -0
  131. package/dist/esm/components/calculation-options-dialog/index.js +61 -0
  132. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  133. package/dist/esm/components/canvas-grid/index.js +99 -20
  134. package/dist/esm/components/canvas-grid/typings.d.ts +19 -2
  135. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  136. package/dist/esm/components/cell/alignment.d.ts +30 -0
  137. package/dist/esm/components/cell/alignment.d.ts.map +1 -1
  138. package/dist/esm/components/cell/alignment.js +51 -0
  139. package/dist/esm/components/cell/index.d.ts.map +1 -1
  140. package/dist/esm/components/cell/index.js +16 -8
  141. package/dist/esm/components/cell-diff/index.d.ts +3 -2
  142. package/dist/esm/components/cell-diff/index.d.ts.map +1 -1
  143. package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
  144. package/dist/esm/components/cell-editor/index.js +2 -1
  145. package/dist/esm/components/context-menu/index.d.ts +6 -1
  146. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  147. package/dist/esm/components/context-menu/index.js +139 -4
  148. package/dist/esm/components/embeds/embed-component.d.ts.map +1 -1
  149. package/dist/esm/components/embeds/embed-component.js +17 -1
  150. package/dist/esm/components/go-to-dialog/index.d.ts +11 -1
  151. package/dist/esm/components/go-to-dialog/index.d.ts.map +1 -1
  152. package/dist/esm/components/go-to-dialog/index.js +63 -23
  153. package/dist/esm/components/goal-seek-dialog/index.d.ts +32 -0
  154. package/dist/esm/components/goal-seek-dialog/index.d.ts.map +1 -0
  155. package/dist/esm/components/goal-seek-dialog/index.js +125 -0
  156. package/dist/esm/components/subtotal-dialog/index.d.ts +30 -0
  157. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -0
  158. package/dist/esm/components/subtotal-dialog/index.js +115 -0
  159. package/dist/esm/components/text-to-columns-dialog/index.d.ts +37 -0
  160. package/dist/esm/components/text-to-columns-dialog/index.d.ts.map +1 -0
  161. package/dist/esm/components/text-to-columns-dialog/index.js +147 -0
  162. package/dist/esm/components/toolbar/background-color-selector.d.ts +13 -1
  163. package/dist/esm/components/toolbar/background-color-selector.d.ts.map +1 -1
  164. package/dist/esm/components/toolbar/background-color-selector.js +61 -11
  165. package/dist/esm/components/toolbar/cell-style-selector.d.ts +15 -2
  166. package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
  167. package/dist/esm/components/toolbar/cell-style-selector.js +46 -2
  168. package/dist/esm/components/toolbar/fill-selectors.d.ts +49 -0
  169. package/dist/esm/components/toolbar/fill-selectors.d.ts.map +1 -0
  170. package/dist/esm/components/toolbar/fill-selectors.js +162 -0
  171. package/dist/esm/components/toolbar/index.d.ts +1 -0
  172. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  173. package/dist/esm/components/toolbar/index.js +1 -0
  174. package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
  175. package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
  176. package/dist/esm/components/toolbar/text-horizontal-align-selector.js +21 -5
  177. package/dist/esm/components/watch-window/index.d.ts +25 -0
  178. package/dist/esm/components/watch-window/index.d.ts.map +1 -0
  179. package/dist/esm/components/watch-window/index.js +54 -0
  180. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  181. package/dist/esm/hooks/use-cell-renderer.js +17 -6
  182. package/dist/esm/hooks/use-get-tooltip.d.ts.map +1 -1
  183. package/dist/esm/hooks/use-get-tooltip.js +7 -2
  184. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  185. package/dist/esm/hooks/use-keyboard-handler.js +24 -12
  186. package/dist/esm/index.d.ts +8 -0
  187. package/dist/esm/index.d.ts.map +1 -1
  188. package/dist/esm/index.js +8 -0
  189. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  190. package/dist/esm/types.d.ts +117 -4
  191. package/dist/esm/types.d.ts.map +1 -1
  192. package/dist/esm/types.js +18 -0
  193. package/dist/spreadsheet.min.css +1 -1
  194. package/package.json +6 -6
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalculationOptionsDialog = exports.normalizeIterativeCalculation = exports.DEFAULT_ITERATIVE_CALCULATION = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var ui_1 = require("@rowsncolumns/ui");
6
+ var react_1 = tslib_1.__importStar(require("react"));
7
+ /** Excel's defaults (File → Options → Formulas → Calculation options). */
8
+ exports.DEFAULT_ITERATIVE_CALCULATION = {
9
+ enabled: false,
10
+ maxIterations: 100,
11
+ maxChange: 0.001,
12
+ };
13
+ /**
14
+ * Normalise a form draft the way Excel does: iterations are a whole number
15
+ * 1…32767, maximum change is a non-negative number; anything else falls
16
+ * back to the current value.
17
+ */
18
+ var normalizeIterativeCalculation = function (draft, current) {
19
+ var _a, _b;
20
+ var parse = function (text) { return (text.trim() === "" ? NaN : Number(text)); };
21
+ var iterations = parse(draft.maxIterations);
22
+ var change = parse(draft.maxChange);
23
+ return {
24
+ enabled: draft.enabled,
25
+ maxIterations: Number.isFinite(iterations) && iterations >= 1
26
+ ? Math.min(32767, Math.floor(iterations))
27
+ : (_a = current === null || current === void 0 ? void 0 : current.maxIterations) !== null && _a !== void 0 ? _a : exports.DEFAULT_ITERATIVE_CALCULATION.maxIterations,
28
+ maxChange: Number.isFinite(change) && change >= 0
29
+ ? change
30
+ : (_b = current === null || current === void 0 ? void 0 : current.maxChange) !== null && _b !== void 0 ? _b : exports.DEFAULT_ITERATIVE_CALCULATION.maxChange,
31
+ };
32
+ };
33
+ exports.normalizeIterativeCalculation = normalizeIterativeCalculation;
34
+ /**
35
+ * Excel's iterative-calculation options (enable / maximum iterations /
36
+ * maximum change) as a dialog. Purely presentational — the host owns the
37
+ * setting and applies it through `onChange`.
38
+ */
39
+ exports.CalculationOptionsDialog = (0, react_1.memo)(function (_a) {
40
+ var _b, _c, _d;
41
+ var open = _a.open, onOpenChange = _a.onOpenChange, value = _a.value, onChange = _a.onChange;
42
+ var _e = tslib_1.__read((0, react_1.useState)((_b = value === null || value === void 0 ? void 0 : value.enabled) !== null && _b !== void 0 ? _b : false), 2), enabled = _e[0], setEnabled = _e[1];
43
+ var _f = tslib_1.__read((0, react_1.useState)(String((_c = value === null || value === void 0 ? void 0 : value.maxIterations) !== null && _c !== void 0 ? _c : exports.DEFAULT_ITERATIVE_CALCULATION.maxIterations)), 2), maxIterations = _f[0], setMaxIterations = _f[1];
44
+ var _g = tslib_1.__read((0, react_1.useState)(String((_d = value === null || value === void 0 ? void 0 : value.maxChange) !== null && _d !== void 0 ? _d : exports.DEFAULT_ITERATIVE_CALCULATION.maxChange)), 2), maxChange = _g[0], setMaxChange = _g[1];
45
+ return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange, modal: true },
46
+ react_1.default.createElement(ui_1.DialogContent, { className: "w-[360px] max-w-[92vw] pointer-events-auto" },
47
+ react_1.default.createElement(ui_1.DialogTitle, null, "Calculation options"),
48
+ react_1.default.createElement(ui_1.DialogCloseButton, null),
49
+ react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3" },
50
+ react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: function (e) {
51
+ e.preventDefault();
52
+ onChange((0, exports.normalizeIterativeCalculation)({ enabled: enabled, maxIterations: maxIterations, maxChange: maxChange }, value !== null && value !== void 0 ? value : undefined));
53
+ onOpenChange(false);
54
+ } },
55
+ react_1.default.createElement("label", { className: "flex items-center gap-2 text-xs font-medium" },
56
+ react_1.default.createElement("input", { type: "checkbox", checked: enabled, onChange: function (e) { return setEnabled(e.target.checked); } }),
57
+ "Enable iterative calculation"),
58
+ react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
59
+ "Maximum iterations:",
60
+ react_1.default.createElement(ui_1.Input, { type: "number", min: 1, max: 32767, step: 1, value: maxIterations, disabled: !enabled, onChange: function (e) { return setMaxIterations(e.target.value); } })),
61
+ react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
62
+ "Maximum change:",
63
+ react_1.default.createElement(ui_1.Input, { type: "number", min: 0, step: "any", value: maxChange, disabled: !enabled, onChange: function (e) { return setMaxChange(e.target.value); } })),
64
+ react_1.default.createElement(ui_1.Separator, null),
65
+ react_1.default.createElement("div", { className: "flex justify-end gap-2" },
66
+ react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
67
+ react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm" }, "OK")))))));
68
+ });
69
+ exports.CalculationOptionsDialog.displayName = "CalculationOptionsDialog";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AA2CA,OAAO,KASN,MAAM,OAAO,CAAC;AA2Kf,OAAO,KAAK,EAEV,QAAQ,EAST,MAAM,aAAa,CAAC;AAarB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AA2wJnB,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":"AA2CA,OAAO,KASN,MAAM,OAAO,CAAC;AAsLf,OAAO,KAAK,EAEV,QAAQ,EAST,MAAM,aAAa,CAAC;AAarB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AA61JnB,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"}
@@ -20,9 +20,13 @@ var cf_window_1 = require("../../api/cf-window");
20
20
  var selections_1 = require("../../api/selections");
21
21
  var spreadsheet_api_1 = require("../../api/spreadsheet-api");
22
22
  var table_1 = require("../../api/table");
23
+ var validation_tooltip_1 = require("../../api/validation-tooltip");
24
+ var go_to_special_1 = require("../../api/go-to-special");
25
+ var excel_validation_kinds_1 = require("../../api/excel-validation-kinds");
23
26
  var validation_1 = require("../../api/validation");
24
27
  var atoms_1 = require("../../atoms");
25
28
  var active_editor_atom_1 = require("../../atoms/active-editor.atom");
29
+ var watch_window_atom_1 = require("../../atoms/watch-window.atom");
26
30
  var editing_cell_atom_1 = require("../../atoms/editing-cell.atom");
27
31
  var formula_bar_editor_value_atom_1 = require("../../atoms/formula-bar-editor-value.atom");
28
32
  var formula_selection_state_atom_1 = require("../../atoms/formula-selection-state.atom");
@@ -104,7 +108,7 @@ var helpers_2 = require("./helpers");
104
108
  * @returns
105
109
  */
106
110
  function CanvasGridComponent(props, forwardedRef) {
107
- var licenseKey = props.licenseKey, sheetId = props.sheetId, instanceId = props.instanceId, _a = props.activeCell, activeCell = _a === void 0 ? config_1.DEFAULT_ACTIVE_CELL : _a, _b = props.selections, selections = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, _c = props.frozenColumnCount, frozenColumnCount = _c === void 0 ? 0 : _c, _d = props.frozenRowCount, frozenRowCount = _d === void 0 ? 0 : _d, _e = props.rowCount, rowCount = _e === void 0 ? config_1.DEFAULT_ROW_COUNT : _e, _f = props.columnCount, columnCount = _f === void 0 ? config_1.DEFAULT_COLUMN_COUNT : _f, autoFocus = props.autoFocus, basicFilter = props.basicFilter, tables = props.tables, namedRanges = props.namedRanges, _g = props.bandedRanges, bandedRanges = _g === void 0 ? config_1.DEFAULT_ARRAY : _g, _h = props.tableBorderColor, tableBorderColor = _h === void 0 ? "#008000" : _h, _j = props.filterIconColor, filterIconColor = _j === void 0 ? "#008000" : _j, conditionalFormats = props.conditionalFormats, _k = props.showFilterIcon, showFilterIcon = _k === void 0 ? true : _k, _l = props.showCalculatedColumnIcon, showCalculatedColumnIcon = _l === void 0 ? true : _l, _m = props.showHeaders, showHeaders = _m === void 0 ? true : _m, _o = props.defaultColumnWidth, defaultColumnWidth = _o === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _o, _p = props.defaultRowHeight, defaultRowHeight = _p === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _p, _q = props.columnHeaderHeight, columnHeaderHeight = _q === void 0 ? config_1.COLUMN_HEADER_HEIGHT : _q, _r = props.rowHeaderWidth, rowHeaderWidth = _r === void 0 ? config_1.ROW_HEADER_WIDTH : _r, _s = props.gridLineColor, gridLineColor = _s === void 0 ? config_1.GRIDLINE_COLOR : _s, _t = props.cellBackgroundColor, cellBackgroundColor = _t === void 0 ? config_1.DEFAULT_CELL_BACKGROUND_COLOR : _t, _u = props.cellColor, cellColor = _u === void 0 ? config_1.DEFAULT_CELL_COLOR : _u, _v = props.headerBorderColor, headerBorderColor = _v === void 0 ? config_1.DEFAULT_HEADER_BORDER_COLOR : _v, _w = props.headerBackgroundColor, headerBackgroundColor = _w === void 0 ? config_1.DEFAULT_HEADER_BG : _w, _x = props.headerColor, headerColor = _x === void 0 ? config_1.DEFAULT_HEADER_COLOR : _x, _y = props.headerActiveBackgroundColor, headerActiveBackgroundColor = _y === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_BG : _y, _z = props.headerSelectedBackgroundColor, headerSelectedBackgroundColor = _z === void 0 ? config_1.DEFAULT_HEADER_SELECTED_BG : _z, _0 = props.headerSelectedColor, headerSelectedColor = _0 === void 0 ? "white" : _0, _1 = props.headerTableBackgroundColor, headerTableBackgroundColor = _1 === void 0 ? config_1.DEFAULT_HEADER_TABLE_BG : _1, _2 = props.headerTableActiveBackgroundColor, headerTableActiveBackgroundColor = _2 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_TABLE_BG : _2, _3 = props.headerTableSelectedBackgroundColor, headerTableSelectedBackgroundColor = _3 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_TABLE_BG : _3, _4 = props.frozenShadowColor, frozenShadowColor = _4 === void 0 ? headerBorderColor : _4, _5 = props.frozenShadowThickness, frozenShadowThickness = _5 === void 0 ? 1 : _5, _6 = props.selectionBackgroundColor, selectionBackgroundColor = _6 === void 0 ? config_1.SELECTION_BG : _6, _7 = props.selectionBorderColor, selectionBorderColor = _7 === void 0 ? config_1.SELECTION_BORDER : _7, _8 = props.selectionDragBorderColor, selectionDragBorderColor = _8 === void 0 ? config_1.SELECTION_BORDER : _8, chartSelectedColor = props.chartSelectedColor, _9 = props.chipBackgroundColor, chipBackgroundColor = _9 === void 0 ? config_1.CHIP_COLOR : _9, _10 = props.merges, merges = _10 === void 0 ? config_1.DEFAULT_ARRAY : _10, borderStyles = props.borderStyles, protectedRanges = props.protectedRanges, _11 = props.isWorkbookProtected, isWorkbookProtectedProp = _11 === void 0 ? false : _11, getSheetProtection = props.getSheetProtection, pivotTables = props.pivotTables, charts = props.charts, embeds = props.embeds, slicers = props.slicers, _12 = props.rowMetadata, rowMetadata = _12 === void 0 ? config_1.DEFAULT_ARRAY : _12, _13 = props.columnMetadata, columnMetadata = _13 === void 0 ? config_1.DEFAULT_ARRAY : _13, _14 = props.scale, scale = _14 === void 0 ? 1 : _14, _15 = props.zoomSpeed, zoomSpeed = _15 === void 0 ? 1 : _15, _16 = props.overscanCount, overscanCount = _16 === void 0 ? 3 : _16, _17 = props.enableEditOnEnterKey, enableEditOnEnterKey = _17 === void 0 ? true : _17, _18 = props.enableTextOverflow, enableTextOverflow = _18 === void 0 ? true : _18, _showGridLines = props.showGridLines, _19 = props.showFormulas, showFormulas = _19 === void 0 ? false : _19, _20 = props.protectFormulas, protectFormulas = _20 === void 0 ? false : _20, _21 = props.showFrozenSeparator, showFrozenSeparator = _21 === void 0 ? true : _21, _22 = props.HeaderCell, HeaderCell = _22 === void 0 ? header_cell_1.HeaderCell : _22, _23 = props.Cell, Cell = _23 === void 0 ? cell_1.Cell : _23, _24 = props.SelectionTitleComponent, SelectionTitleComponent = _24 === void 0 ? title_1.SelectionTitle : _24, _25 = props.CellEditor, CellEditor = _25 === void 0 ? cell_editor_1.CellEditor : _25, CellTooltip = props.CellTooltip, _26 = props.ContextMenu, ContextMenu = _26 === void 0 ? context_menu_1.ContextMenu : _26, _27 = props.ContextMenuWrapper, ContextMenuWrapper = _27 === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _27, _28 = props.FilterBox, FilterBox = _28 === void 0 ? filter_box_1.FilterBox : _28, _29 = props.HeaderMoveDragComponent, HeaderMoveDragComponent = _29 === void 0 ? header_move_1.HeaderMoveDragComponent : _29, SuggestionsDropdown = props.SuggestionsDropdown, _30 = props.stickyEditor, stickyEditor = _30 === void 0 ? true : _30, _31 = props.scrollSnap, scrollSnap = _31 === void 0 ? false : _31, scrollThrottleTimeout = props.scrollThrottleTimeout, preventBrowserDefaultScroll = props.preventBrowserDefaultScroll, _32 = props.mouseMoveThrottleTimeout, mouseMoveThrottleTimeout = _32 === void 0 ? 60 : _32, _33 = props.tooltipIntentInterval, tooltipIntentInterval = _33 === void 0 ? 60 : _33, selectionPolicy = props.selectionPolicy, users = props.users, userId = props.userId, renderCollaboratorCursor = props.renderCollaboratorCursor, functionDescriptions = props.functionDescriptions, _34 = props.showHeaderMenuButton, showHeaderMenuButton = _34 === void 0 ? true : _34, _35 = props.scrollbarSize, scrollbarSize = _35 === void 0 ? config_1.SCROLLBAR_SIZE : _35, _36 = props.theme, theme = _36 === void 0 ? config_1.defaultSpreadsheetTheme : _36, _37 = props.showNotes, showNotes = _37 === void 0 ? true : _37, _38 = props.showComments, showComments = _38 === void 0 ? true : _38, locale = props.locale, agentSuggestions = props.agentSuggestions, onReviewSuggestion = props.onReviewSuggestion, onShowFormulas = props.onShowFormulas, getDataRowCount = props.getDataRowCount, getChartComponent = props.getChartComponent, getEmbedComponent = props.getEmbedComponent, getSlicerComponent = props.getSlicerComponent, onChange = props.onChange, onChangeBatch = props.onChangeBatch, onExpandCollapse = props.onExpandCollapse, onPivotDrillDown = props.onPivotDrillDown, onDelete = props.onDelete, onChangeEditorValue = props.onChangeEditorValue, onFill = props.onFill, onRequestCalculate = props.onRequestCalculate, onChangeActiveCell = props.onChangeActiveCell, onChangeActiveSheet = props.onChangeActiveSheet, onChangeSelections = props.onChangeSelections, getSheetName = props.getSheetName, getSheetId = props.getSheetId, getCellData = props.getCellData, getNoteProp = props.getNote, getTextFormatRuns = props.getTextFormatRuns, getDataValidation = props.getDataValidation, getEffectiveFormat = props.getEffectiveFormat, getFormattedValueProp = props.getFormattedValue, getTooltipContent = props.getTooltipContent, errorResolutionComponent = props.errorResolutionComponent, getEffectiveValueProp = props.getEffectiveValue, getUserEnteredExtendedValue = props.getUserEnteredExtendedValue, getEffectiveExtendedValue = props.getEffectiveExtendedValue, getSheetRowCount = props.getSheetRowCount, getSheetColumnCount = props.getSheetColumnCount, getCellPopoverContent = props.getCellPopoverContent, onScroll = props.onScroll, onViewPortChange = props.onViewPortChange, _39 = props.windowConditionalFormats, windowConditionalFormats = _39 === void 0 ? false : _39, _40 = props.engineConditionalFormatResults, engineConditionalFormatResults = _40 === void 0 ? false : _40, onResize = props.onResize, onAutoResize = props.onAutoResize, onHideColumn = props.onHideColumn, onHideRow = props.onHideRow, onShowColumn = props.onShowColumn, onShowRow = props.onShowRow, onGroupRows = props.onGroupRows, onUngroupRows = props.onUngroupRows, onCollapseRowGroup = props.onCollapseRowGroup, onExpandRowGroup = props.onExpandRowGroup, onGroupColumns = props.onGroupColumns, onUngroupColumns = props.onUngroupColumns, onCollapseColumnGroup = props.onCollapseColumnGroup, onExpandColumnGroup = props.onExpandColumnGroup, onSetOutlineDepth = props.onSetOutlineDepth, onDeleteRow = props.onDeleteRow, onDeleteColumn = props.onDeleteColumn, onInsertRow = props.onInsertRow, onInsertColumn = props.onInsertColumn, onInsertCellsShiftDown = props.onInsertCellsShiftDown, onInsertCellsShiftRight = props.onInsertCellsShiftRight, onDeleteCellsShiftLeft = props.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = props.onDeleteCellsShiftUp, onClearContents = props.onClearContents, onMoveColumns = props.onMoveColumns, onMoveRows = props.onMoveRows, onSelectNextSheet = props.onSelectNextSheet, onSelectPreviousSheet = props.onSelectPreviousSheet, onCreateNewSheet = props.onCreateNewSheet, onKeyDown = props.onKeyDown, onChangeFormatting = props.onChangeFormatting, onRepeatFormatting = props.onRepeatFormatting, onClearFormatting = props.onClearFormatting, onRequestEditProtectedRange = props.onRequestEditProtectedRange, onMoveChart = props.onMoveChart, onResizeChart = props.onResizeChart, onDeleteChart = props.onDeleteChart, onMoveEmbed = props.onMoveEmbed, onResizeEmbed = props.onResizeEmbed, onDeleteEmbed = props.onDeleteEmbed, onRequestEditEmbed = props.onRequestEditEmbed, onMoveSlicer = props.onMoveSlicer, onResizeSlicer = props.onResizeSlicer, onDeleteSlicer = props.onDeleteSlicer, onRequestEditSlicer = props.onRequestEditSlicer, onFillRange = props.onFillRange, disableFillRightShortcut = props.disableFillRightShortcut, keymap = props.keymap, onCalculateNow = props.onCalculateNow, onRequestGoTo = props.onRequestGoTo, onMoveSelection = props.onMoveSelection, onInsertTime = props.onInsertTime, onInsertDate = props.onInsertDate, onInsertDateTime = props.onInsertDateTime, onInsertAutoSum = props.onInsertAutoSum, onUndo = props.onUndo, onRedo = props.onRedo, onPaste = props.onPaste, onCopy = props.onCopy, onCut = props.onCut, onSortColumn = props.onSortColumn, onSortTable = props.onSortTable, onFilterTable = props.onFilterTable, onFilterPivot = props.onFilterPivot, onResizeTable = props.onResizeTable, onRequestEditTable = props.onRequestEditTable, onRequestEditPivotTable = props.onRequestEditPivotTable, onRequestDeletePivotTable = props.onRequestDeletePivotTable, onRemoveTable = props.onRemoveTable, onCreateTable = props.onCreateTable, onInsertTableColumn = props.onInsertTableColumn, onDeleteTableColumn = props.onDeleteTableColumn, onInsertTableRow = props.onInsertTableRow, onDeleteTableRow = props.onDeleteTableRow, onCreateBasicFilter = props.onCreateBasicFilter, onRequestDefineNamedRange = props.onRequestDefineNamedRange, onRequestFormatCells = props.onRequestFormatCells, onRequestConditionalFormat = props.onRequestConditionalFormat, onRequestDataValidation = props.onRequestDataValidation, onRequestInsertComment = props.onRequestInsertComment, onRequestInsertLink = props.onRequestInsertLink, onFreezeColumn = props.onFreezeColumn, onFreezeRow = props.onFreezeRow, onUpdateNote = props.onUpdateNote, onProtectRange = props.onProtectRange, onUnProtectRange = props.onUnProtectRange, onSortRange = props.onSortRange, onRequestSearch = props.onRequestSearch, onRequestReplace = props.onRequestReplace, onRequestResize = props.onRequestResize, _41 = props.getRowHeaderText, getRowHeaderText = _41 === void 0 ? helpers_1.getDefaultRowHeader : _41, _42 = props.getColumnHeaderText, getColumnHeaderText = _42 === void 0 ? helpers_1.getDefaultColumnHeader : _42, getAdditionalCellSpacing = props.getAdditionalCellSpacing, _43 = props.tokenizer, defaultTokenizer = _43 === void 0 ? calculator_1.tokenize : _43, onChangeScale = props.onChangeScale, onRemoveLink = props.onRemoveLink, onSelectLink = props.onSelectLink, onSplitTextToColumns = props.onSplitTextToColumns, onRemoveDuplicates = props.onRemoveDuplicates, onRequestExpand = props.onRequestExpand, cellExpandPredicate = props.cellExpandPredicate, _44 = props.StructuredResult, StructuredResult = _44 === void 0 ? cell_structured_1.StructuredResultRenderer : _44, getMentions = props.getMentions, getStructuredPropertiesProp = props.getStructuredProperties, getFunctionParameterSuggestions = props.getFunctionParameterSuggestions, shouldFetchFunctionParameters = props.shouldFetchFunctionParameters, MentionTagComponent = props.MentionTagComponent, MentionDropdownItemComponent = props.MentionDropdownItemComponent, _45 = props.showSelectionResizeHandles, showSelectionResizeHandles = _45 === void 0 ? true : _45, enableMagicFill = props.enableMagicFill, _46 = props.enableQuickEdit, enableQuickEdit = _46 === void 0 ? true : _46, MagicFillComponent = props.MagicFillComponent, MagicFillContent = props.MagicFillContent, QuickEdit = props.QuickEdit, PasteMenu = props.PasteMenu, SuggestionAction = props.SuggestionAction, HiddenRowMarkers = props.HiddenRowMarkers, HiddenColumnMarkers = props.HiddenColumnMarkers, enableResizerOverflow = props.enableResizerOverflow, className = props.className, _47 = props.defaultFontSizePoint, defaultFontSizePoint = _47 === void 0 ? config_1.DEFAULT_FONT_SIZE_PT : _47, readonly = props.readonly, _48 = props.isComparing, isComparing = _48 === void 0 ? false : _48, getCellDiff = props.getCellDiff, enableDataBoundaryNavigation = props.enableDataBoundaryNavigation, footerHeight = props.footerHeight, footerComponent = props.footerComponent, arrowComponents = props.arrowComponents,
111
+ var licenseKey = props.licenseKey, sheetId = props.sheetId, instanceId = props.instanceId, _a = props.activeCell, activeCell = _a === void 0 ? config_1.DEFAULT_ACTIVE_CELL : _a, _b = props.selections, selections = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, _c = props.frozenColumnCount, frozenColumnCount = _c === void 0 ? 0 : _c, _d = props.frozenRowCount, frozenRowCount = _d === void 0 ? 0 : _d, _e = props.rowCount, rowCount = _e === void 0 ? config_1.DEFAULT_ROW_COUNT : _e, _f = props.columnCount, columnCount = _f === void 0 ? config_1.DEFAULT_COLUMN_COUNT : _f, autoFocus = props.autoFocus, basicFilter = props.basicFilter, tables = props.tables, namedRanges = props.namedRanges, _g = props.bandedRanges, bandedRanges = _g === void 0 ? config_1.DEFAULT_ARRAY : _g, _h = props.tableBorderColor, tableBorderColor = _h === void 0 ? "#008000" : _h, _j = props.filterIconColor, filterIconColor = _j === void 0 ? "#008000" : _j, conditionalFormats = props.conditionalFormats, _k = props.showFilterIcon, showFilterIcon = _k === void 0 ? true : _k, _l = props.showCalculatedColumnIcon, showCalculatedColumnIcon = _l === void 0 ? true : _l, _m = props.showHeaders, showHeaders = _m === void 0 ? true : _m, _o = props.defaultColumnWidth, defaultColumnWidth = _o === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _o, _p = props.defaultRowHeight, defaultRowHeight = _p === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _p, _q = props.columnHeaderHeight, columnHeaderHeight = _q === void 0 ? config_1.COLUMN_HEADER_HEIGHT : _q, _r = props.rowHeaderWidth, rowHeaderWidth = _r === void 0 ? config_1.ROW_HEADER_WIDTH : _r, _s = props.gridLineColor, gridLineColor = _s === void 0 ? config_1.GRIDLINE_COLOR : _s, _t = props.cellBackgroundColor, cellBackgroundColor = _t === void 0 ? config_1.DEFAULT_CELL_BACKGROUND_COLOR : _t, _u = props.cellColor, cellColor = _u === void 0 ? config_1.DEFAULT_CELL_COLOR : _u, _v = props.headerBorderColor, headerBorderColor = _v === void 0 ? config_1.DEFAULT_HEADER_BORDER_COLOR : _v, _w = props.headerBackgroundColor, headerBackgroundColor = _w === void 0 ? config_1.DEFAULT_HEADER_BG : _w, _x = props.headerColor, headerColor = _x === void 0 ? config_1.DEFAULT_HEADER_COLOR : _x, _y = props.headerActiveBackgroundColor, headerActiveBackgroundColor = _y === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_BG : _y, _z = props.headerSelectedBackgroundColor, headerSelectedBackgroundColor = _z === void 0 ? config_1.DEFAULT_HEADER_SELECTED_BG : _z, _0 = props.headerSelectedColor, headerSelectedColor = _0 === void 0 ? "white" : _0, _1 = props.headerTableBackgroundColor, headerTableBackgroundColor = _1 === void 0 ? config_1.DEFAULT_HEADER_TABLE_BG : _1, _2 = props.headerTableActiveBackgroundColor, headerTableActiveBackgroundColor = _2 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_TABLE_BG : _2, _3 = props.headerTableSelectedBackgroundColor, headerTableSelectedBackgroundColor = _3 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_TABLE_BG : _3, _4 = props.frozenShadowColor, frozenShadowColor = _4 === void 0 ? headerBorderColor : _4, _5 = props.frozenShadowThickness, frozenShadowThickness = _5 === void 0 ? 1 : _5, _6 = props.selectionBackgroundColor, selectionBackgroundColor = _6 === void 0 ? config_1.SELECTION_BG : _6, _7 = props.selectionBorderColor, selectionBorderColor = _7 === void 0 ? config_1.SELECTION_BORDER : _7, _8 = props.selectionDragBorderColor, selectionDragBorderColor = _8 === void 0 ? config_1.SELECTION_BORDER : _8, chartSelectedColor = props.chartSelectedColor, _9 = props.chipBackgroundColor, chipBackgroundColor = _9 === void 0 ? config_1.CHIP_COLOR : _9, _10 = props.merges, merges = _10 === void 0 ? config_1.DEFAULT_ARRAY : _10, borderStyles = props.borderStyles, protectedRanges = props.protectedRanges, _11 = props.isWorkbookProtected, isWorkbookProtectedProp = _11 === void 0 ? false : _11, getSheetProtection = props.getSheetProtection, pivotTables = props.pivotTables, charts = props.charts, embeds = props.embeds, slicers = props.slicers, _12 = props.rowMetadata, rowMetadata = _12 === void 0 ? config_1.DEFAULT_ARRAY : _12, _13 = props.columnMetadata, columnMetadata = _13 === void 0 ? config_1.DEFAULT_ARRAY : _13, _14 = props.scale, scale = _14 === void 0 ? 1 : _14, _15 = props.zoomSpeed, zoomSpeed = _15 === void 0 ? 1 : _15, _16 = props.overscanCount, overscanCount = _16 === void 0 ? 3 : _16, _17 = props.enableEditOnEnterKey, enableEditOnEnterKey = _17 === void 0 ? true : _17, _18 = props.enableTextOverflow, enableTextOverflow = _18 === void 0 ? true : _18, _showGridLines = props.showGridLines, _19 = props.showFormulas, showFormulas = _19 === void 0 ? false : _19, _20 = props.protectFormulas, protectFormulas = _20 === void 0 ? false : _20, _21 = props.showFrozenSeparator, showFrozenSeparator = _21 === void 0 ? true : _21, _22 = props.HeaderCell, HeaderCell = _22 === void 0 ? header_cell_1.HeaderCell : _22, _23 = props.Cell, Cell = _23 === void 0 ? cell_1.Cell : _23, _24 = props.SelectionTitleComponent, SelectionTitleComponent = _24 === void 0 ? title_1.SelectionTitle : _24, _25 = props.CellEditor, CellEditor = _25 === void 0 ? cell_editor_1.CellEditor : _25, CellTooltip = props.CellTooltip, _26 = props.ContextMenu, ContextMenu = _26 === void 0 ? context_menu_1.ContextMenu : _26, _27 = props.ContextMenuWrapper, ContextMenuWrapper = _27 === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _27, _28 = props.FilterBox, FilterBox = _28 === void 0 ? filter_box_1.FilterBox : _28, _29 = props.HeaderMoveDragComponent, HeaderMoveDragComponent = _29 === void 0 ? header_move_1.HeaderMoveDragComponent : _29, SuggestionsDropdown = props.SuggestionsDropdown, _30 = props.stickyEditor, stickyEditor = _30 === void 0 ? true : _30, _31 = props.scrollSnap, scrollSnap = _31 === void 0 ? false : _31, scrollThrottleTimeout = props.scrollThrottleTimeout, preventBrowserDefaultScroll = props.preventBrowserDefaultScroll, _32 = props.mouseMoveThrottleTimeout, mouseMoveThrottleTimeout = _32 === void 0 ? 60 : _32, _33 = props.tooltipIntentInterval, tooltipIntentInterval = _33 === void 0 ? 60 : _33, selectionPolicy = props.selectionPolicy, users = props.users, userId = props.userId, renderCollaboratorCursor = props.renderCollaboratorCursor, functionDescriptions = props.functionDescriptions, _34 = props.showHeaderMenuButton, showHeaderMenuButton = _34 === void 0 ? true : _34, _35 = props.scrollbarSize, scrollbarSize = _35 === void 0 ? config_1.SCROLLBAR_SIZE : _35, _36 = props.theme, theme = _36 === void 0 ? config_1.defaultSpreadsheetTheme : _36, _37 = props.showNotes, showNotes = _37 === void 0 ? true : _37, _38 = props.showComments, showComments = _38 === void 0 ? true : _38, locale = props.locale, agentSuggestions = props.agentSuggestions, onReviewSuggestion = props.onReviewSuggestion, onShowFormulas = props.onShowFormulas, getDataRowCount = props.getDataRowCount, getChartComponent = props.getChartComponent, getEmbedComponent = props.getEmbedComponent, getSlicerComponent = props.getSlicerComponent, onChange = props.onChange, onChangeBatch = props.onChangeBatch, onExpandCollapse = props.onExpandCollapse, onPivotDrillDown = props.onPivotDrillDown, onDelete = props.onDelete, onChangeEditorValue = props.onChangeEditorValue, onFill = props.onFill, onRequestCalculate = props.onRequestCalculate, onChangeActiveCell = props.onChangeActiveCell, onChangeActiveSheet = props.onChangeActiveSheet, onChangeSelections = props.onChangeSelections, getSheetName = props.getSheetName, getSheetId = props.getSheetId, getCellData = props.getCellData, getNoteProp = props.getNote, getTextFormatRuns = props.getTextFormatRuns, getDataValidation = props.getDataValidation, getEffectiveFormat = props.getEffectiveFormat, getFormattedValueProp = props.getFormattedValue, getTooltipContent = props.getTooltipContent, errorResolutionComponent = props.errorResolutionComponent, getEffectiveValueProp = props.getEffectiveValue, getUserEnteredExtendedValue = props.getUserEnteredExtendedValue, getEffectiveExtendedValue = props.getEffectiveExtendedValue, getSheetRowCount = props.getSheetRowCount, getSheetColumnCount = props.getSheetColumnCount, getCellPopoverContent = props.getCellPopoverContent, onScroll = props.onScroll, onViewPortChange = props.onViewPortChange, _39 = props.windowConditionalFormats, windowConditionalFormats = _39 === void 0 ? false : _39, _40 = props.engineConditionalFormatResults, engineConditionalFormatResults = _40 === void 0 ? false : _40, onResize = props.onResize, onAutoResize = props.onAutoResize, onHideColumn = props.onHideColumn, onHideRow = props.onHideRow, onShowColumn = props.onShowColumn, onShowRow = props.onShowRow, onGroupRows = props.onGroupRows, onUngroupRows = props.onUngroupRows, onCollapseRowGroup = props.onCollapseRowGroup, onExpandRowGroup = props.onExpandRowGroup, onGroupColumns = props.onGroupColumns, onUngroupColumns = props.onUngroupColumns, onCollapseColumnGroup = props.onCollapseColumnGroup, onExpandColumnGroup = props.onExpandColumnGroup, onSetOutlineDepth = props.onSetOutlineDepth, onDeleteRow = props.onDeleteRow, onDeleteColumn = props.onDeleteColumn, onInsertRow = props.onInsertRow, onInsertColumn = props.onInsertColumn, onInsertCellsShiftDown = props.onInsertCellsShiftDown, onInsertCellsShiftRight = props.onInsertCellsShiftRight, onDeleteCellsShiftLeft = props.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = props.onDeleteCellsShiftUp, onClearContents = props.onClearContents, onMoveColumns = props.onMoveColumns, onMoveRows = props.onMoveRows, onSelectNextSheet = props.onSelectNextSheet, onSelectPreviousSheet = props.onSelectPreviousSheet, onCreateNewSheet = props.onCreateNewSheet, onKeyDown = props.onKeyDown, onChangeFormatting = props.onChangeFormatting, onRepeatFormatting = props.onRepeatFormatting, onClearFormatting = props.onClearFormatting, onRequestEditProtectedRange = props.onRequestEditProtectedRange, onMoveChart = props.onMoveChart, onResizeChart = props.onResizeChart, onDeleteChart = props.onDeleteChart, onMoveEmbed = props.onMoveEmbed, onResizeEmbed = props.onResizeEmbed, onDeleteEmbed = props.onDeleteEmbed, onRequestEditEmbed = props.onRequestEditEmbed, onMoveSlicer = props.onMoveSlicer, onResizeSlicer = props.onResizeSlicer, onDeleteSlicer = props.onDeleteSlicer, onRequestEditSlicer = props.onRequestEditSlicer, onFillRange = props.onFillRange, disableFillRightShortcut = props.disableFillRightShortcut, keymap = props.keymap, onCalculateNow = props.onCalculateNow, onRequestGoTo = props.onRequestGoTo, onMoveSelection = props.onMoveSelection, onInsertTime = props.onInsertTime, onInsertDate = props.onInsertDate, onInsertDateTime = props.onInsertDateTime, onInsertAutoSum = props.onInsertAutoSum, onUndo = props.onUndo, onRedo = props.onRedo, onPaste = props.onPaste, onCopy = props.onCopy, onCut = props.onCut, onSortColumn = props.onSortColumn, onSortTable = props.onSortTable, onFilterTable = props.onFilterTable, onFilterPivot = props.onFilterPivot, onResizeTable = props.onResizeTable, onRequestEditTable = props.onRequestEditTable, onRequestEditPivotTable = props.onRequestEditPivotTable, onRequestDeletePivotTable = props.onRequestDeletePivotTable, onRemoveTable = props.onRemoveTable, onCreateTable = props.onCreateTable, onInsertTableColumn = props.onInsertTableColumn, onDeleteTableColumn = props.onDeleteTableColumn, onInsertTableRow = props.onInsertTableRow, onDeleteTableRow = props.onDeleteTableRow, onCreateBasicFilter = props.onCreateBasicFilter, onRequestDefineNamedRange = props.onRequestDefineNamedRange, onRequestFormatCells = props.onRequestFormatCells, onRequestConditionalFormat = props.onRequestConditionalFormat, onRequestDataValidation = props.onRequestDataValidation, onRequestInsertComment = props.onRequestInsertComment, onRequestInsertLink = props.onRequestInsertLink, onFreezeColumn = props.onFreezeColumn, onFreezeRow = props.onFreezeRow, onUpdateNote = props.onUpdateNote, onProtectRange = props.onProtectRange, onUnProtectRange = props.onUnProtectRange, onSortRange = props.onSortRange, onRequestSearch = props.onRequestSearch, onRequestReplace = props.onRequestReplace, onRequestResize = props.onRequestResize, _41 = props.getRowHeaderText, getRowHeaderText = _41 === void 0 ? helpers_1.getDefaultRowHeader : _41, _42 = props.getColumnHeaderText, getColumnHeaderText = _42 === void 0 ? helpers_1.getDefaultColumnHeader : _42, getAdditionalCellSpacing = props.getAdditionalCellSpacing, _43 = props.tokenizer, defaultTokenizer = _43 === void 0 ? calculator_1.tokenize : _43, onChangeScale = props.onChangeScale, onRemoveLink = props.onRemoveLink, onSelectLink = props.onSelectLink, onSplitTextToColumns = props.onSplitTextToColumns, onRemoveDuplicates = props.onRemoveDuplicates, onGoalSeek = props.onGoalSeek, onSubtotal = props.onSubtotal, onAdvancedFilter = props.onAdvancedFilter, onRequestExpand = props.onRequestExpand, cellExpandPredicate = props.cellExpandPredicate, _44 = props.StructuredResult, StructuredResult = _44 === void 0 ? cell_structured_1.StructuredResultRenderer : _44, getMentions = props.getMentions, getStructuredPropertiesProp = props.getStructuredProperties, getFunctionParameterSuggestions = props.getFunctionParameterSuggestions, shouldFetchFunctionParameters = props.shouldFetchFunctionParameters, MentionTagComponent = props.MentionTagComponent, MentionDropdownItemComponent = props.MentionDropdownItemComponent, _45 = props.showSelectionResizeHandles, showSelectionResizeHandles = _45 === void 0 ? true : _45, enableMagicFill = props.enableMagicFill, _46 = props.enableQuickEdit, enableQuickEdit = _46 === void 0 ? true : _46, MagicFillComponent = props.MagicFillComponent, MagicFillContent = props.MagicFillContent, QuickEdit = props.QuickEdit, PasteMenu = props.PasteMenu, SuggestionAction = props.SuggestionAction, HiddenRowMarkers = props.HiddenRowMarkers, HiddenColumnMarkers = props.HiddenColumnMarkers, enableResizerOverflow = props.enableResizerOverflow, className = props.className, _47 = props.defaultFontSizePoint, defaultFontSizePoint = _47 === void 0 ? config_1.DEFAULT_FONT_SIZE_PT : _47, readonly = props.readonly, _48 = props.isComparing, isComparing = _48 === void 0 ? false : _48, getCellDiff = props.getCellDiff, enableDataBoundaryNavigation = props.enableDataBoundaryNavigation, footerHeight = props.footerHeight, footerComponent = props.footerComponent, arrowComponents = props.arrowComponents,
108
112
  // Host-driven filter props. `hostHiddenRowRanges`
109
113
  // supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
110
114
  // column's distinct values. Both let a million-row filter render without scanning
@@ -116,7 +120,7 @@ function CanvasGridComponent(props, forwardedRef) {
116
120
  // defaults to `getFormattedValue` inside `useGetValuesFromRange`.
117
121
  getValidationSourceValue = props.getValidationSourceValue,
118
122
  // Unused props only for api
119
- onChangeBorder = props.onChangeBorder, onDuplicateSheet = props.onDuplicateSheet, onCreateConditionalFormattingRule = props.onCreateConditionalFormattingRule, onDeleteConditionalFormattingRule = props.onDeleteConditionalFormattingRule, onUpdateConditionalFormattingRule = props.onUpdateConditionalFormattingRule, onCreateDataValidationRule = props.onCreateDataValidationRule, onUpdateDataValidationRule = props.onUpdateDataValidationRule, onDeleteDataValidationRule = props.onDeleteDataValidationRule, onCreateChart = props.onCreateChart, onDeleteSheet = props.onDeleteSheet, onCreateEmbed = props.onCreateEmbed, onDecreaseIndent = props.onDecreaseIndent, onIncreaseIndent = props.onIncreaseIndent, onChangeTheme = props.onChangeTheme, onChangeDecimals = props.onChangeDecimals, onUpdateSheet = props.onUpdateSheet, onChangeBatchStream = props.onChangeBatchStream, onBlur = props.onBlur, rest = tslib_1.__rest(props, ["licenseKey", "sheetId", "instanceId", "activeCell", "selections", "frozenColumnCount", "frozenRowCount", "rowCount", "columnCount", "autoFocus", "basicFilter", "tables", "namedRanges", "bandedRanges", "tableBorderColor", "filterIconColor", "conditionalFormats", "showFilterIcon", "showCalculatedColumnIcon", "showHeaders", "defaultColumnWidth", "defaultRowHeight", "columnHeaderHeight", "rowHeaderWidth", "gridLineColor", "cellBackgroundColor", "cellColor", "headerBorderColor", "headerBackgroundColor", "headerColor", "headerActiveBackgroundColor", "headerSelectedBackgroundColor", "headerSelectedColor", "headerTableBackgroundColor", "headerTableActiveBackgroundColor", "headerTableSelectedBackgroundColor", "frozenShadowColor", "frozenShadowThickness", "selectionBackgroundColor", "selectionBorderColor", "selectionDragBorderColor", "chartSelectedColor", "chipBackgroundColor", "merges", "borderStyles", "protectedRanges", "isWorkbookProtected", "getSheetProtection", "pivotTables", "charts", "embeds", "slicers", "rowMetadata", "columnMetadata", "scale", "zoomSpeed", "overscanCount", "enableEditOnEnterKey", "enableTextOverflow", "showGridLines", "showFormulas", "protectFormulas", "showFrozenSeparator", "HeaderCell", "Cell", "SelectionTitleComponent", "CellEditor", "CellTooltip", "ContextMenu", "ContextMenuWrapper", "FilterBox", "HeaderMoveDragComponent", "SuggestionsDropdown", "stickyEditor", "scrollSnap", "scrollThrottleTimeout", "preventBrowserDefaultScroll", "mouseMoveThrottleTimeout", "tooltipIntentInterval", "selectionPolicy", "users", "userId", "renderCollaboratorCursor", "functionDescriptions", "showHeaderMenuButton", "scrollbarSize", "theme", "showNotes", "showComments", "locale", "agentSuggestions", "onReviewSuggestion", "onShowFormulas", "getDataRowCount", "getChartComponent", "getEmbedComponent", "getSlicerComponent", "onChange", "onChangeBatch", "onExpandCollapse", "onPivotDrillDown", "onDelete", "onChangeEditorValue", "onFill", "onRequestCalculate", "onChangeActiveCell", "onChangeActiveSheet", "onChangeSelections", "getSheetName", "getSheetId", "getCellData", "getNote", "getTextFormatRuns", "getDataValidation", "getEffectiveFormat", "getFormattedValue", "getTooltipContent", "errorResolutionComponent", "getEffectiveValue", "getUserEnteredExtendedValue", "getEffectiveExtendedValue", "getSheetRowCount", "getSheetColumnCount", "getCellPopoverContent", "onScroll", "onViewPortChange", "windowConditionalFormats", "engineConditionalFormatResults", "onResize", "onAutoResize", "onHideColumn", "onHideRow", "onShowColumn", "onShowRow", "onGroupRows", "onUngroupRows", "onCollapseRowGroup", "onExpandRowGroup", "onGroupColumns", "onUngroupColumns", "onCollapseColumnGroup", "onExpandColumnGroup", "onSetOutlineDepth", "onDeleteRow", "onDeleteColumn", "onInsertRow", "onInsertColumn", "onInsertCellsShiftDown", "onInsertCellsShiftRight", "onDeleteCellsShiftLeft", "onDeleteCellsShiftUp", "onClearContents", "onMoveColumns", "onMoveRows", "onSelectNextSheet", "onSelectPreviousSheet", "onCreateNewSheet", "onKeyDown", "onChangeFormatting", "onRepeatFormatting", "onClearFormatting", "onRequestEditProtectedRange", "onMoveChart", "onResizeChart", "onDeleteChart", "onMoveEmbed", "onResizeEmbed", "onDeleteEmbed", "onRequestEditEmbed", "onMoveSlicer", "onResizeSlicer", "onDeleteSlicer", "onRequestEditSlicer", "onFillRange", "disableFillRightShortcut", "keymap", "onCalculateNow", "onRequestGoTo", "onMoveSelection", "onInsertTime", "onInsertDate", "onInsertDateTime", "onInsertAutoSum", "onUndo", "onRedo", "onPaste", "onCopy", "onCut", "onSortColumn", "onSortTable", "onFilterTable", "onFilterPivot", "onResizeTable", "onRequestEditTable", "onRequestEditPivotTable", "onRequestDeletePivotTable", "onRemoveTable", "onCreateTable", "onInsertTableColumn", "onDeleteTableColumn", "onInsertTableRow", "onDeleteTableRow", "onCreateBasicFilter", "onRequestDefineNamedRange", "onRequestFormatCells", "onRequestConditionalFormat", "onRequestDataValidation", "onRequestInsertComment", "onRequestInsertLink", "onFreezeColumn", "onFreezeRow", "onUpdateNote", "onProtectRange", "onUnProtectRange", "onSortRange", "onRequestSearch", "onRequestReplace", "onRequestResize", "getRowHeaderText", "getColumnHeaderText", "getAdditionalCellSpacing", "tokenizer", "onChangeScale", "onRemoveLink", "onSelectLink", "onSplitTextToColumns", "onRemoveDuplicates", "onRequestExpand", "cellExpandPredicate", "StructuredResult", "getMentions", "getStructuredProperties", "getFunctionParameterSuggestions", "shouldFetchFunctionParameters", "MentionTagComponent", "MentionDropdownItemComponent", "showSelectionResizeHandles", "enableMagicFill", "enableQuickEdit", "MagicFillComponent", "MagicFillContent", "QuickEdit", "PasteMenu", "SuggestionAction", "HiddenRowMarkers", "HiddenColumnMarkers", "enableResizerOverflow", "className", "defaultFontSizePoint", "readonly", "isComparing", "getCellDiff", "enableDataBoundaryNavigation", "footerHeight", "footerComponent", "arrowComponents", "hostHiddenRowRanges", "getFilterValues", "getFilterColors", "getValidationSourceValue", "onChangeBorder", "onDuplicateSheet", "onCreateConditionalFormattingRule", "onDeleteConditionalFormattingRule", "onUpdateConditionalFormattingRule", "onCreateDataValidationRule", "onUpdateDataValidationRule", "onDeleteDataValidationRule", "onCreateChart", "onDeleteSheet", "onCreateEmbed", "onDecreaseIndent", "onIncreaseIndent", "onChangeTheme", "onChangeDecimals", "onUpdateSheet", "onChangeBatchStream", "onBlur"]);
123
+ onChangeBorder = props.onChangeBorder, onDuplicateSheet = props.onDuplicateSheet, onCreateConditionalFormattingRule = props.onCreateConditionalFormattingRule, onDeleteConditionalFormattingRule = props.onDeleteConditionalFormattingRule, onUpdateConditionalFormattingRule = props.onUpdateConditionalFormattingRule, onCreateDataValidationRule = props.onCreateDataValidationRule, onUpdateDataValidationRule = props.onUpdateDataValidationRule, onDeleteDataValidationRule = props.onDeleteDataValidationRule, onCreateChart = props.onCreateChart, onDeleteSheet = props.onDeleteSheet, onCreateEmbed = props.onCreateEmbed, onDecreaseIndent = props.onDecreaseIndent, onIncreaseIndent = props.onIncreaseIndent, onChangeTheme = props.onChangeTheme, onChangeDecimals = props.onChangeDecimals, onUpdateSheet = props.onUpdateSheet, onChangeBatchStream = props.onChangeBatchStream, onBlur = props.onBlur, rest = tslib_1.__rest(props, ["licenseKey", "sheetId", "instanceId", "activeCell", "selections", "frozenColumnCount", "frozenRowCount", "rowCount", "columnCount", "autoFocus", "basicFilter", "tables", "namedRanges", "bandedRanges", "tableBorderColor", "filterIconColor", "conditionalFormats", "showFilterIcon", "showCalculatedColumnIcon", "showHeaders", "defaultColumnWidth", "defaultRowHeight", "columnHeaderHeight", "rowHeaderWidth", "gridLineColor", "cellBackgroundColor", "cellColor", "headerBorderColor", "headerBackgroundColor", "headerColor", "headerActiveBackgroundColor", "headerSelectedBackgroundColor", "headerSelectedColor", "headerTableBackgroundColor", "headerTableActiveBackgroundColor", "headerTableSelectedBackgroundColor", "frozenShadowColor", "frozenShadowThickness", "selectionBackgroundColor", "selectionBorderColor", "selectionDragBorderColor", "chartSelectedColor", "chipBackgroundColor", "merges", "borderStyles", "protectedRanges", "isWorkbookProtected", "getSheetProtection", "pivotTables", "charts", "embeds", "slicers", "rowMetadata", "columnMetadata", "scale", "zoomSpeed", "overscanCount", "enableEditOnEnterKey", "enableTextOverflow", "showGridLines", "showFormulas", "protectFormulas", "showFrozenSeparator", "HeaderCell", "Cell", "SelectionTitleComponent", "CellEditor", "CellTooltip", "ContextMenu", "ContextMenuWrapper", "FilterBox", "HeaderMoveDragComponent", "SuggestionsDropdown", "stickyEditor", "scrollSnap", "scrollThrottleTimeout", "preventBrowserDefaultScroll", "mouseMoveThrottleTimeout", "tooltipIntentInterval", "selectionPolicy", "users", "userId", "renderCollaboratorCursor", "functionDescriptions", "showHeaderMenuButton", "scrollbarSize", "theme", "showNotes", "showComments", "locale", "agentSuggestions", "onReviewSuggestion", "onShowFormulas", "getDataRowCount", "getChartComponent", "getEmbedComponent", "getSlicerComponent", "onChange", "onChangeBatch", "onExpandCollapse", "onPivotDrillDown", "onDelete", "onChangeEditorValue", "onFill", "onRequestCalculate", "onChangeActiveCell", "onChangeActiveSheet", "onChangeSelections", "getSheetName", "getSheetId", "getCellData", "getNote", "getTextFormatRuns", "getDataValidation", "getEffectiveFormat", "getFormattedValue", "getTooltipContent", "errorResolutionComponent", "getEffectiveValue", "getUserEnteredExtendedValue", "getEffectiveExtendedValue", "getSheetRowCount", "getSheetColumnCount", "getCellPopoverContent", "onScroll", "onViewPortChange", "windowConditionalFormats", "engineConditionalFormatResults", "onResize", "onAutoResize", "onHideColumn", "onHideRow", "onShowColumn", "onShowRow", "onGroupRows", "onUngroupRows", "onCollapseRowGroup", "onExpandRowGroup", "onGroupColumns", "onUngroupColumns", "onCollapseColumnGroup", "onExpandColumnGroup", "onSetOutlineDepth", "onDeleteRow", "onDeleteColumn", "onInsertRow", "onInsertColumn", "onInsertCellsShiftDown", "onInsertCellsShiftRight", "onDeleteCellsShiftLeft", "onDeleteCellsShiftUp", "onClearContents", "onMoveColumns", "onMoveRows", "onSelectNextSheet", "onSelectPreviousSheet", "onCreateNewSheet", "onKeyDown", "onChangeFormatting", "onRepeatFormatting", "onClearFormatting", "onRequestEditProtectedRange", "onMoveChart", "onResizeChart", "onDeleteChart", "onMoveEmbed", "onResizeEmbed", "onDeleteEmbed", "onRequestEditEmbed", "onMoveSlicer", "onResizeSlicer", "onDeleteSlicer", "onRequestEditSlicer", "onFillRange", "disableFillRightShortcut", "keymap", "onCalculateNow", "onRequestGoTo", "onMoveSelection", "onInsertTime", "onInsertDate", "onInsertDateTime", "onInsertAutoSum", "onUndo", "onRedo", "onPaste", "onCopy", "onCut", "onSortColumn", "onSortTable", "onFilterTable", "onFilterPivot", "onResizeTable", "onRequestEditTable", "onRequestEditPivotTable", "onRequestDeletePivotTable", "onRemoveTable", "onCreateTable", "onInsertTableColumn", "onDeleteTableColumn", "onInsertTableRow", "onDeleteTableRow", "onCreateBasicFilter", "onRequestDefineNamedRange", "onRequestFormatCells", "onRequestConditionalFormat", "onRequestDataValidation", "onRequestInsertComment", "onRequestInsertLink", "onFreezeColumn", "onFreezeRow", "onUpdateNote", "onProtectRange", "onUnProtectRange", "onSortRange", "onRequestSearch", "onRequestReplace", "onRequestResize", "getRowHeaderText", "getColumnHeaderText", "getAdditionalCellSpacing", "tokenizer", "onChangeScale", "onRemoveLink", "onSelectLink", "onSplitTextToColumns", "onRemoveDuplicates", "onGoalSeek", "onSubtotal", "onAdvancedFilter", "onRequestExpand", "cellExpandPredicate", "StructuredResult", "getMentions", "getStructuredProperties", "getFunctionParameterSuggestions", "shouldFetchFunctionParameters", "MentionTagComponent", "MentionDropdownItemComponent", "showSelectionResizeHandles", "enableMagicFill", "enableQuickEdit", "MagicFillComponent", "MagicFillContent", "QuickEdit", "PasteMenu", "SuggestionAction", "HiddenRowMarkers", "HiddenColumnMarkers", "enableResizerOverflow", "className", "defaultFontSizePoint", "readonly", "isComparing", "getCellDiff", "enableDataBoundaryNavigation", "footerHeight", "footerComponent", "arrowComponents", "hostHiddenRowRanges", "getFilterValues", "getFilterColors", "getValidationSourceValue", "onChangeBorder", "onDuplicateSheet", "onCreateConditionalFormattingRule", "onDeleteConditionalFormattingRule", "onUpdateConditionalFormattingRule", "onCreateDataValidationRule", "onUpdateDataValidationRule", "onDeleteDataValidationRule", "onCreateChart", "onDeleteSheet", "onCreateEmbed", "onDecreaseIndent", "onIncreaseIndent", "onChangeTheme", "onChangeDecimals", "onUpdateSheet", "onChangeBatchStream", "onBlur"]);
120
124
  /**
121
125
  * Fire onBlur only when the cell editor blurs to an element outside the
122
126
  * spreadsheet. Routed through `useEditable` so we hook the always-focused
@@ -1439,6 +1443,23 @@ function CanvasGridComponent(props, forwardedRef) {
1439
1443
  if (rule.allowBlank && isBlank) {
1440
1444
  return undefined;
1441
1445
  }
1446
+ // A typed formula is validated on its RESULT once the calculator has
1447
+ // run (Excel enters `=5` into a whole-number cell and checks the 5) —
1448
+ // its text can never be decided here, so it stays flag-only.
1449
+ if ((0, excel_validation_kinds_1.isFormulaEntry)(value)) {
1450
+ return undefined;
1451
+ }
1452
+ // Excel's Whole number / Time / Text length kinds (authored or imported
1453
+ // with `xlsxSource`) are decided synchronously from the typed text when
1454
+ // their bounds are literals — Excel blocks a decimal in a whole-number
1455
+ // cell at entry, not after a recalc.
1456
+ var excelKindVerdict = (0, excel_validation_kinds_1.checkExcelValidationValue)(rule, value);
1457
+ if (excelKindVerdict !== undefined) {
1458
+ var excelDecision = (0, validation_1.decideValidationCommit)(alert, excelKindVerdict);
1459
+ return excelDecision === "proceed"
1460
+ ? undefined
1461
+ : { decision: excelDecision, alert: alert };
1462
+ }
1442
1463
  if ((0, utils_1.isDataValidationFormulaRule)(rule)) {
1443
1464
  // Enforce synchronously only where `checkBooleanRule` can decide the typed
1444
1465
  // value without the calculator: CUSTOM_FORMULA's sync branch is a stub, the
@@ -1995,28 +2016,17 @@ function CanvasGridComponent(props, forwardedRef) {
1995
2016
  * shown in tooltip
1996
2017
  */
1997
2018
  /**
1998
- * Compose host tooltip content with the data-validation input message.
1999
- * Host-provided content wins; otherwise, when the cell is not already showing
2000
- * an error / invalid marker, surface the rule's input message (Excel's
2001
- * "show input message when cell is selected").
2019
+ * Compose host tooltip content with the data-validation messages. Host-
2020
+ * provided content wins; otherwise the rule's input message (Excel's "show
2021
+ * input message when cell is selected") or, on an Invalid cell, the rule's
2022
+ * custom error alert text see `getDataValidationTooltipContent`.
2002
2023
  */
2003
2024
  var getTooltipContentWithValidation = (0, react_1.useCallback)(function (tooltipSheetId, rowIndex, columnIndex) {
2004
2025
  var hostContent = getTooltipContent === null || getTooltipContent === void 0 ? void 0 : getTooltipContent(tooltipSheetId, rowIndex, columnIndex);
2005
2026
  if (hostContent != null) {
2006
2027
  return hostContent;
2007
2028
  }
2008
- var error = getErrorValue(tooltipSheetId, rowIndex, columnIndex);
2009
- if ((error === null || error === void 0 ? void 0 : error.type) === "Error" || (error === null || error === void 0 ? void 0 : error.type) === "Invalid") {
2010
- return undefined;
2011
- }
2012
- var rule = getDataValidationRule(tooltipSheetId, rowIndex, columnIndex);
2013
- var inputMessage = rule === null || rule === void 0 ? void 0 : rule.inputMessage;
2014
- if (!inputMessage || (!inputMessage.title && !inputMessage.message)) {
2015
- return undefined;
2016
- }
2017
- return (react_1.default.createElement("div", { className: "bg-rnc-background text-rnc-foreground p-2 shadow-md rounded-md border-l-4 border-solid border-l-blue-700 max-w-[300px] flex flex-col gap-0.5" },
2018
- inputMessage.title ? (react_1.default.createElement("div", { className: "font-bold font-system text-sm" }, inputMessage.title)) : null,
2019
- inputMessage.message ? (react_1.default.createElement("div", { className: "text-xs font-system whitespace-pre-wrap" }, inputMessage.message)) : null));
2029
+ return (0, validation_tooltip_1.getDataValidationTooltipContent)(getDataValidationRule(tooltipSheetId, rowIndex, columnIndex), getErrorValue(tooltipSheetId, rowIndex, columnIndex));
2020
2030
  }, [getTooltipContent, getErrorValue, getDataValidationRule]);
2021
2031
  var getTooltip = (0, use_get_tooltip_1.useGetTooltip)({
2022
2032
  sheetId: sheetId,
@@ -2145,6 +2155,21 @@ function CanvasGridComponent(props, forwardedRef) {
2145
2155
  getSheetName,
2146
2156
  onRequestCalculate,
2147
2157
  ]);
2158
+ /**
2159
+ * Watch Window: "Add to Watch Window" is offered only while a
2160
+ * `WatchWindowHost` is mounted; the live getters are published below once
2161
+ * `navigateToSheetRange` exists.
2162
+ */
2163
+ var addWatch = (0, watch_window_atom_1.useAddWatch)();
2164
+ var isWatchWindowMounted = (0, watch_window_atom_1.useIsWatchWindowMounted)();
2165
+ var setWatchWindowContext = (0, watch_window_atom_1.useSetWatchWindowContext)();
2166
+ var requestAddWatch = (0, react_1.useMemo)(function () {
2167
+ if (!isWatchWindowMounted)
2168
+ return undefined;
2169
+ return function (watchSheetId, cell) {
2170
+ return addWatch(tslib_1.__assign({ sheetId: watchSheetId }, cell));
2171
+ };
2172
+ }, [isWatchWindowMounted, addWatch]);
2148
2173
  /**
2149
2174
  * Go To (Ctrl+G / F5). A host `onRequestGoTo` wins; otherwise the built-in
2150
2175
  * dialog opens — but only while a `GoToDialogHost` is mounted, so a host
@@ -2313,7 +2338,7 @@ function CanvasGridComponent(props, forwardedRef) {
2313
2338
  * Get context Menu component
2314
2339
  */
2315
2340
  var getContextMenu = (0, react_1.useCallback)(function (cell) {
2316
- return (react_1.default.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: onInsertRow, onInsertColumn: onInsertColumn, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
2341
+ return (react_1.default.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: onInsertRow, onInsertColumn: onInsertColumn, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, onRequestAddWatch: requestAddWatch, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onGoalSeek: onGoalSeek, onSubtotal: onSubtotal, onAdvancedFilter: onAdvancedFilter, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
2317
2342
  }, [
2318
2343
  isRestricted,
2319
2344
  activeCell,
@@ -2381,6 +2406,9 @@ function CanvasGridComponent(props, forwardedRef) {
2381
2406
  enableMagicFill,
2382
2407
  onSplitTextToColumns,
2383
2408
  onRemoveDuplicates,
2409
+ onGoalSeek,
2410
+ onSubtotal,
2411
+ onAdvancedFilter,
2384
2412
  onChange,
2385
2413
  getCellData,
2386
2414
  onRequestDeletePivotTable,
@@ -3205,9 +3233,19 @@ function CanvasGridComponent(props, forwardedRef) {
3205
3233
  setActiveCell: setActiveCell,
3206
3234
  flash: flash,
3207
3235
  });
3208
- // Built-in Go To: resolve against the workbook, then select + scroll.
3236
+ // Built-in Go To: resolve against the workbook, then select + scroll. Go
3237
+ // To Special scans the current selection (the whole sheet for a single
3238
+ // cell) through the host's `getCellData`.
3209
3239
  (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
3210
- builtInGoToRef.current = function (goToSheetId, goToActiveCell) {
3240
+ builtInGoToRef.current = function (goToSheetId, goToActiveCell, goToSelections) {
3241
+ var scanRange = (goToSelections === null || goToSelections === void 0 ? void 0 : goToSelections.length) && goToSelections[0]
3242
+ ? goToSelections[0].range
3243
+ : {
3244
+ startRowIndex: 1,
3245
+ endRowIndex: Math.max(1, sheetRowCount - 1),
3246
+ startColumnIndex: 1,
3247
+ endColumnIndex: Math.max(1, sheetColumnCount - 1),
3248
+ };
3211
3249
  openGoToDialog({
3212
3250
  sheetId: goToSheetId,
3213
3251
  activeCell: goToActiveCell,
@@ -3220,9 +3258,54 @@ function CanvasGridComponent(props, forwardedRef) {
3220
3258
  navigateToSheetRange(range, { enableFlash: false });
3221
3259
  focusSheet();
3222
3260
  },
3261
+ special: getCellData
3262
+ ? {
3263
+ resolve: function (kind) {
3264
+ return (0, go_to_special_1.resolveGoToSpecial)(kind, {
3265
+ sheetId: goToSheetId,
3266
+ range: scanRange,
3267
+ getCellData: getCellData,
3268
+ isRowHidden: isHiddenRow,
3269
+ isColumnHidden: isHiddenColumn,
3270
+ });
3271
+ },
3272
+ onSelectRanges: function (ranges) {
3273
+ var first = ranges[0];
3274
+ if (!first)
3275
+ return;
3276
+ setActiveCell(goToSheetId, {
3277
+ rowIndex: first.startRowIndex,
3278
+ columnIndex: first.startColumnIndex,
3279
+ });
3280
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(goToSheetId, ranges.map(function (range) { return ({ range: range }); }));
3281
+ focusSheet();
3282
+ },
3283
+ }
3284
+ : undefined,
3223
3285
  });
3224
3286
  };
3225
3287
  });
3288
+ // Watch Window live getters — republished per render while a host is
3289
+ // mounted so the panel tracks recalculation.
3290
+ (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
3291
+ if (!isWatchWindowMounted)
3292
+ return;
3293
+ setWatchWindowContext({
3294
+ getSheetName: getSheetName,
3295
+ getFormattedValue: getFormattedValue,
3296
+ getFormula: getFormulaValue,
3297
+ onNavigate: function (cell) {
3298
+ navigateToSheetRange({
3299
+ sheetId: cell.sheetId,
3300
+ startRowIndex: cell.rowIndex,
3301
+ endRowIndex: cell.rowIndex,
3302
+ startColumnIndex: cell.columnIndex,
3303
+ endColumnIndex: cell.columnIndex,
3304
+ }, { enableFlash: false });
3305
+ focusSheet();
3306
+ },
3307
+ });
3308
+ });
3226
3309
  // Dispatch keyboard event
3227
3310
  var dispatchEvent = (0, react_1.useCallback)(function (event) {
3228
3311
  var _a, _b;
@@ -13,7 +13,7 @@ import type { useFlash } from "../../hooks/use-flash";
13
13
  import type { useNavigateToSheetRange } from "../../hooks/use-navigate-sheet-range";
14
14
  import type { UseSelectionOptions } from "../../hooks/use-selection";
15
15
  import type { GetCellDimensionsOptions as SizerGetCellDimensionsOptions, useSizer } from "../../hooks/use-sizer";
16
- import type { AgentSuggestion, BandedDefinition, BandedRange, BorderStyle, CellFormat, Collaborator, Color, ColorFilterCriteria, ConditionType, ConditionValue, DataValidationRule, DataValidationRuleRecord, EmbeddedObject, IconFilterCriteria, Maybe, NamedRange, ParsedToken, PivotTable, ProtectedRange, RemoveDuplicatesOptions, Sheet, SheetCoordinate, SheetProtection, SheetRange, Slicer, SortOrder, SortSpecs, TableTheme, TableView } from "../../types";
16
+ import type { AgentSuggestion, BandedDefinition, BandedRange, BorderStyle, CellFormat, Collaborator, Color, ColorFilterCriteria, ConditionType, ConditionValue, DataValidationRule, DataValidationRuleRecord, EmbeddedObject, IconFilterCriteria, Maybe, NamedRange, ParsedToken, PivotTable, ProtectedRange, RemoveDuplicatesOptions, AdvancedFilterOptions, AdvancedFilterResult, GoalSeekResult, SplitTextOptions, SubtotalOptions, SubtotalResult, Sheet, SheetCoordinate, SheetProtection, SheetRange, Slicer, SortOrder, SortSpecs, TableTheme, TableView } from "../../types";
17
17
  import type { AXIS, CellData, ConditionalFormatRule, EmbeddedChart, FilterView } from "../../types";
18
18
  import type { CellProps } from "../cell/typings";
19
19
  import type { CellEditorProps } from "../cell-editor";
@@ -1527,7 +1527,7 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
1527
1527
  * @param delimiter
1528
1528
  * @returns
1529
1529
  */
1530
- onSplitTextToColumns?: (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], delimiter?: string) => void;
1530
+ onSplitTextToColumns?: (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], delimiter?: string, options?: SplitTextOptions) => void;
1531
1531
  /**
1532
1532
  * Remove duplicate rows
1533
1533
  * @param sheetId
@@ -1536,6 +1536,23 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
1536
1536
  * @returns
1537
1537
  */
1538
1538
  onRemoveDuplicates?: (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], options?: RemoveDuplicatesOptions) => void;
1539
+ /**
1540
+ * Excel's Goal Seek: find the `changingCell` value that makes the formula in
1541
+ * `setCell` evaluate to `targetValue`, then commit it. Resolves to the
1542
+ * search result (status + value), or `undefined` when the engine reports
1543
+ * no result (the rnc engine iterates natively) or the set cell has no formula.
1544
+ */
1545
+ onGoalSeek?: (sheetId: number, setCell: CellInterface, targetValue: number, changingCell: CellInterface) => Promise<GoalSeekResult | undefined>;
1546
+ /**
1547
+ * Excel's Data → Subtotal: insert "<group> Total" / "Grand Total" rows with
1548
+ * `SUBTOTAL(...)` formulas and outline the groups.
1549
+ */
1550
+ onSubtotal?: (sheetId: number, options: SubtotalOptions) => SubtotalResult | undefined;
1551
+ /**
1552
+ * Excel's Data → Advanced filter: filter a list in place (hide non-matching
1553
+ * rows) or copy the matching records elsewhere, driven by a criteria range.
1554
+ */
1555
+ onAdvancedFilter?: (sheetId: number, options: AdvancedFilterOptions) => AdvancedFilterResult | undefined;
1539
1556
  /**
1540
1557
  * Callback to get effective value of a cell
1541
1558
  * @param sheetId