@rowsncolumns/spreadsheet-state 28.0.75 → 28.0.76

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 (201) hide show
  1. package/dist/cjs/api/anchored-objects.d.ts +66 -0
  2. package/dist/cjs/api/anchored-objects.d.ts.map +1 -0
  3. package/dist/cjs/api/anchored-objects.js +259 -0
  4. package/dist/cjs/api/dependency.d.ts +13 -2
  5. package/dist/cjs/api/dependency.d.ts.map +1 -1
  6. package/dist/cjs/api/dependency.js +11 -5
  7. package/dist/cjs/api/formula.d.ts +61 -4
  8. package/dist/cjs/api/formula.d.ts.map +1 -1
  9. package/dist/cjs/api/formula.js +250 -61
  10. package/dist/cjs/api/merges.d.ts +8 -0
  11. package/dist/cjs/api/merges.d.ts.map +1 -1
  12. package/dist/cjs/api/merges.js +64 -1
  13. package/dist/cjs/api/named-range-structural.d.ts +62 -0
  14. package/dist/cjs/api/named-range-structural.d.ts.map +1 -0
  15. package/dist/cjs/api/named-range-structural.js +197 -0
  16. package/dist/cjs/api/range-rule-helpers.d.ts +45 -1
  17. package/dist/cjs/api/range-rule-helpers.d.ts.map +1 -1
  18. package/dist/cjs/api/range-rule-helpers.js +159 -6
  19. package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
  20. package/dist/cjs/api/structural-formula-update.js +24 -6
  21. package/dist/cjs/api/structural-guards.d.ts +78 -0
  22. package/dist/cjs/api/structural-guards.d.ts.map +1 -0
  23. package/dist/cjs/api/structural-guards.js +202 -0
  24. package/dist/cjs/api/structural-table-refs.d.ts +94 -0
  25. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -0
  26. package/dist/cjs/api/structural-table-refs.js +313 -0
  27. package/dist/cjs/constants.d.ts +25 -0
  28. package/dist/cjs/constants.d.ts.map +1 -0
  29. package/dist/cjs/constants.js +26 -0
  30. package/dist/cjs/hooks/use-calculation-worker.d.ts.map +1 -1
  31. package/dist/cjs/hooks/use-calculation-worker.js +64 -6
  32. package/dist/cjs/hooks/use-calculation.d.ts +7 -0
  33. package/dist/cjs/hooks/use-calculation.d.ts.map +1 -1
  34. package/dist/cjs/hooks/use-calculation.js +15 -0
  35. package/dist/cjs/hooks/use-on-calculation-success.d.ts +7 -0
  36. package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
  37. package/dist/cjs/hooks/use-on-calculation-success.js +7 -1
  38. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
  39. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  40. package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +27 -2
  41. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
  42. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  43. package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +27 -2
  44. package/dist/cjs/hooks/use-on-delete-column.d.ts +13 -4
  45. package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
  46. package/dist/cjs/hooks/use-on-delete-column.js +14 -2
  47. package/dist/cjs/hooks/use-on-delete-row.d.ts +13 -4
  48. package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
  49. package/dist/cjs/hooks/use-on-delete-row.js +14 -2
  50. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
  51. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  52. package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +27 -2
  53. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
  54. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  55. package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +27 -2
  56. package/dist/cjs/hooks/use-on-insert-column.d.ts +10 -3
  57. package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
  58. package/dist/cjs/hooks/use-on-insert-column.js +33 -7
  59. package/dist/cjs/hooks/use-on-insert-row.d.ts +10 -3
  60. package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
  61. package/dist/cjs/hooks/use-on-insert-row.js +32 -7
  62. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +2 -2
  63. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  64. package/dist/cjs/hooks/use-spreadsheet-state.js +61 -15
  65. package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
  66. package/dist/cjs/hooks/use-structured-reference.js +10 -6
  67. package/dist/cjs/index.d.ts +3 -0
  68. package/dist/cjs/index.d.ts.map +1 -1
  69. package/dist/cjs/index.js +3 -0
  70. package/dist/cjs/interface/calculation-interface.d.ts +9 -0
  71. package/dist/cjs/interface/calculation-interface.d.ts.map +1 -1
  72. package/dist/cjs/interface/calculation-interface.js +31 -2
  73. package/dist/cjs/interface/delete-cells-shift-left.d.ts +8 -1
  74. package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
  75. package/dist/cjs/interface/delete-cells-shift-left.js +158 -80
  76. package/dist/cjs/interface/delete-cells-shift-up.d.ts +9 -1
  77. package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
  78. package/dist/cjs/interface/delete-cells-shift-up.js +155 -73
  79. package/dist/cjs/interface/delete-column.d.ts +1 -1
  80. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  81. package/dist/cjs/interface/delete-column.js +90 -31
  82. package/dist/cjs/interface/delete-row.d.ts +1 -1
  83. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  84. package/dist/cjs/interface/delete-row.js +85 -26
  85. package/dist/cjs/interface/insert-cells-shift-down.d.ts +10 -1
  86. package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
  87. package/dist/cjs/interface/insert-cells-shift-down.js +147 -52
  88. package/dist/cjs/interface/insert-cells-shift-right.d.ts +10 -1
  89. package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
  90. package/dist/cjs/interface/insert-cells-shift-right.js +154 -58
  91. package/dist/cjs/interface/insert-column.d.ts +1 -1
  92. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  93. package/dist/cjs/interface/insert-column.js +46 -8
  94. package/dist/cjs/interface/insert-row.d.ts +1 -1
  95. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  96. package/dist/cjs/interface/insert-row.js +47 -10
  97. package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
  98. package/dist/cjs/interface/spreadsheet-interface.js +33 -0
  99. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  100. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  101. package/dist/esm/api/anchored-objects.d.ts +66 -0
  102. package/dist/esm/api/anchored-objects.d.ts.map +1 -0
  103. package/dist/esm/api/anchored-objects.js +212 -0
  104. package/dist/esm/api/dependency.d.ts +13 -2
  105. package/dist/esm/api/dependency.d.ts.map +1 -1
  106. package/dist/esm/api/dependency.js +10 -4
  107. package/dist/esm/api/formula.d.ts +61 -4
  108. package/dist/esm/api/formula.d.ts.map +1 -1
  109. package/dist/esm/api/formula.js +238 -60
  110. package/dist/esm/api/merges.d.ts +8 -0
  111. package/dist/esm/api/merges.d.ts.map +1 -1
  112. package/dist/esm/api/merges.js +51 -0
  113. package/dist/esm/api/named-range-structural.d.ts +62 -0
  114. package/dist/esm/api/named-range-structural.d.ts.map +1 -0
  115. package/dist/esm/api/named-range-structural.js +176 -0
  116. package/dist/esm/api/range-rule-helpers.d.ts +45 -1
  117. package/dist/esm/api/range-rule-helpers.d.ts.map +1 -1
  118. package/dist/esm/api/range-rule-helpers.js +153 -1
  119. package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
  120. package/dist/esm/api/structural-formula-update.js +24 -6
  121. package/dist/esm/api/structural-guards.d.ts +78 -0
  122. package/dist/esm/api/structural-guards.d.ts.map +1 -0
  123. package/dist/esm/api/structural-guards.js +186 -0
  124. package/dist/esm/api/structural-table-refs.d.ts +94 -0
  125. package/dist/esm/api/structural-table-refs.d.ts.map +1 -0
  126. package/dist/esm/api/structural-table-refs.js +219 -0
  127. package/dist/esm/constants.d.ts +25 -0
  128. package/dist/esm/constants.d.ts.map +1 -0
  129. package/dist/esm/constants.js +26 -0
  130. package/dist/esm/hooks/use-calculation-worker.d.ts.map +1 -1
  131. package/dist/esm/hooks/use-calculation-worker.js +45 -0
  132. package/dist/esm/hooks/use-calculation.d.ts +7 -0
  133. package/dist/esm/hooks/use-calculation.d.ts.map +1 -1
  134. package/dist/esm/hooks/use-calculation.js +15 -0
  135. package/dist/esm/hooks/use-on-calculation-success.d.ts +7 -0
  136. package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
  137. package/dist/esm/hooks/use-on-calculation-success.js +7 -1
  138. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
  139. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  140. package/dist/esm/hooks/use-on-delete-cells-shift-left.js +26 -2
  141. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
  142. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  143. package/dist/esm/hooks/use-on-delete-cells-shift-up.js +26 -2
  144. package/dist/esm/hooks/use-on-delete-column.d.ts +13 -4
  145. package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
  146. package/dist/esm/hooks/use-on-delete-column.js +14 -2
  147. package/dist/esm/hooks/use-on-delete-row.d.ts +13 -4
  148. package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
  149. package/dist/esm/hooks/use-on-delete-row.js +14 -2
  150. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
  151. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  152. package/dist/esm/hooks/use-on-insert-cells-shift-down.js +26 -2
  153. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
  154. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  155. package/dist/esm/hooks/use-on-insert-cells-shift-right.js +26 -2
  156. package/dist/esm/hooks/use-on-insert-column.d.ts +10 -3
  157. package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
  158. package/dist/esm/hooks/use-on-insert-column.js +33 -7
  159. package/dist/esm/hooks/use-on-insert-row.d.ts +10 -3
  160. package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
  161. package/dist/esm/hooks/use-on-insert-row.js +32 -7
  162. package/dist/esm/hooks/use-spreadsheet-state.d.ts +2 -2
  163. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  164. package/dist/esm/hooks/use-spreadsheet-state.js +61 -15
  165. package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
  166. package/dist/esm/hooks/use-structured-reference.js +10 -6
  167. package/dist/esm/index.d.ts +3 -0
  168. package/dist/esm/index.d.ts.map +1 -1
  169. package/dist/esm/index.js +3 -0
  170. package/dist/esm/interface/calculation-interface.d.ts +9 -0
  171. package/dist/esm/interface/calculation-interface.d.ts.map +1 -1
  172. package/dist/esm/interface/calculation-interface.js +33 -2
  173. package/dist/esm/interface/delete-cells-shift-left.d.ts +8 -1
  174. package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
  175. package/dist/esm/interface/delete-cells-shift-left.js +135 -59
  176. package/dist/esm/interface/delete-cells-shift-up.d.ts +9 -1
  177. package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
  178. package/dist/esm/interface/delete-cells-shift-up.js +133 -53
  179. package/dist/esm/interface/delete-column.d.ts +1 -1
  180. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  181. package/dist/esm/interface/delete-column.js +80 -11
  182. package/dist/esm/interface/delete-row.d.ts +1 -1
  183. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  184. package/dist/esm/interface/delete-row.js +81 -11
  185. package/dist/esm/interface/insert-cells-shift-down.d.ts +10 -1
  186. package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
  187. package/dist/esm/interface/insert-cells-shift-down.js +116 -47
  188. package/dist/esm/interface/insert-cells-shift-right.d.ts +10 -1
  189. package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
  190. package/dist/esm/interface/insert-cells-shift-right.js +120 -51
  191. package/dist/esm/interface/insert-column.d.ts +1 -1
  192. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  193. package/dist/esm/interface/insert-column.js +46 -8
  194. package/dist/esm/interface/insert-row.d.ts +1 -1
  195. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  196. package/dist/esm/interface/insert-row.js +47 -10
  197. package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
  198. package/dist/esm/interface/spreadsheet-interface.js +29 -0
  199. package/dist/esm/sheet-cell.d.ts.map +1 -1
  200. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  201. package/package.json +16 -16
