@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
@@ -1,14 +1,17 @@
1
- import { __assign, __read, __spreadArray, __values } from "tslib";
1
+ import { __assign, __read, __spreadArray } from "tslib";
2
2
  import { Direction } from "@rowsncolumns/common-types";
3
3
  import { produceWithPatches } from "immer";
4
+ import { shiftChartsOnStructuralChange, shiftEmbedsOnStructuralChange, shiftProtectedRangesOnStructuralChange, } from "../api/anchored-objects";
4
5
  import { shrinkMergesOnRowDelete } from "../api/merges";
6
+ import { updateNamedRangesOnStructuralChange, updatePrintSettingsOnStructuralChange, } from "../api/named-range-structural";
5
7
  import { shiftPivotsOnDelete } from "../api/pivot-range";
6
- import { updateRangedRulesOnStructuralChange } from "../api/range-rule-helpers";
7
8
  import { updateSheetRangeOnDelete } from "../api/range";
9
+ import { updateRangedRulesOnStructuralChange } from "../api/range-rule-helpers";
8
10
  import { moveFilterView } from "../api/selection";
9
11
  import { updateFormulasForStructuralChange } from "../api/structural-formula-update";
12
+ import { breakStructuredRefsForRemovedTableParts, collectRemovedTableParts, removeSpillsOfDeletedAnchors, } from "../api/structural-table-refs";
10
13
  export var deleteRow = function (_a) {
11
- var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getSheetName = _a.getSheetName, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, getGraphNodes = _a.getGraphNodes, getGraphNodesInSheet = _a.getGraphNodesInSheet, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeActiveCell = _a.onChangeActiveCell, onChangeSelections = _a.onChangeSelections, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onChangePivotTables = _a.onChangePivotTables;
14
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getSheetName = _a.getSheetName, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, getGraphNodes = _a.getGraphNodes, getGraphNodesInSheet = _a.getGraphNodesInSheet, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeActiveCell = _a.onChangeActiveCell, onChangeSelections = _a.onChangeSelections, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onChangePivotTables = _a.onChangePivotTables, tables = _a.tables, getArrayRange = _a.getArrayRange, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeEmbeds = _a.onChangeEmbeds, onChangeCharts = _a.onChangeCharts, onChangeProtectedRanges = _a.onChangeProtectedRanges;
12
15
  return function (sheetId, rowIndexes) {
13
16
  if (!rowIndexes.length)
14
17
  return;
@@ -84,7 +87,7 @@ export var deleteRow = function (_a) {
84
87
  // Data validations
85
88
  onChangeDataValidations === null || onChangeDataValidations === void 0 ? void 0 : onChangeDataValidations(function (prevValidations) {
86
89
  var _a = __read(produceWithPatches(prevValidations, function (draft) {
87
- updateRangedRulesOnStructuralChange(draft, "delete", "row", minRowIndex, count, sheetId);
90
+ updateRangedRulesOnStructuralChange(draft, "delete", "row", minRowIndex, count, sheetId, { getSheetName: getSheetName });
88
91
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
89
92
  saveHistory({ dataValidations: { patches: patches, inversePatches: inversePatches } });
90
93
  return nextState;
@@ -92,11 +95,20 @@ export var deleteRow = function (_a) {
92
95
  // Conditional formats
93
96
  onChangeConditionalFormats === null || onChangeConditionalFormats === void 0 ? void 0 : onChangeConditionalFormats(function (prevConditionalFormats) {
94
97
  var _a = __read(produceWithPatches(prevConditionalFormats, function (draft) {
95
- updateRangedRulesOnStructuralChange(draft, "delete", "row", minRowIndex, count, sheetId);
98
+ updateRangedRulesOnStructuralChange(draft, "delete", "row", minRowIndex, count, sheetId, { getSheetName: getSheetName });
96
99
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
97
100
  saveHistory({ conditionalFormats: { patches: patches, inversePatches: inversePatches } });
98
101
  return nextState;
99
102
  });
103
+ // Defined names: shift back / shrink; a name whose whole range is
104
+ // deleted is kept as `#REF!` so its users evaluate `#REF!`, like Excel.
105
+ onChangeNamedRanges === null || onChangeNamedRanges === void 0 ? void 0 : onChangeNamedRanges(function (prevNamedRanges) {
106
+ var _a = __read(produceWithPatches(prevNamedRanges, function (draft) {
107
+ updateNamedRangesOnStructuralChange(draft, "row", "delete", minRowIndex, count, sheetId);
108
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
109
+ saveHistory({ namedRanges: { patches: patches, inversePatches: inversePatches } });
110
+ return nextState;
111
+ });
100
112
  // Shift pivot tables: ranges shrink/shift; targetPosition anchors to
101
113
  // the start of the deletion when its row falls inside the deletion.
102
114
  onChangePivotTables === null || onChangePivotTables === void 0 ? void 0 : onChangePivotTables(function (prevPivots) {
@@ -129,11 +141,35 @@ export var deleteRow = function (_a) {
129
141
  saveHistory({ citations: { patches: patches, inversePatches: inversePatches } });
130
142
  return nextState;
131
143
  });
144
+ // Anchored objects (Excel ANC rules): floating charts / embeds move with
145
+ // their anchor cell, chart series ranges and AllowEditRange rectangles
146
+ // shift like references. Frozen panes are a positional viewport split
147
+ // and are deliberately NOT touched here.
148
+ onChangeEmbeds === null || onChangeEmbeds === void 0 ? void 0 : onChangeEmbeds(function (prevEmbeds) {
149
+ var _a = __read(produceWithPatches(prevEmbeds, function (draft) {
150
+ shiftEmbedsOnStructuralChange(draft, sheetId, "row", "delete", minRowIndex, count);
151
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
152
+ saveHistory({ embeds: { patches: patches, inversePatches: inversePatches } });
153
+ return nextState;
154
+ });
155
+ onChangeCharts === null || onChangeCharts === void 0 ? void 0 : onChangeCharts(function (prevCharts) {
156
+ var _a = __read(produceWithPatches(prevCharts, function (draft) {
157
+ shiftChartsOnStructuralChange(draft, sheetId, "row", "delete", minRowIndex, count);
158
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
159
+ saveHistory({ charts: { patches: patches, inversePatches: inversePatches } });
160
+ return nextState;
161
+ });
162
+ onChangeProtectedRanges === null || onChangeProtectedRanges === void 0 ? void 0 : onChangeProtectedRanges(function (prevProtectedRanges) {
163
+ var _a = __read(produceWithPatches(prevProtectedRanges, function (draft) {
164
+ shiftProtectedRangesOnStructuralChange(draft, sheetId, "row", "delete", minRowIndex, count);
165
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
166
+ saveHistory({ protectedRanges: { patches: patches, inversePatches: inversePatches } });
167
+ return nextState;
168
+ });
132
169
  // Sheet metadata
133
170
  onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
134
171
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
135
- var e_1, _a;
136
- var _b;
172
+ var _a;
137
173
  var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
138
174
  if (!sheet)
139
175
  return;
@@ -141,7 +177,7 @@ export var deleteRow = function (_a) {
141
177
  sheet.rowMetadata.splice(minRowIndex, count);
142
178
  }
143
179
  if (sheet.basicFilter) {
144
- var _c = sheet.basicFilter.range, startRowIndex = _c.startRowIndex, endRowIndex = _c.endRowIndex;
180
+ var _b = sheet.basicFilter.range, startRowIndex = _b.startRowIndex, endRowIndex = _b.endRowIndex;
145
181
  if (minRowIndex < startRowIndex) {
146
182
  moveFilterView(sheet.basicFilter, count, Direction.Up);
147
183
  }
@@ -154,35 +190,58 @@ export var deleteRow = function (_a) {
154
190
  delete sheet.basicFilter;
155
191
  }
156
192
  }
157
- if (sheet.frozenRowCount) {
158
- try {
159
- for (var sortedRowIndexes_1 = __values(sortedRowIndexes), sortedRowIndexes_1_1 = sortedRowIndexes_1.next(); !sortedRowIndexes_1_1.done; sortedRowIndexes_1_1 = sortedRowIndexes_1.next()) {
160
- var rowIndex = sortedRowIndexes_1_1.value;
161
- if (rowIndex <= sheet.frozenRowCount) {
162
- sheet.frozenRowCount--;
163
- }
164
- }
165
- }
166
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
167
- finally {
168
- try {
169
- if (sortedRowIndexes_1_1 && !sortedRowIndexes_1_1.done && (_a = sortedRowIndexes_1.return)) _a.call(sortedRowIndexes_1);
170
- }
171
- finally { if (e_1) throw e_1.error; }
172
- }
173
- }
174
193
  if (sheet.merges) {
175
194
  sheet.merges = shrinkMergesOnRowDelete(sheet.merges, minRowIndex, count);
176
195
  }
177
- sheet.rowCount = Math.max(1, ((_b = sheet.rowCount) !== null && _b !== void 0 ? _b : rowCount) - count);
196
+ // `_xlnm.Print_Area` / `_xlnm.Print_Titles` follow the defined-name rule.
197
+ if (sheet.printSettings) {
198
+ updatePrintSettingsOnStructuralChange(sheet.printSettings, "row", "delete", minRowIndex, count);
199
+ }
200
+ sheet.rowCount = Math.max(1, ((_a = sheet.rowCount) !== null && _a !== void 0 ? _a : rowCount) - count);
201
+ // Frozen panes are positional: the split stays where it is, only
202
+ // clamped so the freeze never exceeds the shrunk sheet.
203
+ if (sheet.frozenRowCount && sheet.frozenRowCount > sheet.rowCount) {
204
+ sheet.frozenRowCount = sheet.rowCount;
205
+ }
178
206
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
179
207
  saveHistory({ sheets: { patches: patches, inversePatches: inversePatches } });
180
208
  return nextState;
181
209
  });
210
+ // Tables whose header row goes (dropped above): their structured refs
211
+ // break to `#REF!`, computed from the PRE-edit definitions.
212
+ var removedTableParts = collectRemovedTableParts(tables, sheetId, "row", minRowIndex, maxRowIndex);
182
213
  // Sheet data: three-pass formula update, then splice the rows out.
183
214
  onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
184
215
  var _a = __read(produceWithPatches(prevSheetData, function (draft) {
185
216
  var _a;
217
+ // A dynamic array whose anchor row is deleted takes its spill with
218
+ // it — drop the projected cells before the rows close up.
219
+ removeSpillsOfDeletedAnchors({
220
+ draft: draft,
221
+ sheetId: sheetId,
222
+ axis: "row",
223
+ minIndex: minRowIndex,
224
+ maxIndex: maxRowIndex,
225
+ getArrayRange: getArrayRange,
226
+ locale: locale,
227
+ cellXfsRegistry: cellXfsRegistry,
228
+ sharedStringRegistry: sharedStringRegistry,
229
+ });
230
+ breakStructuredRefsForRemovedTableParts({
231
+ draft: draft,
232
+ sheetId: sheetId,
233
+ axis: "row",
234
+ referenceIndex: minRowIndex,
235
+ count: count,
236
+ removed: removedTableParts,
237
+ getGraphNodes: getGraphNodes,
238
+ enqueueCalculation: enqueueCalculation,
239
+ enqueueGraphOperation: enqueueGraphOperation,
240
+ recalcCells: recalcCells,
241
+ locale: locale,
242
+ cellXfsRegistry: cellXfsRegistry,
243
+ sharedStringRegistry: sharedStringRegistry,
244
+ });
186
245
  updateFormulasForStructuralChange({
187
246
  draft: draft,
188
247
  axis: "row",
@@ -1,5 +1,14 @@
1
1
  import type { CellData, CellInterface, SelectionArea } from "@rowsncolumns/common-types";
2
2
  import type { SelectionAttributes, Sheet } from "@rowsncolumns/spreadsheet";
3
3
  import type { UseOnInsertCellsShiftDown } from "../hooks/use-on-insert-cells-shift-down";
4
- export declare const insertCellsShiftDown: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getActiveCell, getSelections, getDependents, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeCitations, }: UseOnInsertCellsShiftDown<T, S>) => (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
4
+ /**
5
+ * Insert cells ▸ Shift cells down (SHF-01, SHF-06, SHF-07, SHF-08, FMT-03). Only the selection's
6
+ * columns move: every cell at or below the selection's first row slides down by the selection's
7
+ * height. References that target a shifted cell follow it; a range that lies entirely inside the
8
+ * shifted columns and straddles the insertion row grows by the inserted height (SHF-08); a wider
9
+ * range keeps its address (SHF-07). The vacated cells take the formatting of the cell above the
10
+ * insertion (FMT-03). Refusals (torn merge/table/array, off-sheet push) are decided by the hook via
11
+ * `getShiftCellsRefusal` before this runs.
12
+ */
13
+ export declare const insertCellsShiftDown: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getActiveCell, getSelections, getDependents, getSheetName, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeCitations, }: UseOnInsertCellsShiftDown<T, S>) => (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
5
14
  //# sourceMappingURL=insert-cells-shift-down.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insert-cells-shift-down.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-down.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAM5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAGzF,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,gQAgBvE,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE9B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,SAoMnD,CAAC"}
1
+ {"version":3,"file":"insert-cells-shift-down.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-down.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAe5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAIzF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,8RAkBvE,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE9B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,SAoQnD,CAAC"}
@@ -1,39 +1,47 @@
1
- import { __assign, __read, __spreadArray, __values } from "tslib";
2
- import { selectionFromActiveCell } from "@rowsncolumns/utils";
1
+ import { __read, __spreadArray, __values } from "tslib";
3
2
  import { produceWithPatches } from "immer";
4
- import { processSideEffectDependentCells } from "../api/dependency";
3
+ import { collectUniqueDependentsForRange, processSideEffectDependentCells, } from "../api/dependency";
4
+ import { createSheetCellIdentifier, expandRangesInFormula } from "../api/formula";
5
5
  import { cloneCellWithFormatting, createSheetDraft } from "../api/immer-utils";
6
- import { moveMergedCells } from "../api/merges";
6
+ import { shiftMergesInBand } from "../api/merges";
7
+ import { isRangeInsideBand, resolveShiftSelection, shiftBand, } from "../api/structural-guards";
8
+ import { SheetCell } from "../sheet-cell";
9
+ /**
10
+ * Insert cells ▸ Shift cells down (SHF-01, SHF-06, SHF-07, SHF-08, FMT-03). Only the selection's
11
+ * columns move: every cell at or below the selection's first row slides down by the selection's
12
+ * height. References that target a shifted cell follow it; a range that lies entirely inside the
13
+ * shifted columns and straddles the insertion row grows by the inserted height (SHF-08); a wider
14
+ * range keeps its address (SHF-07). The vacated cells take the formatting of the cell above the
15
+ * insertion (FMT-03). Refusals (torn merge/table/array, off-sheet push) are decided by the hook via
16
+ * `getShiftCellsRefusal` before this runs.
17
+ */
7
18
  export var insertCellsShiftDown = function (_a) {
8
- var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeCitations = _a.onChangeCitations;
19
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, getDependents = _a.getDependents, getSheetName = _a.getSheetName, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeCitations = _a.onChangeCitations;
9
20
  return function (sheetId, activeCell, selections) {
21
+ var _a;
10
22
  var saveHistory = createHistory();
11
23
  // We need to track this for history. Precedent cells
12
24
  var recalcCells = new Map();
13
- // Count
14
- var finalSelections = selections.length
15
- ? selections
16
- : selectionFromActiveCell(activeCell);
17
- // Last selection
18
- var selection = finalSelections[finalSelections.length - 1];
19
- var count = selection.range.endRowIndex - selection.range.startRowIndex + 1;
25
+ var selection = resolveShiftSelection(activeCell, selections);
26
+ var _b = selection.range, r1 = _b.startRowIndex, r2 = _b.endRowIndex, c1 = _b.startColumnIndex, c2 = _b.endColumnIndex;
27
+ var count = r2 - r1 + 1;
28
+ var band = shiftBand("down", selection.range);
29
+ var sheetName = (_a = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(sheetId)) !== null && _a !== void 0 ? _a : "";
20
30
  enqueueStructureChange === null || enqueueStructureChange === void 0 ? void 0 : enqueueStructureChange({
21
31
  kind: "insert-cells-shift-down",
22
32
  sheetId: sheetId,
23
- startRowIndex: selection.range.startRowIndex,
24
- endRowIndex: selection.range.endRowIndex,
25
- startColumnIndex: selection.range.startColumnIndex,
26
- endColumnIndex: selection.range.endColumnIndex,
33
+ startRowIndex: r1,
34
+ endRowIndex: r2,
35
+ startColumnIndex: c1,
36
+ endColumnIndex: c2,
27
37
  rowCount: rowCount,
28
38
  });
29
- // Update sheets
39
+ // Update sheets — merges wholly inside the shifted columns ride down with their cells.
30
40
  onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
31
41
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
32
42
  var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
33
- if (sheet) {
34
- for (var rowIndex = selection.range.startRowIndex; rowIndex <= selection.range.endRowIndex; rowIndex++) {
35
- sheet.merges = moveMergedCells(sheet.merges, "row-insert", rowIndex);
36
- }
43
+ if (sheet === null || sheet === void 0 ? void 0 : sheet.merges) {
44
+ sheet.merges = shiftMergesInBand(sheet.merges, "row", r1, count, true, c1, c2);
37
45
  }
38
46
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
39
47
  // Save history
@@ -42,40 +50,61 @@ export var insertCellsShiftDown = function (_a) {
42
50
  });
43
51
  return nextState;
44
52
  });
53
+ // Tables whose columns the band covers entirely move with it (a partial cover was refused).
54
+ onChangeTables === null || onChangeTables === void 0 ? void 0 : onChangeTables(function (prevTables) {
55
+ var _a = __read(produceWithPatches(prevTables, function (draft) {
56
+ var e_1, _a;
57
+ try {
58
+ for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
59
+ var table = draft_1_1.value;
60
+ if (table.sheetId !== sheetId ||
61
+ !isRangeInsideBand(table.range, band)) {
62
+ continue;
63
+ }
64
+ table.range.startRowIndex += count;
65
+ table.range.endRowIndex += count;
66
+ }
67
+ }
68
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
69
+ finally {
70
+ try {
71
+ if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
72
+ }
73
+ finally { if (e_1) throw e_1.error; }
74
+ }
75
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
76
+ saveHistory({ tables: { patches: patches, inversePatches: inversePatches } });
77
+ return nextState;
78
+ });
45
79
  // Update citations - shift if in affected columns and after insertion row
46
80
  onChangeCitations === null || onChangeCitations === void 0 ? void 0 : onChangeCitations(function (prevCitations) {
47
81
  var _a = __read(produceWithPatches(prevCitations, function (draft) {
48
- var e_1, _a;
49
- var affectedColStart = selection.range.startColumnIndex;
50
- var affectedColEnd = selection.range.endColumnIndex;
51
- var insertRowStart = selection.range.startRowIndex;
52
- var shiftAmount = selection.range.endRowIndex - selection.range.startRowIndex + 1;
82
+ var e_2, _a;
53
83
  try {
54
- for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
55
- var citation = draft_1_1.value;
84
+ for (var draft_2 = __values(draft), draft_2_1 = draft_2.next(); !draft_2_1.done; draft_2_1 = draft_2.next()) {
85
+ var citation = draft_2_1.value;
56
86
  // Skip citations on other sheets
57
87
  if (citation.range.sheetId !== sheetId) {
58
88
  continue;
59
89
  }
60
90
  // Check if citation overlaps with affected columns
61
- var citationColStart = citation.range.startColumnIndex;
62
- var citationColEnd = citation.range.endColumnIndex;
63
- var colsOverlap = !(citationColEnd < affectedColStart || citationColStart > affectedColEnd);
91
+ var colsOverlap = !(citation.range.endColumnIndex < c1 ||
92
+ citation.range.startColumnIndex > c2);
64
93
  if (colsOverlap) {
65
94
  // If citation starts at or after the insertion row, shift it down
66
- if (citation.range.startRowIndex >= insertRowStart) {
67
- citation.range.startRowIndex += shiftAmount;
68
- citation.range.endRowIndex += shiftAmount;
95
+ if (citation.range.startRowIndex >= r1) {
96
+ citation.range.startRowIndex += count;
97
+ citation.range.endRowIndex += count;
69
98
  }
70
99
  }
71
100
  }
72
101
  }
73
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
102
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
74
103
  finally {
75
104
  try {
76
- if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
105
+ if (draft_2_1 && !draft_2_1.done && (_a = draft_2.return)) _a.call(draft_2);
77
106
  }
78
- finally { if (e_1) throw e_1.error; }
107
+ finally { if (e_2) throw e_2.error; }
79
108
  }
80
109
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
81
110
  saveHistory({
@@ -86,15 +115,34 @@ export var insertCellsShiftDown = function (_a) {
86
115
  // Sheet data
87
116
  onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
88
117
  var _a = __read(produceWithPatches(prevSheetData, function (draft) {
89
- var _a, _b, _c, _d;
118
+ var e_3, _a;
119
+ var _b, _c, _d, _e, _f, _g, _h, _j;
90
120
  var movedKeys = new Set();
91
- var totalRows = (_b = (_a = draft[sheetId]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : rowCount;
92
- for (var rowIndex = totalRows; rowIndex > 0; rowIndex--) {
121
+ var totalRows = Math.max((_c = (_b = draft[sheetId]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0, r2 + 1);
122
+ // Everything at or below the insertion row in the band's columns moves down by `count`.
123
+ var sourceRange = {
124
+ startRowIndex: r1,
125
+ endRowIndex: totalRows + count,
126
+ startColumnIndex: c1,
127
+ endColumnIndex: c2,
128
+ };
129
+ // Formulas that read a moving cell — captured before the graph goes stale.
130
+ var dependents = collectUniqueDependentsForRange({
131
+ draft: draft,
132
+ sheetId: sheetId,
133
+ sourceRange: {
134
+ startRowIndex: r1,
135
+ endRowIndex: totalRows,
136
+ startColumnIndex: c1,
137
+ endColumnIndex: c2,
138
+ },
139
+ getDependents: getDependents,
140
+ });
141
+ for (var rowIndex = totalRows; rowIndex >= r1; rowIndex--) {
93
142
  // We have a for loop
94
143
  // to cater for table expansion
95
144
  // which will push multiple columns down
96
- for (var columnIndex = selection.range.startColumnIndex; columnIndex <= selection.range.endColumnIndex; columnIndex++) {
97
- var sourceRange = __assign(__assign({}, selection.range), { endRowIndex: selection.range.endRowIndex + count });
145
+ for (var columnIndex = c1; columnIndex <= c2; columnIndex++) {
98
146
  // Process dependents
99
147
  processSideEffectDependentCells({
100
148
  draft: draft,
@@ -105,6 +153,7 @@ export var insertCellsShiftDown = function (_a) {
105
153
  enqueueGraphOperation: enqueueGraphOperation,
106
154
  enqueueCalculation: enqueueCalculation,
107
155
  getDependents: getDependents,
156
+ getSheetName: getSheetName,
108
157
  recalcCells: recalcCells,
109
158
  rowDelta: count,
110
159
  sourceRange: sourceRange,
@@ -115,26 +164,72 @@ export var insertCellsShiftDown = function (_a) {
115
164
  cellXfsRegistry: cellXfsRegistry,
116
165
  sharedStringRegistry: sharedStringRegistry,
117
166
  });
118
- // Skip unaffected cells
119
- if (rowIndex < selection.range.startRowIndex) {
167
+ }
168
+ }
169
+ // SHF-08: a range living entirely inside the band's columns that straddles the insertion
170
+ // row grows by the inserted height (Excel's "insert inside a range expands it"). Runs on
171
+ // the pre-shift positions; the value shift below carries in-band dependents down.
172
+ var sheetCell = new SheetCell();
173
+ try {
174
+ for (var _k = __values(dependents.values()), _l = _k.next(); !_l.done; _l = _k.next()) {
175
+ var pos = _l.value;
176
+ if (pos.sheetId !== sheetId)
120
177
  continue;
121
- }
178
+ var currentSheet = createSheetDraft(draft, sheetId, pos.rowIndex);
179
+ var cellData = (_e = (_d = currentSheet[pos.rowIndex]) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e[pos.columnIndex];
180
+ sheetCell.assign(sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
181
+ var formulaValue = sheetCell.formula;
182
+ if (!formulaValue)
183
+ continue;
184
+ var expanded = expandRangesInFormula(formulaValue, r1, count, "row", sheetName, { bandSpan: { startIndex: c1, endIndex: c2 } });
185
+ if (!expanded || expanded === formulaValue)
186
+ continue;
187
+ sheetCell.setFormulaValue(expanded, false);
188
+ currentSheet[pos.rowIndex].values[pos.columnIndex] =
189
+ sheetCell.getCellData();
190
+ var movesWithBand = pos.rowIndex >= r1 && pos.columnIndex >= c1 && pos.columnIndex <= c2;
191
+ var finalPosition = {
192
+ sheetId: sheetId,
193
+ rowIndex: movesWithBand ? pos.rowIndex + count : pos.rowIndex,
194
+ columnIndex: pos.columnIndex,
195
+ };
196
+ var enqueueOperation = sheetCell.ephemeral()
197
+ ? enqueueCalculation
198
+ : enqueueGraphOperation;
199
+ enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "add", position: finalPosition });
200
+ enqueueCalculation === null || enqueueCalculation === void 0 ? void 0 : enqueueCalculation({
201
+ type: "dirty",
202
+ position: finalPosition,
203
+ force: true,
204
+ });
205
+ recalcCells.set(createSheetCellIdentifier(sheetId, finalPosition.rowIndex, finalPosition.columnIndex), finalPosition);
206
+ }
207
+ }
208
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
209
+ finally {
210
+ try {
211
+ if (_l && !_l.done && (_a = _k.return)) _a.call(_k);
122
212
  }
213
+ finally { if (e_3) throw e_3.error; }
123
214
  }
124
215
  // Update values
125
- for (var rowIndex = totalRows + count; rowIndex > selection.range.startRowIndex; rowIndex--) {
216
+ for (var rowIndex = totalRows + count; rowIndex > r1; rowIndex--) {
126
217
  var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
127
- for (var columnIndex = selection.range.endColumnIndex; columnIndex >= selection.range.startColumnIndex; columnIndex--) {
128
- var previousValue = (_d = (_c = currentSheet[rowIndex - count]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[columnIndex];
218
+ for (var columnIndex = c2; columnIndex >= c1; columnIndex--) {
219
+ var previousValue = (_g = (_f = currentSheet[rowIndex - count]) === null || _f === void 0 ? void 0 : _f.values) === null || _g === void 0 ? void 0 : _g[columnIndex];
129
220
  currentSheet[rowIndex].values[columnIndex] = previousValue;
130
221
  }
131
222
  }
132
- // Update inserts cells
133
- for (var rowIndex = selection.range.startRowIndex; rowIndex <= selection.range.endRowIndex; rowIndex++) {
223
+ // FMT-03: the inserted cells take the formatting of the cell directly ABOVE the
224
+ // insertion; at row 1 there is none, so they keep the displaced cell's formatting.
225
+ for (var rowIndex = r1; rowIndex <= r2; rowIndex++) {
134
226
  var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
135
- for (var columnIndex = selection.range.endColumnIndex; columnIndex >= selection.range.startColumnIndex; columnIndex--) {
227
+ for (var columnIndex = c2; columnIndex >= c1; columnIndex--) {
228
+ var formatSource = r1 > 1
229
+ ? (_j = (_h = currentSheet[r1 - 1]) === null || _h === void 0 ? void 0 : _h.values) === null || _j === void 0 ? void 0 : _j[columnIndex]
230
+ : currentSheet[rowIndex].values[columnIndex];
136
231
  currentSheet[rowIndex].values[columnIndex] =
137
- cloneCellWithFormatting(currentSheet[rowIndex].values[columnIndex]);
232
+ cloneCellWithFormatting(formatSource);
138
233
  }
139
234
  }
140
235
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
@@ -1,5 +1,14 @@
1
1
  import type { CellData, CellInterface, SelectionArea } from "@rowsncolumns/common-types";
2
2
  import type { SelectionAttributes, Sheet } from "@rowsncolumns/spreadsheet";
3
3
  import type { UseOnInsertCellsShiftRight } from "../hooks/use-on-insert-cells-shift-right";
4
- export declare const insertCellsShiftRight: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getActiveCell, getSelections, getDependents, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeCitations, }: UseOnInsertCellsShiftRight<T, S>) => (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
4
+ /**
5
+ * Insert cells ▸ Shift cells right (SHF-02, FMT-04) — the horizontal twin of
6
+ * `insertCellsShiftDown`: only the selection's rows move, every cell at or right of the selection's
7
+ * first column slides right by the selection's width. References follow shifted cells; a range
8
+ * entirely inside the shifted rows that straddles the insertion column widens (SHF-08 analog);
9
+ * the vacated cells take the formatting of the cell to the LEFT of the insertion (FMT-04). Refusals
10
+ * (torn merge/table/array, a non-blank cell pushed past `columnCount` — SHF-10) are decided by the
11
+ * hook before this runs.
12
+ */
13
+ export declare const insertCellsShiftRight: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getActiveCell, getSelections, getDependents, getSheetName, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeCitations, }: UseOnInsertCellsShiftRight<T, S>) => (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
5
14
  //# sourceMappingURL=insert-cells-shift-right.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insert-cells-shift-right.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-right.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAM5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAG3F,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,gQAgBxE,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,MAE/B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,SA2LnD,CAAC"}
1
+ {"version":3,"file":"insert-cells-shift-right.d.ts","sourceRoot":"","sources":["../../../interface/insert-cells-shift-right.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAgB5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAI3F;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,8RAkBxE,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,MAE/B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,SAqQnD,CAAC"}