@@ -0,0 +1,313 @@
1
+ import { __assign, __read, __values } from "tslib";
2
+ import { isCellNode } from "@rowsncolumns/dag";
3
+ import { addressToCell, getCellUserEnteredValue, getExtendedValueFormula, } from "@rowsncolumns/utils";
4
+ import { SheetCell } from "../sheet-cell";
5
+ import { breakTableColumnsInFormula, breakTableReferencesInFormula, createSheetCellIdentifier, } from "./formula";
6
+ import { createSheetDraft } from "./immer-utils";
7
+ /**
8
+ * Which tables / table columns `deleteRow` (a table goes with its header row)
9
+ * or `deleteColumn` (a table goes when every column is deleted; otherwise the
10
+ * covered columns are spliced out) removes for the band
11
+ * `[minIndex, maxIndex]` on `sheetId`. Mirrors the table updates those
12
+ * interfaces apply to `tables`.
13
+ */
14
+ export var collectRemovedTableParts = function (tables, sheetId, axis, minIndex, maxIndex) {
15
+ var e_1, _a;
16
+ var _b, _c;
17
+ var removed = { tables: [], columns: [] };
18
+ try {
19
+ for (var _d = __values(tables !== null && tables !== void 0 ? tables : []), _e = _d.next(); !_e.done; _e = _d.next()) {
20
+ var table = _e.value;
21
+ if (table.sheetId !== sheetId || !table.title)
22
+ continue;
23
+ if (axis === "row") {
24
+ var startRowIndex = table.range.startRowIndex;
25
+ if (startRowIndex >= minIndex && startRowIndex <= maxIndex) {
26
+ removed.tables.push(table.title);
27
+ }
28
+ continue;
29
+ }
30
+ var _f = table.range, startColumnIndex = _f.startColumnIndex, endColumnIndex = _f.endColumnIndex;
31
+ if (maxIndex < startColumnIndex || minIndex > endColumnIndex)
32
+ continue;
33
+ if (minIndex <= startColumnIndex && maxIndex >= endColumnIndex) {
34
+ removed.tables.push(table.title);
35
+ continue;
36
+ }
37
+ var overlapStart = Math.max(minIndex, startColumnIndex);
38
+ var overlapEnd = Math.min(maxIndex, endColumnIndex);
39
+ var names = [];
40
+ for (var column = overlapStart; column <= overlapEnd; column++) {
41
+ var name_1 = (_c = (_b = table.columns) === null || _b === void 0 ? void 0 : _b[column - startColumnIndex]) === null || _c === void 0 ? void 0 : _c.name;
42
+ if (name_1)
43
+ names.push(name_1);
44
+ }
45
+ if (names.length) {
46
+ removed.columns.push({
47
+ table: table.title,
48
+ sheetId: sheetId,
49
+ range: table.range,
50
+ columns: names,
51
+ });
52
+ }
53
+ }
54
+ }
55
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
56
+ finally {
57
+ try {
58
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
59
+ }
60
+ finally { if (e_1) throw e_1.error; }
61
+ }
62
+ return removed;
63
+ };
64
+ var isEmptyRemoval = function (removed) {
65
+ return removed.tables.length === 0 && removed.columns.length === 0;
66
+ };
67
+ var isWithinRange = function (range, rowIndex, columnIndex) {
68
+ return rowIndex >= range.startRowIndex &&
69
+ rowIndex <= range.endRowIndex &&
70
+ columnIndex >= range.startColumnIndex &&
71
+ columnIndex <= range.endColumnIndex;
72
+ };
73
+ /**
74
+ * Rewrite, across every sheet, the structured references that point at the
75
+ * table parts a delete removes (see `RemovedTableParts`). Runs BEFORE the
76
+ * splice, so bare `[@Col]` references are attributed to the table by the
77
+ * formula's pre-edit position. Formula cells come from the dependency graph
78
+ * when it is available (cost O(formula cells)); without one the draft is swept.
79
+ */
80
+ export var breakStructuredRefsForRemovedTableParts = function (_a) {
81
+ var e_2, _b, e_3, _c, e_4, _d;
82
+ var _e, _f;
83
+ var draft = _a.draft, sheetId = _a.sheetId, axis = _a.axis, referenceIndex = _a.referenceIndex, count = _a.count, removed = _a.removed, getGraphNodes = _a.getGraphNodes, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, recalcCells = _a.recalcCells, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
84
+ if (isEmptyRemoval(removed))
85
+ return;
86
+ var sheetCell = new SheetCell();
87
+ var isRow = axis === "row";
88
+ var afterBand = referenceIndex + count;
89
+ try {
90
+ for (var _g = __values(collectFormulaPositions(draft, getGraphNodes)), _h = _g.next(); !_h.done; _h = _g.next()) {
91
+ var pos = _h.value;
92
+ var currentSheet = createSheetDraft(draft, pos.sheetId, pos.rowIndex);
93
+ var cellData = (_f = (_e = currentSheet[pos.rowIndex]) === null || _e === void 0 ? void 0 : _e.values) === null || _f === void 0 ? void 0 : _f[pos.columnIndex];
94
+ var formula = getExtendedValueFormula(getCellUserEnteredValue(cellData));
95
+ if (!formula || !formula.includes("["))
96
+ continue;
97
+ var updated = formula;
98
+ try {
99
+ for (var _j = (e_3 = void 0, __values(removed.tables)), _k = _j.next(); !_k.done; _k = _j.next()) {
100
+ var table = _k.value;
101
+ updated = breakTableReferencesInFormula(updated, table);
102
+ }
103
+ }
104
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
105
+ finally {
106
+ try {
107
+ if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
108
+ }
109
+ finally { if (e_3) throw e_3.error; }
110
+ }
111
+ try {
112
+ for (var _l = (e_4 = void 0, __values(removed.columns)), _m = _l.next(); !_m.done; _m = _l.next()) {
113
+ var entry = _m.value;
114
+ updated = breakTableColumnsInFormula(updated, entry.table, entry.columns);
115
+ // A bare `[@Col]` belongs to the table the formula cell sits in.
116
+ if (pos.sheetId === entry.sheetId &&
117
+ isWithinRange(entry.range, pos.rowIndex, pos.columnIndex)) {
118
+ updated = breakTableColumnsInFormula(updated, undefined, entry.columns);
119
+ }
120
+ }
121
+ }
122
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
123
+ finally {
124
+ try {
125
+ if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
126
+ }
127
+ finally { if (e_4) throw e_4.error; }
128
+ }
129
+ if (updated === formula)
130
+ continue;
131
+ sheetCell.assign(pos.sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
132
+ sheetCell.setFormulaValue(updated, false);
133
+ currentSheet[pos.rowIndex].values[pos.columnIndex] =
134
+ sheetCell.getCellData();
135
+ // Where the cell ends up after the splice that follows (cells strictly
136
+ // after the deleted band on the edited sheet close up by `count`).
137
+ var shifts = pos.sheetId === sheetId &&
138
+ (isRow ? pos.rowIndex : pos.columnIndex) >= afterBand;
139
+ var nextPosition = {
140
+ sheetId: pos.sheetId,
141
+ rowIndex: pos.rowIndex - (shifts && isRow ? count : 0),
142
+ columnIndex: pos.columnIndex - (shifts && !isRow ? count : 0),
143
+ };
144
+ var enqueueOperation = sheetCell.ephemeral()
145
+ ? enqueueCalculation
146
+ : enqueueGraphOperation;
147
+ enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "remove", position: pos });
148
+ enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "add", position: nextPosition, force: true });
149
+ recalcCells.set(createSheetCellIdentifier(nextPosition.sheetId, nextPosition.rowIndex, nextPosition.columnIndex), __assign(__assign({}, nextPosition), { force: true }));
150
+ }
151
+ }
152
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
153
+ finally {
154
+ try {
155
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
156
+ }
157
+ finally { if (e_2) throw e_2.error; }
158
+ }
159
+ };
160
+ var collectFormulaPositions = function (draft, getGraphNodes) {
161
+ var e_5, _a, e_6, _b;
162
+ if (getGraphNodes) {
163
+ var graphNodes = void 0;
164
+ try {
165
+ graphNodes = getGraphNodes();
166
+ }
167
+ catch (_c) {
168
+ graphNodes = undefined;
169
+ }
170
+ if (graphNodes && typeof graphNodes.values === "function") {
171
+ var positions_1 = [];
172
+ var sawNode = false;
173
+ try {
174
+ for (var _d = __values(graphNodes.values()), _e = _d.next(); !_e.done; _e = _d.next()) {
175
+ var node = _e.value;
176
+ if (!isCellNode(node))
177
+ continue;
178
+ sawNode = true;
179
+ positions_1.push(__assign({}, node.position));
180
+ }
181
+ }
182
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
183
+ finally {
184
+ try {
185
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
186
+ }
187
+ finally { if (e_5) throw e_5.error; }
188
+ }
189
+ if (sawNode)
190
+ return positions_1;
191
+ }
192
+ }
193
+ // Fallback sweep (no graph, or an empty one): every formula cell in the draft.
194
+ var positions = [];
195
+ var _loop_1 = function (key) {
196
+ var sheetId = Number(key);
197
+ var rows = draft[sheetId];
198
+ if (!rows)
199
+ return "continue";
200
+ rows.forEach(function (row, rowIndex) {
201
+ var _a;
202
+ (_a = row === null || row === void 0 ? void 0 : row.values) === null || _a === void 0 ? void 0 : _a.forEach(function (cellData, columnIndex) {
203
+ if (getExtendedValueFormula(getCellUserEnteredValue(cellData))) {
204
+ positions.push({ sheetId: sheetId, rowIndex: rowIndex, columnIndex: columnIndex });
205
+ }
206
+ });
207
+ });
208
+ };
209
+ try {
210
+ for (var _f = __values(Object.keys(draft)), _g = _f.next(); !_g.done; _g = _f.next()) {
211
+ var key = _g.value;
212
+ _loop_1(key);
213
+ }
214
+ }
215
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
216
+ finally {
217
+ try {
218
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
219
+ }
220
+ finally { if (e_6) throw e_6.error; }
221
+ }
222
+ return positions;
223
+ };
224
+ export var removeSpillsOfDeletedAnchors = function (_a) {
225
+ var e_7, _b;
226
+ var _c, _d, _e;
227
+ var draft = _a.draft, sheetId = _a.sheetId, axis = _a.axis, minIndex = _a.minIndex, maxIndex = _a.maxIndex, getArrayRange = _a.getArrayRange, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
228
+ var sheetRows = draft[sheetId];
229
+ if (!sheetRows)
230
+ return;
231
+ var sheetCell = new SheetCell();
232
+ var anchors = [];
233
+ var collect = function (rowIndex, columnIndex) {
234
+ var _a, _b;
235
+ var cellData = (_b = (_a = sheetRows[rowIndex]) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b[columnIndex];
236
+ if (!cellData)
237
+ return;
238
+ // The calculator knows the current spill; the persisted `af` (written on
239
+ // calc success by hosts that track it) is the fallback.
240
+ var live = getExtendedValueFormula(getCellUserEnteredValue(cellData)) !== undefined
241
+ ? getArrayRange === null || getArrayRange === void 0 ? void 0 : getArrayRange({ sheetId: sheetId, rowIndex: rowIndex, columnIndex: columnIndex })
242
+ : undefined;
243
+ var range = live !== null && live !== void 0 ? live : spillRangeFromRef(cellData.af);
244
+ if (range)
245
+ anchors.push({ rowIndex: rowIndex, columnIndex: columnIndex, range: range });
246
+ };
247
+ if (axis === "row") {
248
+ var _loop_2 = function (rowIndex) {
249
+ (_d = (_c = sheetRows[rowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d.forEach(function (_cell, columnIndex) {
250
+ return collect(rowIndex, columnIndex);
251
+ });
252
+ };
253
+ for (var rowIndex = minIndex; rowIndex <= maxIndex; rowIndex++) {
254
+ _loop_2(rowIndex);
255
+ }
256
+ }
257
+ else {
258
+ sheetRows.forEach(function (row, rowIndex) {
259
+ if (!(row === null || row === void 0 ? void 0 : row.values))
260
+ return;
261
+ for (var columnIndex = minIndex; columnIndex <= maxIndex; columnIndex++) {
262
+ collect(rowIndex, columnIndex);
263
+ }
264
+ });
265
+ }
266
+ try {
267
+ for (var anchors_1 = __values(anchors), anchors_1_1 = anchors_1.next(); !anchors_1_1.done; anchors_1_1 = anchors_1.next()) {
268
+ var anchor = anchors_1_1.value;
269
+ var range = anchor.range;
270
+ for (var rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
271
+ var rowValues = (_e = sheetRows[rowIndex]) === null || _e === void 0 ? void 0 : _e.values;
272
+ if (!rowValues)
273
+ continue;
274
+ for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
275
+ if (rowIndex === anchor.rowIndex &&
276
+ columnIndex === anchor.columnIndex) {
277
+ continue;
278
+ }
279
+ var cellData = rowValues[columnIndex];
280
+ if (!cellData || getCellUserEnteredValue(cellData) !== undefined) {
281
+ continue;
282
+ }
283
+ sheetCell.assign(sheetId, { rowIndex: rowIndex, columnIndex: columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
284
+ sheetCell.deleteContents();
285
+ rowValues[columnIndex] = sheetCell.getCellData();
286
+ }
287
+ }
288
+ }
289
+ }
290
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
291
+ finally {
292
+ try {
293
+ if (anchors_1_1 && !anchors_1_1.done && (_b = anchors_1.return)) _b.call(anchors_1);
294
+ }
295
+ finally { if (e_7) throw e_7.error; }
296
+ }
297
+ };
298
+ /** `C1:C3` (the anchor's persisted `af`) → its rectangle; `undefined` when absent/unparseable. */
299
+ var spillRangeFromRef = function (ref) {
300
+ if (!ref)
301
+ return undefined;
302
+ var _a = __read(ref.split(":"), 2), startAddress = _a[0], endAddress = _a[1];
303
+ var start = addressToCell(startAddress);
304
+ var end = addressToCell(endAddress !== null && endAddress !== void 0 ? endAddress : startAddress);
305
+ if (!start || !end)
306
+ return undefined;
307
+ return {
308
+ startRowIndex: start.rowIndex,
309
+ startColumnIndex: start.columnIndex,
310
+ endRowIndex: end.rowIndex,
311
+ endColumnIndex: end.columnIndex,
312
+ };
313
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Excel's refusal messages for structural edits (insert/delete cells with shift, whole row/column
3
+ * insert, move/cut). The engines refuse the edit and leave the document untouched; the UI shows the
4
+ * message. Shared by the legacy JS hooks (`api/structural-guards.ts`) and the rnc engine's
5
+ * `CommitResult.rejected` channel (`libs/rnc-engine`), so both surfaces speak the same words.
6
+ */
7
+ export declare const STRUCTURAL_REFUSAL_TITLE = "Microsoft Excel";
8
+ /** INS-06 / INS-09 / SHF-10 — a non-blank (or formatted) cell would be pushed past the last row/column. */
9
+ export declare const OFF_SHEET_PUSH_MESSAGE = "Microsoft Excel can't insert new cells because it would push non-empty cells off the end of the worksheet. These non-empty cells might appear empty but have blank values, some formatting, or a formula. Delete enough rows or columns to make room for what you want to insert and then try again.";
10
+ /** SHF-05 / MRG-07 — the shifted band covers only part of a merged cell. */
11
+ export declare const MERGED_CELL_REFUSAL_MESSAGE = "We can't do that to a merged cell.";
12
+ /** TBL-05 — the shifted band would tear a table apart. */
13
+ export declare const TABLE_SHIFT_REFUSAL_MESSAGE = "This won't work because it would move cells in a table on your worksheet.";
14
+ /** ANC-14 — the shifted band covers only part of a CSE / dynamic array. */
15
+ export declare const ARRAY_REFUSAL_MESSAGE = "You can't change part of an array.";
16
+ /** Machine-readable refusal codes — the rnc engine's `CommitResult.rejected.code` uses the same set. */
17
+ export type StructuralRefusalCode = "off-sheet-push" | "torn-merge" | "torn-table" | "torn-array";
18
+ export type StructuralRefusal = {
19
+ code: StructuralRefusalCode;
20
+ title: string;
21
+ message: string;
22
+ };
23
+ export declare const STRUCTURAL_REFUSAL_MESSAGES: Record<StructuralRefusalCode, string>;
24
+ export declare const structuralRefusal: (code: StructuralRefusalCode) => StructuralRefusal;
25
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,ySACqQ,CAAC;AAEzS,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,uCAAuC,CAAC;AAEhF,0DAA0D;AAC1D,eAAO,MAAM,2BAA2B,8EACqC,CAAC;AAE9E,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,uCAAuC,CAAC;AAE1E,wGAAwG;AACxG,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,YAAY,GACZ,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAK7E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,qBAAqB,KAC1B,iBAID,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Excel's refusal messages for structural edits (insert/delete cells with shift, whole row/column
3
+ * insert, move/cut). The engines refuse the edit and leave the document untouched; the UI shows the
4
+ * message. Shared by the legacy JS hooks (`api/structural-guards.ts`) and the rnc engine's
5
+ * `CommitResult.rejected` channel (`libs/rnc-engine`), so both surfaces speak the same words.
6
+ */
7
+ export var STRUCTURAL_REFUSAL_TITLE = "Microsoft Excel";
8
+ /** INS-06 / INS-09 / SHF-10 — a non-blank (or formatted) cell would be pushed past the last row/column. */
9
+ export var OFF_SHEET_PUSH_MESSAGE = "Microsoft Excel can't insert new cells because it would push non-empty cells off the end of the worksheet. These non-empty cells might appear empty but have blank values, some formatting, or a formula. Delete enough rows or columns to make room for what you want to insert and then try again.";
10
+ /** SHF-05 / MRG-07 — the shifted band covers only part of a merged cell. */
11
+ export var MERGED_CELL_REFUSAL_MESSAGE = "We can't do that to a merged cell.";
12
+ /** TBL-05 — the shifted band would tear a table apart. */
13
+ export var TABLE_SHIFT_REFUSAL_MESSAGE = "This won't work because it would move cells in a table on your worksheet.";
14
+ /** ANC-14 — the shifted band covers only part of a CSE / dynamic array. */
15
+ export var ARRAY_REFUSAL_MESSAGE = "You can't change part of an array.";
16
+ export var STRUCTURAL_REFUSAL_MESSAGES = {
17
+ "off-sheet-push": OFF_SHEET_PUSH_MESSAGE,
18
+ "torn-merge": MERGED_CELL_REFUSAL_MESSAGE,
19
+ "torn-table": TABLE_SHIFT_REFUSAL_MESSAGE,
20
+ "torn-array": ARRAY_REFUSAL_MESSAGE,
21
+ };
22
+ export var structuralRefusal = function (code) { return ({
23
+ code: code,
24
+ title: STRUCTURAL_REFUSAL_TITLE,
25
+ message: STRUCTURAL_REFUSAL_MESSAGES[code],
26
+ }); };
@@ -1 +1 @@
1
- {"version":3,"file":"use-calculation-worker.d.ts","sourceRoot":"","sources":["../../../hooks/use-calculation-worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,8BAA8B,EAQ9B,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAU1C,OAAO,KAAK,EACV,2BAA2B,EAE5B,MAAM,4BAA4B,CAAC;AAmBpC,OAAO,KAAK,EAEV,UAAU,EACV,SAAS,EACV,MAAM,2BAA2B,CAAC;AAgBnC,OAAO,KAAK,EAKV,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EACD,OAAO,GACP,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,yBAAyB,GACzB,cAAc,GACd,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAyEF,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,GAAG;IAC5D,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;IACnD,kBAAkB,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAClD,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AA8KF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,yBAAyB,KAC/B,wBA+/DF,CAAC"}
1
+ {"version":3,"file":"use-calculation-worker.d.ts","sourceRoot":"","sources":["../../../hooks/use-calculation-worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,8BAA8B,EAQ9B,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAU1C,OAAO,KAAK,EACV,2BAA2B,EAE5B,MAAM,4BAA4B,CAAC;AAmBpC,OAAO,KAAK,EAEV,UAAU,EACV,SAAS,EACV,MAAM,2BAA2B,CAAC;AAgBnC,OAAO,KAAK,EAKV,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EACD,OAAO,GACP,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,yBAAyB,GACzB,cAAc,GACd,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAyEF,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,GAAG;IAC5D,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;IACnD,kBAAkB,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAClD,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAsLF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,yBAAyB,KAC/B,wBA4iEF,CAAC"}
@@ -130,6 +130,14 @@ var VOLATILE_FUNCTIONS = new Set([
130
130
  "INDIRECT",
131
131
  ]);
132
132
  var MAX_BUFFERED_RESULTS = 2000;
133
+ /**
134
+ * True when an operation carries the user's new cell value and that value is
135
+ * not a formula — the cell is leaving the dependency graph.
136
+ */
137
+ var isStaticOperationValue = function (value) {
138
+ return value !== undefined &&
139
+ (typeof value !== "string" || !value.trim().startsWith("="));
140
+ };
133
141
  var mergePendingOperation = function (current, incoming) {
134
142
  if (!current) {
135
143
  return incoming;
@@ -1452,6 +1460,27 @@ export var useCalculationWorker = function (props) {
1452
1460
  console.error("Calculation error: ", error);
1453
1461
  })
1454
1462
  .finally(function () {
1463
+ var e_11, _a;
1464
+ try {
1465
+ // The recorded static edits are only needed while the host's
1466
+ // state may lag behind the edit; drop them once the batch that
1467
+ // consumed them completes, unless the cell was edited again
1468
+ // meanwhile — that operation's pass owns the entry.
1469
+ for (var evaluationOperations_1 = (e_11 = void 0, __values(evaluationOperations)), evaluationOperations_1_1 = evaluationOperations_1.next(); !evaluationOperations_1_1.done; evaluationOperations_1_1 = evaluationOperations_1.next()) {
1470
+ var operation = evaluationOperations_1_1.value;
1471
+ var key = makeKey(operation.position);
1472
+ if (!pendingOperationMapRef.current.has(key)) {
1473
+ pendingUserValueEditsRef.current.delete(key);
1474
+ }
1475
+ }
1476
+ }
1477
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
1478
+ finally {
1479
+ try {
1480
+ if (evaluationOperations_1_1 && !evaluationOperations_1_1.done && (_a = evaluationOperations_1.return)) _a.call(evaluationOperations_1);
1481
+ }
1482
+ finally { if (e_11) throw e_11.error; }
1483
+ }
1455
1484
  activeExecutionsRef.current--;
1456
1485
  if (activeExecutionsRef.current === 0) {
1457
1486
  onAfterCalculation();
@@ -1618,7 +1647,7 @@ export var useCalculationWorker = function (props) {
1618
1647
  };
1619
1648
  }, []);
1620
1649
  var prepareArrayOperation = useCallback(function (operation) {
1621
- var e_11, _a;
1650
+ var e_12, _a;
1622
1651
  var _b, _c, _d;
1623
1652
  if (operation.type === "dirty") {
1624
1653
  return;
@@ -1663,12 +1692,12 @@ export var useCalculationWorker = function (props) {
1663
1692
  queueAnchorDirty(entry.anchor);
1664
1693
  }
1665
1694
  }
1666
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
1695
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
1667
1696
  finally {
1668
1697
  try {
1669
1698
  if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
1670
1699
  }
1671
- finally { if (e_11) throw e_11.error; }
1700
+ finally { if (e_12) throw e_12.error; }
1672
1701
  }
1673
1702
  }
1674
1703
  }, [clearArrayValues, findCachedArrayAnchor, graph, queueAnchorDirty]);
@@ -1679,6 +1708,19 @@ export var useCalculationWorker = function (props) {
1679
1708
  if (anchor) {
1680
1709
  collisionAnchorsRef.current.delete(makeKey(anchor));
1681
1710
  }
1711
+ // Remember a static value that replaces the cell's formula. The
1712
+ // processing pass runs after paint, when the host's
1713
+ // getUserEnteredValue may still return the replaced formula; every
1714
+ // formula lookup for the cell (operation mapping, the graph's plan
1715
+ // build, volatile tracking) goes through getFinalUserEnteredValue,
1716
+ // which prefers this entry. Any later operation on the cell
1717
+ // supersedes it.
1718
+ var key = makeKey(operation.position);
1719
+ pendingUserValueEditsRef.current.delete(key);
1720
+ if (operation.type === "add" &&
1721
+ isStaticOperationValue(operation.value)) {
1722
+ pendingUserValueEditsRef.current.set(key, operation.value);
1723
+ }
1682
1724
  }
1683
1725
  scheduleVolatileTracking(operation.position);
1684
1726
  prepareArrayOperation(operation);
@@ -1691,6 +1733,20 @@ export var useCalculationWorker = function (props) {
1691
1733
  requestAnimationFrame(flushGraphOperations);
1692
1734
  }
1693
1735
  });
1736
+ // The spill rectangle anchored at `position` (mirror graph first, then the
1737
+ // last range this hook registered for the anchor).
1738
+ var getArrayRange = useCallbackRef(function (position) {
1739
+ var _a, _b;
1740
+ var range = (_a = graph.getArrayRange(position)) !== null && _a !== void 0 ? _a : (_b = arrayRangeCacheRef.current.get(makeKey(position))) === null || _b === void 0 ? void 0 : _b.range;
1741
+ if (!range)
1742
+ return undefined;
1743
+ return {
1744
+ startRowIndex: range.startRowIndex,
1745
+ startColumnIndex: range.startColumnIndex,
1746
+ endRowIndex: range.endRowIndex,
1747
+ endColumnIndex: range.endColumnIndex,
1748
+ };
1749
+ });
1694
1750
  var isArrayFormula = useCallbackRef(function (position) {
1695
1751
  return graph.isArrayFormula(position) || graph.isInArrayRange(position);
1696
1752
  });
@@ -1745,7 +1801,7 @@ export var useCalculationWorker = function (props) {
1745
1801
  }, [graph]);
1746
1802
  var onRequestCalculate = useCallback(function (value, sheetId, rowIndex, columnIndex, options) { return __awaiter(void 0, void 0, void 0, function () {
1747
1803
  var disablePreview, skipOnDemand, formula, position, dependencies, isCircular, scope, _a, _b, _c, key, value_1, plan, _d, result, resultValue;
1748
- var e_12, _e;
1804
+ var e_13, _e;
1749
1805
  var _f, _g, _h;
1750
1806
  return __generator(this, function (_j) {
1751
1807
  switch (_j.label) {
@@ -1796,12 +1852,12 @@ export var useCalculationWorker = function (props) {
1796
1852
  scope[key] = value_1;
1797
1853
  }
1798
1854
  }
1799
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
1855
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
1800
1856
  finally {
1801
1857
  try {
1802
1858
  if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
1803
1859
  }
1804
- finally { if (e_12) throw e_12.error; }
1860
+ finally { if (e_13) throw e_13.error; }
1805
1861
  }
1806
1862
  }
1807
1863
  plan = {
@@ -1899,6 +1955,7 @@ export var useCalculationWorker = function (props) {
1899
1955
  getDependencyGraph: function () { return "[]"; },
1900
1956
  updateDependencyGraph: function () { },
1901
1957
  isArrayFormula: function () { return false; },
1958
+ getArrayRange: function () { return undefined; },
1902
1959
  applyNamedRanges: function (_list) { },
1903
1960
  stats$: statsSubjectRef.current.asObservable(),
1904
1961
  });
@@ -1922,6 +1979,7 @@ export var useCalculationWorker = function (props) {
1922
1979
  getDependencyGraph: getDependencyGraph,
1923
1980
  updateDependencyGraph: updateDependencyGraph,
1924
1981
  isArrayFormula: isArrayFormula,
1982
+ getArrayRange: getArrayRange,
1925
1983
  // Worker re-inits on namedRanges change (sent via WorkerInit
1926
1984
  // payload), so there's no host-side calculator to apply to.
1927
1985
  // No-op to satisfy the shared API contract.
@@ -158,6 +158,12 @@ export declare const useCalculation: ({ locale, functions, iterativeCalculation,
158
158
  getDependencyGraph: () => string;
159
159
  updateDependencyGraph: (nodes: string) => void;
160
160
  isArrayFormula: (position: CellCoordinate) => boolean;
161
+ getArrayRange: (position: CellCoordinate) => {
162
+ startRowIndex: number;
163
+ startColumnIndex: number;
164
+ endRowIndex: number;
165
+ endColumnIndex: number;
166
+ } | undefined;
161
167
  applyNamedRanges: (list: import("@rowsncolumns/spreadsheet").NamedRange[] | undefined) => void;
162
168
  } | {
163
169
  enqueueCalculation: () => void;
@@ -178,6 +184,7 @@ export declare const useCalculation: ({ locale, functions, iterativeCalculation,
178
184
  getDependencyGraph: () => "[]";
179
185
  updateDependencyGraph: () => void;
180
186
  isArrayFormula: () => false;
187
+ getArrayRange: () => undefined;
181
188
  applyNamedRanges: (_list: import("@rowsncolumns/spreadsheet").NamedRange[] | undefined) => void;
182
189
  };
183
190
  //# sourceMappingURL=use-calculation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-calculation.d.ts","sourceRoot":"","sources":["../../../hooks/use-calculation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EAEnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,aAAa,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAqBtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuIjE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAGpC,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAElC,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAItC,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,YAAY,GAAG,YAAY,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,uBAAuB,GAAG,yBAAyB,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,MAAM,GACN,UAAU,GACV,YAAY,GACZ,gBAAgB,CAAC;AAErB,MAAM,MAAM,oBAAoB,GAAG,GAAG,CACpC,MAAM,EACN,iBAAiB,GAAG,SAAS,GAAG,IAAI,CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;IACnD,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CACP,OAAO,EACH,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,GAC9D,gBAAgB,CACd;QAAC,cAAc;QAAE,iBAAiB;QAAE,UAAU,CAAC,EAAE,UAAU;KAAC,CAC7D,EACL,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAAC;IACR,kBAAkB,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IACxD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,kBAAkB,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,aAAa,IAAI,MAAM,CAAC;IACxB,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAC9C,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,wBAAwB,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC;IAClE,qBAAqB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IACjE,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,2BAA2B,EAAE,UAAU,EAAE,CAAC;IAC/D,uBAAuB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACpD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,2BAA2B,CAAC,CAC1B,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAC3E,QAAQ,CAAC,EAAE,MAAM,OAAO,eAAe,GACtC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACzC;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;CAC/D,CAAC;AAKF,eAAO,MAAM,mBAAmB,aAU9B,CAAC;AAsKH,eAAO,MAAM,cAAc,GAAI,ghBA8B5B,mBAAmB;oCAulEJ,oBAAoB;uCAhRpB,oBAAoB;4BAgCzB,cAAc,GAAG,mBAAmB,kBAAkB,OAAO;4CAsC9D,MAAM,UAAU,cAAc;4BAkC5B,cAAc,GAAG,mBAAmB,kBAC5B,OAAO,KACtB,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;qCA2NP,eAAe;;qCALc,MAAM;gCA6B/C,MAAM,WACJ,MAAM,YACL,MAAM,eACH,MAAM,YACT;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;QACjC,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB;;oCAmF8C,MAAM;iCAO7C,eAAe,kBACP,cAAc,GAAG,mBAAmB;sCAQ3B,MAAM,YAAY,cAAc;oCASV,eAAe;;;mCA0B5C,MAAM;+BAjZH,cAAc;6BAh2C9B,OAAO,2BAA2B,EAAE,UAAU,EAAE,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;8BAixDxD,OAAO,2BAA2B,EAAE,UAAU,EAAE,GAAG,SAAS;CAkC1E,CAAC"}
1
+ {"version":3,"file":"use-calculation.d.ts","sourceRoot":"","sources":["../../../hooks/use-calculation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EAEnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,aAAa,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAqBtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuIjE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAGpC,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAElC,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAItC,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,YAAY,GAAG,YAAY,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,uBAAuB,GAAG,yBAAyB,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,MAAM,GACN,UAAU,GACV,YAAY,GACZ,gBAAgB,CAAC;AAErB,MAAM,MAAM,oBAAoB,GAAG,GAAG,CACpC,MAAM,EACN,iBAAiB,GAAG,SAAS,GAAG,IAAI,CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;IACnD,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CACP,OAAO,EACH,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,GAC9D,gBAAgB,CACd;QAAC,cAAc;QAAE,iBAAiB;QAAE,UAAU,CAAC,EAAE,UAAU;KAAC,CAC7D,EACL,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAAC;IACR,kBAAkB,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IACxD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,kBAAkB,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,aAAa,IAAI,MAAM,CAAC;IACxB,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAC9C,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,wBAAwB,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC;IAClE,qBAAqB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IACjE,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,2BAA2B,EAAE,UAAU,EAAE,CAAC;IAC/D,uBAAuB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACpD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,2BAA2B,CAAC,CAC1B,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAC3E,QAAQ,CAAC,EAAE,MAAM,OAAO,eAAe,GACtC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACzC;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;CAC/D,CAAC;AAKF,eAAO,MAAM,mBAAmB,aAU9B,CAAC;AAsKH,eAAO,MAAM,cAAc,GAAI,ghBA8B5B,mBAAmB;oCAsmEJ,oBAAoB;uCA/RpB,oBAAoB;4BAgCzB,cAAc,GAAG,mBAAmB,kBAAkB,OAAO;4CAsC9D,MAAM,UAAU,cAAc;4BAiD5B,cAAc,GAAG,mBAAmB,kBAC5B,OAAO,KACtB,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;qCA2NP,eAAe;;qCALc,MAAM;gCA6B/C,MAAM,WACJ,MAAM,YACL,MAAM,eACH,MAAM,YACT;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;QACjC,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB;;oCAmF8C,MAAM;iCAO7C,eAAe,kBACP,cAAc,GAAG,mBAAmB;sCAQ3B,MAAM,YAAY,cAAc;oCASV,eAAe;;;mCA0B5C,MAAM;+BAhaH,cAAc;8BAWd,cAAc;;;;;;6BA32C9B,OAAO,2BAA2B,EAAE,UAAU,EAAE,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;8BAiyDxD,OAAO,2BAA2B,EAAE,UAAU,EAAE,GAAG,SAAS;CAmC1E,CAAC"}
@@ -2415,6 +2415,19 @@ export var useCalculation = function (_a) {
2415
2415
  return (getCalculator().isArray(position) ||
2416
2416
  getCalculator().isInArrayRange(position));
2417
2417
  }, []));
2418
+ // The spill rectangle anchored at `position` (a dynamic array's projected
2419
+ // cells), or undefined when the cell is not a spilling anchor.
2420
+ var getArrayRange = useCallbackRef(useCallback(function (position) {
2421
+ var range = getCalculator().getArrayRange(position);
2422
+ if (!range)
2423
+ return undefined;
2424
+ return {
2425
+ startRowIndex: range.from.row,
2426
+ startColumnIndex: range.from.col,
2427
+ endRowIndex: range.to.row,
2428
+ endColumnIndex: range.to.col,
2429
+ };
2430
+ }, []));
2418
2431
  // Get all dependents of a cell. Returns a mixed list — narrow with
2419
2432
  // the `isCellNode`/`isStaticNode` helpers at call sites (NOT
2420
2433
  // `instanceof`, which breaks across bundler module instances).
@@ -2793,6 +2806,7 @@ export var useCalculation = function (_a) {
2793
2806
  getDependencyGraph: function () { return "[]"; },
2794
2807
  updateDependencyGraph: function () { },
2795
2808
  isArrayFormula: function () { return false; },
2809
+ getArrayRange: function () { return undefined; },
2796
2810
  applyNamedRanges: function (_list) { },
2797
2811
  }); }, []);
2798
2812
  var api = {
@@ -2814,6 +2828,7 @@ export var useCalculation = function (_a) {
2814
2828
  getDependencyGraph: getDependencyGraph,
2815
2829
  updateDependencyGraph: updateDependencyGraph,
2816
2830
  isArrayFormula: isArrayFormula,
2831
+ getArrayRange: getArrayRange,
2817
2832
  // Phase 9 — exposed so `useCalculationInitialize` can guarantee
2818
2833
  // named ranges are registered BEFORE cell formulas are parsed
2819
2834
  // (otherwise cells using a named range would form no DAG edge
@@ -7,6 +7,13 @@ import type { useSheetProperties } from "./use-sheet-properties";
7
7
  import type { UseSpreadsheetProps } from "./use-spreadsheet-state";
8
8
  import type { SharedStringRegistry } from "./use-ss-registry";
9
9
  import type { useUndoRedo } from "./use-undo-redo";
10
+ /**
11
+ * The A1 spill range (`C1:C3`) a dynamic-array result anchored at
12
+ * `(rowIndex, columnIndex)` covers — persisted on the anchor as `af` so xlsx
13
+ * export can write `<f t="array" ref=…>` and structural edits can find the
14
+ * projected cells of a deleted anchor.
15
+ */
16
+ export declare const arrayResultToA1Ref: (rowIndex: number, columnIndex: number, result: unknown[][]) => string | undefined;
10
17
  type UseOnCalculationSuccessProps<T extends CellData> = {
11
18
  locale?: string;
12
19
  cellXfsRegistry?: CellXfsRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-calculation-success.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-calculation-success.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAe1D,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EACzB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAyBnD,KAAK,4BAA4B,CAAC,CAAC,SAAS,QAAQ,IAAI;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,qBAAqB,EAAE,UAAU,CAC/B,OAAO,kBAAkB,CAC1B,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,6BAA6B,CAAC,CAAC;IAC7E,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,wIASpE,4BAA4B,CAAC,CAAC,CAAC,eAMxB,KAAK,CAAC,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,GACnE,gBAAgB,CACd,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAC7D,iBACU,OAAO,aACX,yBAAyB,SAqMzC,CAAC"}
1
+ {"version":3,"file":"use-on-calculation-success.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-calculation-success.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAe1D,OAAO,KAAK,EACV,iBAAiB,EACjB,yBAAyB,EACzB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,aAAa,MAAM,EACnB,QAAQ,OAAO,EAAE,EAAE,KAClB,MAAM,GAAG,SAiBX,CAAC;AAEF,KAAK,4BAA4B,CAAC,CAAC,SAAS,QAAQ,IAAI;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,qBAAqB,EAAE,UAAU,CAC/B,OAAO,kBAAkB,CAC1B,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,6BAA6B,CAAC,CAAC;IAC7E,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,wIASpE,4BAA4B,CAAC,CAAC,CAAC,eAMxB,KAAK,CAAC,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,GACnE,gBAAgB,CACd,CAAC,cAAc,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAC7D,iBACU,OAAO,aACX,yBAAyB,SAqMzC,CAAC"}
@@ -7,7 +7,13 @@ import { useCallback } from "react";
7
7
  import { createSheetDraft, deriveCellFromPrecedents, peekIterable, } from "./../api/immer-utils";
8
8
  import { AWAITING_CALCULATION } from "./../helpers";
9
9
  import { LOADING_VALUE, SheetCell } from "./../sheet-cell";
10
- var arrayResultToA1Ref = function (rowIndex, columnIndex, result) {
10
+ /**
11
+ * The A1 spill range (`C1:C3`) a dynamic-array result anchored at
12
+ * `(rowIndex, columnIndex)` covers — persisted on the anchor as `af` so xlsx
13
+ * export can write `<f t="array" ref=…>` and structural edits can find the
14
+ * projected cells of a deleted anchor.
15
+ */
16
+ export var arrayResultToA1Ref = function (rowIndex, columnIndex, result) {
11
17
  var _a, _b;
12
18
  var numRows = result.length;
13
19
  var numCols = (_b = (_a = result[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;