@rowsncolumns/spreadsheet-state 28.0.75 → 29.0.0

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 (259) 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/copy-paste.d.ts +8 -1
  5. package/dist/cjs/api/copy-paste.d.ts.map +1 -1
  6. package/dist/cjs/api/copy-paste.js +4 -2
  7. package/dist/cjs/api/dependency.d.ts +13 -2
  8. package/dist/cjs/api/dependency.d.ts.map +1 -1
  9. package/dist/cjs/api/dependency.js +11 -5
  10. package/dist/cjs/api/formula.d.ts +61 -4
  11. package/dist/cjs/api/formula.d.ts.map +1 -1
  12. package/dist/cjs/api/formula.js +250 -61
  13. package/dist/cjs/api/immer-utils.d.ts +11 -1
  14. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  15. package/dist/cjs/api/immer-utils.js +17 -1
  16. package/dist/cjs/api/insert-cut-cells.d.ts +35 -0
  17. package/dist/cjs/api/insert-cut-cells.d.ts.map +1 -0
  18. package/dist/cjs/api/insert-cut-cells.js +60 -0
  19. package/dist/cjs/api/merges.d.ts +16 -0
  20. package/dist/cjs/api/merges.d.ts.map +1 -1
  21. package/dist/cjs/api/merges.js +75 -1
  22. package/dist/cjs/api/named-range-structural.d.ts +62 -0
  23. package/dist/cjs/api/named-range-structural.d.ts.map +1 -0
  24. package/dist/cjs/api/named-range-structural.js +197 -0
  25. package/dist/cjs/api/range-rule-helpers.d.ts +45 -1
  26. package/dist/cjs/api/range-rule-helpers.d.ts.map +1 -1
  27. package/dist/cjs/api/range-rule-helpers.js +159 -6
  28. package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
  29. package/dist/cjs/api/structural-formula-update.js +24 -6
  30. package/dist/cjs/api/structural-guards.d.ts +78 -0
  31. package/dist/cjs/api/structural-guards.d.ts.map +1 -0
  32. package/dist/cjs/api/structural-guards.js +202 -0
  33. package/dist/cjs/api/structural-table-refs.d.ts +94 -0
  34. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -0
  35. package/dist/cjs/api/structural-table-refs.js +313 -0
  36. package/dist/cjs/api/subtotal.d.ts +20 -13
  37. package/dist/cjs/api/subtotal.d.ts.map +1 -1
  38. package/dist/cjs/api/subtotal.js +26 -19
  39. package/dist/cjs/commands.d.ts +9 -0
  40. package/dist/cjs/commands.d.ts.map +1 -1
  41. package/dist/cjs/constants.d.ts +25 -0
  42. package/dist/cjs/constants.d.ts.map +1 -0
  43. package/dist/cjs/constants.js +26 -0
  44. package/dist/cjs/hooks/use-calculation-worker.d.ts.map +1 -1
  45. package/dist/cjs/hooks/use-calculation-worker.js +64 -6
  46. package/dist/cjs/hooks/use-calculation.d.ts +7 -0
  47. package/dist/cjs/hooks/use-calculation.d.ts.map +1 -1
  48. package/dist/cjs/hooks/use-calculation.js +15 -0
  49. package/dist/cjs/hooks/use-on-calculation-success.d.ts +7 -0
  50. package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
  51. package/dist/cjs/hooks/use-on-calculation-success.js +7 -1
  52. package/dist/cjs/hooks/use-on-copy.d.ts +1 -1
  53. package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
  54. package/dist/cjs/hooks/use-on-copy.js +2 -3
  55. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
  56. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  57. package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +27 -2
  58. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
  59. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  60. package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +27 -2
  61. package/dist/cjs/hooks/use-on-delete-column.d.ts +13 -4
  62. package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
  63. package/dist/cjs/hooks/use-on-delete-column.js +14 -2
  64. package/dist/cjs/hooks/use-on-delete-row.d.ts +13 -4
  65. package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
  66. package/dist/cjs/hooks/use-on-delete-row.js +14 -2
  67. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
  68. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  69. package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +27 -2
  70. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
  71. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  72. package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +27 -2
  73. package/dist/cjs/hooks/use-on-insert-column.d.ts +10 -3
  74. package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
  75. package/dist/cjs/hooks/use-on-insert-column.js +33 -7
  76. package/dist/cjs/hooks/use-on-insert-row.d.ts +10 -3
  77. package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
  78. package/dist/cjs/hooks/use-on-insert-row.js +32 -7
  79. package/dist/cjs/hooks/use-on-move-columns.d.ts +2 -1
  80. package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
  81. package/dist/cjs/hooks/use-on-move-columns.js +14 -5
  82. package/dist/cjs/hooks/use-on-move-rows.d.ts +16 -1
  83. package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
  84. package/dist/cjs/hooks/use-on-move-rows.js +30 -5
  85. package/dist/cjs/hooks/use-on-move-selection.d.ts +7 -2
  86. package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
  87. package/dist/cjs/hooks/use-on-move-selection.js +14 -1
  88. package/dist/cjs/hooks/use-on-paste.d.ts +12 -2
  89. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  90. package/dist/cjs/hooks/use-on-paste.js +56 -8
  91. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +16 -5
  92. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  93. package/dist/cjs/hooks/use-spreadsheet-state.js +141 -18
  94. package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
  95. package/dist/cjs/hooks/use-structured-reference.js +10 -6
  96. package/dist/cjs/index.d.ts +4 -0
  97. package/dist/cjs/index.d.ts.map +1 -1
  98. package/dist/cjs/index.js +4 -0
  99. package/dist/cjs/interface/calculation-interface.d.ts +9 -0
  100. package/dist/cjs/interface/calculation-interface.d.ts.map +1 -1
  101. package/dist/cjs/interface/calculation-interface.js +31 -2
  102. package/dist/cjs/interface/delete-cells-shift-left.d.ts +8 -1
  103. package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
  104. package/dist/cjs/interface/delete-cells-shift-left.js +158 -80
  105. package/dist/cjs/interface/delete-cells-shift-up.d.ts +9 -1
  106. package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
  107. package/dist/cjs/interface/delete-cells-shift-up.js +155 -73
  108. package/dist/cjs/interface/delete-column.d.ts +1 -1
  109. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  110. package/dist/cjs/interface/delete-column.js +109 -50
  111. package/dist/cjs/interface/delete-row.d.ts +1 -1
  112. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  113. package/dist/cjs/interface/delete-row.js +105 -46
  114. package/dist/cjs/interface/insert-cells-shift-down.d.ts +10 -1
  115. package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
  116. package/dist/cjs/interface/insert-cells-shift-down.js +147 -52
  117. package/dist/cjs/interface/insert-cells-shift-right.d.ts +10 -1
  118. package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
  119. package/dist/cjs/interface/insert-cells-shift-right.js +154 -58
  120. package/dist/cjs/interface/insert-column.d.ts +1 -1
  121. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  122. package/dist/cjs/interface/insert-column.js +80 -26
  123. package/dist/cjs/interface/insert-row.d.ts +1 -1
  124. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  125. package/dist/cjs/interface/insert-row.js +63 -15
  126. package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
  127. package/dist/cjs/interface/spreadsheet-interface.js +33 -0
  128. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  129. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  130. package/dist/esm/api/anchored-objects.d.ts +66 -0
  131. package/dist/esm/api/anchored-objects.d.ts.map +1 -0
  132. package/dist/esm/api/anchored-objects.js +212 -0
  133. package/dist/esm/api/copy-paste.d.ts +8 -1
  134. package/dist/esm/api/copy-paste.d.ts.map +1 -1
  135. package/dist/esm/api/copy-paste.js +4 -2
  136. package/dist/esm/api/dependency.d.ts +13 -2
  137. package/dist/esm/api/dependency.d.ts.map +1 -1
  138. package/dist/esm/api/dependency.js +10 -4
  139. package/dist/esm/api/formula.d.ts +61 -4
  140. package/dist/esm/api/formula.d.ts.map +1 -1
  141. package/dist/esm/api/formula.js +238 -60
  142. package/dist/esm/api/immer-utils.d.ts +11 -1
  143. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  144. package/dist/esm/api/immer-utils.js +16 -0
  145. package/dist/esm/api/insert-cut-cells.d.ts +35 -0
  146. package/dist/esm/api/insert-cut-cells.d.ts.map +1 -0
  147. package/dist/esm/api/insert-cut-cells.js +67 -0
  148. package/dist/esm/api/merges.d.ts +16 -0
  149. package/dist/esm/api/merges.d.ts.map +1 -1
  150. package/dist/esm/api/merges.js +60 -0
  151. package/dist/esm/api/named-range-structural.d.ts +62 -0
  152. package/dist/esm/api/named-range-structural.d.ts.map +1 -0
  153. package/dist/esm/api/named-range-structural.js +176 -0
  154. package/dist/esm/api/range-rule-helpers.d.ts +45 -1
  155. package/dist/esm/api/range-rule-helpers.d.ts.map +1 -1
  156. package/dist/esm/api/range-rule-helpers.js +153 -1
  157. package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
  158. package/dist/esm/api/structural-formula-update.js +24 -6
  159. package/dist/esm/api/structural-guards.d.ts +78 -0
  160. package/dist/esm/api/structural-guards.d.ts.map +1 -0
  161. package/dist/esm/api/structural-guards.js +186 -0
  162. package/dist/esm/api/structural-table-refs.d.ts +94 -0
  163. package/dist/esm/api/structural-table-refs.d.ts.map +1 -0
  164. package/dist/esm/api/structural-table-refs.js +219 -0
  165. package/dist/esm/api/subtotal.d.ts +20 -13
  166. package/dist/esm/api/subtotal.d.ts.map +1 -1
  167. package/dist/esm/api/subtotal.js +15 -8
  168. package/dist/esm/commands.d.ts +9 -0
  169. package/dist/esm/commands.d.ts.map +1 -1
  170. package/dist/esm/constants.d.ts +25 -0
  171. package/dist/esm/constants.d.ts.map +1 -0
  172. package/dist/esm/constants.js +26 -0
  173. package/dist/esm/hooks/use-calculation-worker.d.ts.map +1 -1
  174. package/dist/esm/hooks/use-calculation-worker.js +45 -0
  175. package/dist/esm/hooks/use-calculation.d.ts +7 -0
  176. package/dist/esm/hooks/use-calculation.d.ts.map +1 -1
  177. package/dist/esm/hooks/use-calculation.js +15 -0
  178. package/dist/esm/hooks/use-on-calculation-success.d.ts +7 -0
  179. package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
  180. package/dist/esm/hooks/use-on-calculation-success.js +7 -1
  181. package/dist/esm/hooks/use-on-copy.d.ts +1 -1
  182. package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
  183. package/dist/esm/hooks/use-on-copy.js +2 -3
  184. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +13 -3
  185. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  186. package/dist/esm/hooks/use-on-delete-cells-shift-left.js +26 -2
  187. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +13 -3
  188. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  189. package/dist/esm/hooks/use-on-delete-cells-shift-up.js +26 -2
  190. package/dist/esm/hooks/use-on-delete-column.d.ts +13 -4
  191. package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
  192. package/dist/esm/hooks/use-on-delete-column.js +14 -2
  193. package/dist/esm/hooks/use-on-delete-row.d.ts +13 -4
  194. package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
  195. package/dist/esm/hooks/use-on-delete-row.js +14 -2
  196. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +13 -3
  197. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  198. package/dist/esm/hooks/use-on-insert-cells-shift-down.js +26 -2
  199. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +13 -3
  200. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  201. package/dist/esm/hooks/use-on-insert-cells-shift-right.js +26 -2
  202. package/dist/esm/hooks/use-on-insert-column.d.ts +10 -3
  203. package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
  204. package/dist/esm/hooks/use-on-insert-column.js +33 -7
  205. package/dist/esm/hooks/use-on-insert-row.d.ts +10 -3
  206. package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
  207. package/dist/esm/hooks/use-on-insert-row.js +32 -7
  208. package/dist/esm/hooks/use-on-move-columns.d.ts +2 -1
  209. package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
  210. package/dist/esm/hooks/use-on-move-columns.js +14 -5
  211. package/dist/esm/hooks/use-on-move-rows.d.ts +16 -1
  212. package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
  213. package/dist/esm/hooks/use-on-move-rows.js +30 -5
  214. package/dist/esm/hooks/use-on-move-selection.d.ts +7 -2
  215. package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
  216. package/dist/esm/hooks/use-on-move-selection.js +14 -1
  217. package/dist/esm/hooks/use-on-paste.d.ts +12 -2
  218. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  219. package/dist/esm/hooks/use-on-paste.js +41 -2
  220. package/dist/esm/hooks/use-spreadsheet-state.d.ts +16 -5
  221. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  222. package/dist/esm/hooks/use-spreadsheet-state.js +141 -17
  223. package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
  224. package/dist/esm/hooks/use-structured-reference.js +10 -6
  225. package/dist/esm/index.d.ts +4 -0
  226. package/dist/esm/index.d.ts.map +1 -1
  227. package/dist/esm/index.js +4 -0
  228. package/dist/esm/interface/calculation-interface.d.ts +9 -0
  229. package/dist/esm/interface/calculation-interface.d.ts.map +1 -1
  230. package/dist/esm/interface/calculation-interface.js +33 -2
  231. package/dist/esm/interface/delete-cells-shift-left.d.ts +8 -1
  232. package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
  233. package/dist/esm/interface/delete-cells-shift-left.js +135 -59
  234. package/dist/esm/interface/delete-cells-shift-up.d.ts +9 -1
  235. package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
  236. package/dist/esm/interface/delete-cells-shift-up.js +133 -53
  237. package/dist/esm/interface/delete-column.d.ts +1 -1
  238. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  239. package/dist/esm/interface/delete-column.js +96 -38
  240. package/dist/esm/interface/delete-row.d.ts +1 -1
  241. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  242. package/dist/esm/interface/delete-row.js +98 -39
  243. package/dist/esm/interface/insert-cells-shift-down.d.ts +10 -1
  244. package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
  245. package/dist/esm/interface/insert-cells-shift-down.js +116 -47
  246. package/dist/esm/interface/insert-cells-shift-right.d.ts +10 -1
  247. package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
  248. package/dist/esm/interface/insert-cells-shift-right.js +120 -51
  249. package/dist/esm/interface/insert-column.d.ts +1 -1
  250. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  251. package/dist/esm/interface/insert-column.js +68 -18
  252. package/dist/esm/interface/insert-row.d.ts +1 -1
  253. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  254. package/dist/esm/interface/insert-row.js +60 -14
  255. package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
  256. package/dist/esm/interface/spreadsheet-interface.js +29 -0
  257. package/dist/esm/sheet-cell.d.ts.map +1 -1
  258. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  259. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SAuUjD,CAAC"}
1
+ {"version":3,"file":"delete-column.d.ts","sourceRoot":"","sources":["../../../interface/delete-column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAsBjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,0hBA+B/D,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MACrB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SA8bjD,CAAC"}
@@ -1,14 +1,16 @@
1
1
  import { __assign, __read, __spreadArray, __values } 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 { shrinkMergesOnColumnDelete } from "../api/merges";
6
+ import { updateNamedRangesOnStructuralChange, updatePrintSettingsOnStructuralChange, } from "../api/named-range-structural";
5
7
  import { shiftPivotsOnDelete } from "../api/pivot-range";
6
8
  import { updateRangedRulesOnStructuralChange } from "../api/range-rule-helpers";
7
- import { updateSheetRangeOnDelete } from "../api/range";
8
9
  import { moveFilterView } from "../api/selection";
9
10
  import { updateFormulasForStructuralChange } from "../api/structural-formula-update";
11
+ import { breakStructuredRefsForRemovedTableParts, collectRemovedTableParts, removeSpillsOfDeletedAnchors, } from "../api/structural-table-refs";
10
12
  export var deleteColumn = 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;
13
+ 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
14
  return function (sheetId, columnIndexes) {
13
15
  if (!columnIndexes.length)
14
16
  return;
@@ -29,31 +31,32 @@ export var deleteColumn = function (_a) {
29
31
  var activeCell = getActiveCell();
30
32
  var selections = getSelections();
31
33
  var newColumnCount = Math.max(1, columnCount - count);
32
- // NOTE: contiguity assumption — see delete-row.ts.
33
- var inDeletedColumns = activeCell.columnIndex >= minColumnIndex &&
34
- activeCell.columnIndex <= maxColumnIndex;
35
- var nextActiveColumnIndex = activeCell.columnIndex;
36
- if (inDeletedColumns) {
37
- nextActiveColumnIndex = Math.max(1, minColumnIndex - 1);
38
- }
39
- else if (activeCell.columnIndex > maxColumnIndex) {
40
- nextActiveColumnIndex = Math.max(1, activeCell.columnIndex - count);
41
- }
42
- if (nextActiveColumnIndex > newColumnCount) {
43
- nextActiveColumnIndex = newColumnCount;
44
- }
34
+ // Excel keeps the selection where it was (UI-02, column twin): after
35
+ // deleting columns C:D the selection still reads C:D — now over the
36
+ // columns that moved left — and the active cell sits in the first deleted
37
+ // column. Every coordinate loses the deleted columns that lie BEFORE it.
38
+ var deletedBefore = function (columnIndex) {
39
+ return sortedColumnIndexes.filter(function (index) { return index < columnIndex; }).length;
40
+ };
41
+ var clampColumn = function (columnIndex) {
42
+ return Math.min(Math.max(1, columnIndex), newColumnCount);
43
+ };
44
+ var nextActiveColumnIndex = clampColumn(activeCell.columnIndex - deletedBefore(activeCell.columnIndex));
45
45
  var nextActiveCell = nextActiveColumnIndex === activeCell.columnIndex
46
46
  ? activeCell
47
47
  : __assign(__assign({}, activeCell), { columnIndex: nextActiveColumnIndex });
48
- var fallbackSelectionColumnIndex = nextActiveCell.columnIndex;
49
48
  var nextSelections = selections.map(function (selection) {
50
49
  if (!selection.range)
51
50
  return selection;
52
- var updatedRange = updateSheetRangeOnDelete(__assign(__assign({}, selection.range), { sheetId: sheetId }), "column", minColumnIndex, count, sheetId);
53
- if (updatedRange) {
54
- return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startColumnIndex: updatedRange.startColumnIndex, endColumnIndex: updatedRange.endColumnIndex }) });
55
- }
56
- return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startColumnIndex: fallbackSelectionColumnIndex, endColumnIndex: fallbackSelectionColumnIndex }) });
51
+ var _a = selection.range, startColumnIndex = _a.startColumnIndex, endColumnIndex = _a.endColumnIndex;
52
+ var deletedWithin = sortedColumnIndexes.filter(function (index) { return index >= startColumnIndex && index <= endColumnIndex; }).length;
53
+ var size = endColumnIndex - startColumnIndex + 1;
54
+ var nextStart = clampColumn(startColumnIndex - deletedBefore(startColumnIndex));
55
+ // A partially covered area shrinks by the columns it lost; an area
56
+ // deleted outright keeps its size (it now frames the columns that moved
57
+ // left).
58
+ var nextSize = deletedWithin < size ? size - deletedWithin : size;
59
+ return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startColumnIndex: nextStart, endColumnIndex: clampColumn(nextStart + nextSize - 1) }) });
57
60
  });
58
61
  // Tables: shift / shrink, plus column-specific filter+sort spec updates
59
62
  // and table-column splice for partially-overlapped tables.
@@ -128,7 +131,7 @@ export var deleteColumn = function (_a) {
128
131
  // Data validations
129
132
  onChangeDataValidations === null || onChangeDataValidations === void 0 ? void 0 : onChangeDataValidations(function (prevValidations) {
130
133
  var _a = __read(produceWithPatches(prevValidations, function (draft) {
131
- updateRangedRulesOnStructuralChange(draft, "delete", "column", minColumnIndex, count, sheetId);
134
+ updateRangedRulesOnStructuralChange(draft, "delete", "column", minColumnIndex, count, sheetId, { getSheetName: getSheetName });
132
135
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
133
136
  saveHistory({ dataValidations: { patches: patches, inversePatches: inversePatches } });
134
137
  return nextState;
@@ -136,11 +139,20 @@ export var deleteColumn = function (_a) {
136
139
  // Conditional formats
137
140
  onChangeConditionalFormats === null || onChangeConditionalFormats === void 0 ? void 0 : onChangeConditionalFormats(function (prevConditionalFormats) {
138
141
  var _a = __read(produceWithPatches(prevConditionalFormats, function (draft) {
139
- updateRangedRulesOnStructuralChange(draft, "delete", "column", minColumnIndex, count, sheetId);
142
+ updateRangedRulesOnStructuralChange(draft, "delete", "column", minColumnIndex, count, sheetId, { getSheetName: getSheetName });
140
143
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
141
144
  saveHistory({ conditionalFormats: { patches: patches, inversePatches: inversePatches } });
142
145
  return nextState;
143
146
  });
147
+ // Defined names: shift back / shrink; a name whose whole range is
148
+ // deleted is kept as `#REF!` so its users evaluate `#REF!`, like Excel.
149
+ onChangeNamedRanges === null || onChangeNamedRanges === void 0 ? void 0 : onChangeNamedRanges(function (prevNamedRanges) {
150
+ var _a = __read(produceWithPatches(prevNamedRanges, function (draft) {
151
+ updateNamedRangesOnStructuralChange(draft, "column", "delete", minColumnIndex, count, sheetId);
152
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
153
+ saveHistory({ namedRanges: { patches: patches, inversePatches: inversePatches } });
154
+ return nextState;
155
+ });
144
156
  // Shift pivot tables.
145
157
  onChangePivotTables === null || onChangePivotTables === void 0 ? void 0 : onChangePivotTables(function (prevPivots) {
146
158
  var _a = __read(produceWithPatches(prevPivots, function (draft) {
@@ -171,11 +183,36 @@ export var deleteColumn = function (_a) {
171
183
  saveHistory({ citations: { patches: patches, inversePatches: inversePatches } });
172
184
  return nextState;
173
185
  });
186
+ // Anchored objects (Excel ANC rules): floating charts / embeds move with
187
+ // their anchor cell, chart series ranges and AllowEditRange rectangles
188
+ // shift like references. Frozen panes are a positional viewport split
189
+ // and are deliberately NOT touched here.
190
+ onChangeEmbeds === null || onChangeEmbeds === void 0 ? void 0 : onChangeEmbeds(function (prevEmbeds) {
191
+ var _a = __read(produceWithPatches(prevEmbeds, function (draft) {
192
+ shiftEmbedsOnStructuralChange(draft, sheetId, "column", "delete", minColumnIndex, count);
193
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
194
+ saveHistory({ embeds: { patches: patches, inversePatches: inversePatches } });
195
+ return nextState;
196
+ });
197
+ onChangeCharts === null || onChangeCharts === void 0 ? void 0 : onChangeCharts(function (prevCharts) {
198
+ var _a = __read(produceWithPatches(prevCharts, function (draft) {
199
+ shiftChartsOnStructuralChange(draft, sheetId, "column", "delete", minColumnIndex, count);
200
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
201
+ saveHistory({ charts: { patches: patches, inversePatches: inversePatches } });
202
+ return nextState;
203
+ });
204
+ onChangeProtectedRanges === null || onChangeProtectedRanges === void 0 ? void 0 : onChangeProtectedRanges(function (prevProtectedRanges) {
205
+ var _a = __read(produceWithPatches(prevProtectedRanges, function (draft) {
206
+ shiftProtectedRangesOnStructuralChange(draft, sheetId, "column", "delete", minColumnIndex, count);
207
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
208
+ saveHistory({ protectedRanges: { patches: patches, inversePatches: inversePatches } });
209
+ return nextState;
210
+ });
174
211
  // Sheet metadata
175
212
  onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
176
213
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
177
- var e_3, _a, e_4, _b, e_5, _c;
178
- var _d;
214
+ var e_3, _a, e_4, _b;
215
+ var _c;
179
216
  var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
180
217
  if (!sheet)
181
218
  return;
@@ -183,7 +220,7 @@ export var deleteColumn = function (_a) {
183
220
  sheet.columnMetadata.splice(minColumnIndex, count);
184
221
  }
185
222
  if (sheet.basicFilter) {
186
- var _e = sheet.basicFilter.range, startColumnIndex = _e.startColumnIndex, endColumnIndex = _e.endColumnIndex;
223
+ var _d = sheet.basicFilter.range, startColumnIndex = _d.startColumnIndex, endColumnIndex = _d.endColumnIndex;
187
224
  if (minColumnIndex < startColumnIndex) {
188
225
  moveFilterView(sheet.basicFilter, count, Direction.Left);
189
226
  }
@@ -191,8 +228,8 @@ export var deleteColumn = function (_a) {
191
228
  minColumnIndex <= endColumnIndex) {
192
229
  if (sheet.basicFilter.filterSpecs) {
193
230
  try {
194
- for (var _f = __values(sheet.basicFilter.filterSpecs), _g = _f.next(); !_g.done; _g = _f.next()) {
195
- var spec = _g.value;
231
+ for (var _e = __values(sheet.basicFilter.filterSpecs), _f = _e.next(); !_f.done; _f = _e.next()) {
232
+ var spec = _f.value;
196
233
  if (spec.columnIndex >= minColumnIndex) {
197
234
  spec.columnIndex -= count;
198
235
  }
@@ -201,15 +238,15 @@ export var deleteColumn = function (_a) {
201
238
  catch (e_3_1) { e_3 = { error: e_3_1 }; }
202
239
  finally {
203
240
  try {
204
- if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
241
+ if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
205
242
  }
206
243
  finally { if (e_3) throw e_3.error; }
207
244
  }
208
245
  }
209
246
  if (sheet.basicFilter.sortSpecs) {
210
247
  try {
211
- for (var _h = __values(sheet.basicFilter.sortSpecs), _j = _h.next(); !_j.done; _j = _h.next()) {
212
- var spec = _j.value;
248
+ for (var _g = __values(sheet.basicFilter.sortSpecs), _h = _g.next(); !_h.done; _h = _g.next()) {
249
+ var spec = _h.value;
213
250
  if (spec.dimensionIndex >= minColumnIndex) {
214
251
  spec.dimensionIndex -= count;
215
252
  }
@@ -218,7 +255,7 @@ export var deleteColumn = function (_a) {
218
255
  catch (e_4_1) { e_4 = { error: e_4_1 }; }
219
256
  finally {
220
257
  try {
221
- if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
258
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
222
259
  }
223
260
  finally { if (e_4) throw e_4.error; }
224
261
  }
@@ -227,34 +264,56 @@ export var deleteColumn = function (_a) {
227
264
  sheet.basicFilter.range.endColumnIndex -= delta;
228
265
  }
229
266
  }
230
- if (sheet.frozenColumnCount) {
231
- try {
232
- for (var sortedColumnIndexes_1 = __values(sortedColumnIndexes), sortedColumnIndexes_1_1 = sortedColumnIndexes_1.next(); !sortedColumnIndexes_1_1.done; sortedColumnIndexes_1_1 = sortedColumnIndexes_1.next()) {
233
- var columnIndex = sortedColumnIndexes_1_1.value;
234
- if (columnIndex <= sheet.frozenColumnCount) {
235
- sheet.frozenColumnCount--;
236
- }
237
- }
238
- }
239
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
240
- finally {
241
- try {
242
- if (sortedColumnIndexes_1_1 && !sortedColumnIndexes_1_1.done && (_c = sortedColumnIndexes_1.return)) _c.call(sortedColumnIndexes_1);
243
- }
244
- finally { if (e_5) throw e_5.error; }
245
- }
246
- }
247
267
  if (sheet.merges) {
248
268
  sheet.merges = shrinkMergesOnColumnDelete(sheet.merges, minColumnIndex, count);
249
269
  }
250
- sheet.columnCount = Math.max(1, ((_d = sheet.columnCount) !== null && _d !== void 0 ? _d : columnCount) - count);
270
+ // `_xlnm.Print_Area` / `_xlnm.Print_Titles` follow the defined-name rule.
271
+ if (sheet.printSettings) {
272
+ updatePrintSettingsOnStructuralChange(sheet.printSettings, "column", "delete", minColumnIndex, count);
273
+ }
274
+ sheet.columnCount = Math.max(1, ((_c = sheet.columnCount) !== null && _c !== void 0 ? _c : columnCount) - count);
275
+ // Frozen panes are positional: the split stays where it is, only
276
+ // clamped so the freeze never exceeds the shrunk sheet.
277
+ if (sheet.frozenColumnCount &&
278
+ sheet.frozenColumnCount > sheet.columnCount) {
279
+ sheet.frozenColumnCount = sheet.columnCount;
280
+ }
251
281
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
252
282
  saveHistory({ sheets: { patches: patches, inversePatches: inversePatches } });
253
283
  return nextState;
254
284
  });
285
+ // Table columns spliced out above (and tables dropped whole): their
286
+ // structured refs break to `#REF!`, computed from the PRE-edit definitions.
287
+ var removedTableParts = collectRemovedTableParts(tables, sheetId, "column", minColumnIndex, maxColumnIndex);
255
288
  // Sheet data: three-pass formula update, then per-row column splice.
256
289
  onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
257
290
  var _a = __read(produceWithPatches(prevSheetData, function (draft) {
291
+ removeSpillsOfDeletedAnchors({
292
+ draft: draft,
293
+ sheetId: sheetId,
294
+ axis: "column",
295
+ minIndex: minColumnIndex,
296
+ maxIndex: maxColumnIndex,
297
+ getArrayRange: getArrayRange,
298
+ locale: locale,
299
+ cellXfsRegistry: cellXfsRegistry,
300
+ sharedStringRegistry: sharedStringRegistry,
301
+ });
302
+ breakStructuredRefsForRemovedTableParts({
303
+ draft: draft,
304
+ sheetId: sheetId,
305
+ axis: "column",
306
+ referenceIndex: minColumnIndex,
307
+ count: count,
308
+ removed: removedTableParts,
309
+ getGraphNodes: getGraphNodes,
310
+ enqueueCalculation: enqueueCalculation,
311
+ enqueueGraphOperation: enqueueGraphOperation,
312
+ recalcCells: recalcCells,
313
+ locale: locale,
314
+ cellXfsRegistry: cellXfsRegistry,
315
+ sharedStringRegistry: sharedStringRegistry,
316
+ });
258
317
  updateFormulasForStructuralChange({
259
318
  draft: draft,
260
319
  axis: "column",
@@ -1,4 +1,4 @@
1
1
  import type { CellData, Sheet } from "@rowsncolumns/spreadsheet";
2
2
  import { type UseOnDeleteRowProps } from "../hooks/use-on-delete-row";
3
- export declare const deleteRow: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getSheetName, getActiveCell, getSelections, getDependents, getGraphNodes, getGraphNodesInSheet, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeActiveCell, onChangeSelections, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onChangePivotTables, }: UseOnDeleteRowProps<T, S>) => (sheetId: number, rowIndexes: number[]) => void;
3
+ export declare const deleteRow: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, cellXfsRegistry, sharedStringRegistry, getSheetName, getActiveCell, getSelections, getDependents, getGraphNodes, getGraphNodesInSheet, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, onChangeSheetData, onChangeSheets, onChangeTables, onChangeActiveCell, onChangeSelections, onChangeConditionalFormats, onChangeDataValidations, onChangeCitations, onChangePivotTables, tables, getArrayRange, onChangeNamedRanges, onChangeEmbeds, onChangeCharts, onChangeProtectedRanges, }: UseOnDeleteRowProps<T, S>) => (sheetId: number, rowIndexes: number[]) => void;
4
4
  //# sourceMappingURL=delete-row.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-row.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AASjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qbAyB5D,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,MAClB,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,SAqR9C,CAAC"}
1
+ {"version":3,"file":"delete-row.d.ts","sourceRoot":"","sources":["../../../interface/delete-row.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAsBjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,0hBA+B5D,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,MAClB,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,SAyY9C,CAAC"}
@@ -1,14 +1,16 @@
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
8
  import { updateRangedRulesOnStructuralChange } from "../api/range-rule-helpers";
7
- import { updateSheetRangeOnDelete } from "../api/range";
8
9
  import { moveFilterView } from "../api/selection";
9
10
  import { updateFormulasForStructuralChange } from "../api/structural-formula-update";
11
+ import { breakStructuredRefsForRemovedTableParts, collectRemovedTableParts, removeSpillsOfDeletedAnchors, } from "../api/structural-table-refs";
10
12
  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;
13
+ 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
14
  return function (sheetId, rowIndexes) {
13
15
  if (!rowIndexes.length)
14
16
  return;
@@ -30,32 +32,33 @@ export var deleteRow = function (_a) {
30
32
  var activeCell = getActiveCell();
31
33
  var selections = getSelections();
32
34
  var newRowCount = Math.max(1, rowCount - count);
33
- // NOTE: this treats `[minRowIndex..maxRowIndex]` as a contiguous block.
34
- // Non-contiguous deletes (e.g. rows [2, 5, 10]) currently misclassify
35
- // intermediate rows as deleted. Document/track separately.
36
- var inDeletedRows = activeCell.rowIndex >= minRowIndex && activeCell.rowIndex <= maxRowIndex;
37
- var nextActiveRowIndex = activeCell.rowIndex;
38
- if (inDeletedRows) {
39
- nextActiveRowIndex = Math.max(1, minRowIndex - 1);
40
- }
41
- else if (activeCell.rowIndex > maxRowIndex) {
42
- nextActiveRowIndex = Math.max(1, activeCell.rowIndex - count);
43
- }
44
- if (nextActiveRowIndex > newRowCount) {
45
- nextActiveRowIndex = newRowCount;
46
- }
35
+ // Excel keeps the selection where it was (UI-02): after deleting rows 3:4
36
+ // the selection still reads 3:4 — now over the rows that moved up — and
37
+ // the active cell sits in the first deleted row. Every coordinate simply
38
+ // loses the deleted rows that lie BEFORE it, so an area entirely inside
39
+ // the deleted band keeps its place while areas below slide up; partially
40
+ // overlapping areas shrink like any other range.
41
+ var deletedBefore = function (rowIndex) {
42
+ return sortedRowIndexes.filter(function (index) { return index < rowIndex; }).length;
43
+ };
44
+ var clampRow = function (rowIndex) {
45
+ return Math.min(Math.max(1, rowIndex), newRowCount);
46
+ };
47
+ var nextActiveRowIndex = clampRow(activeCell.rowIndex - deletedBefore(activeCell.rowIndex));
47
48
  var nextActiveCell = nextActiveRowIndex === activeCell.rowIndex
48
49
  ? activeCell
49
50
  : __assign(__assign({}, activeCell), { rowIndex: nextActiveRowIndex });
50
- var fallbackSelectionRowIndex = nextActiveCell.rowIndex;
51
51
  var nextSelections = selections.map(function (selection) {
52
52
  if (!selection.range)
53
53
  return selection;
54
- var updatedRange = updateSheetRangeOnDelete(__assign(__assign({}, selection.range), { sheetId: sheetId }), "row", minRowIndex, count, sheetId);
55
- if (updatedRange) {
56
- return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startRowIndex: updatedRange.startRowIndex, endRowIndex: updatedRange.endRowIndex }) });
57
- }
58
- return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startRowIndex: fallbackSelectionRowIndex, endRowIndex: fallbackSelectionRowIndex }) });
54
+ var _a = selection.range, startRowIndex = _a.startRowIndex, endRowIndex = _a.endRowIndex;
55
+ var deletedWithin = sortedRowIndexes.filter(function (index) { return index >= startRowIndex && index <= endRowIndex; }).length;
56
+ var size = endRowIndex - startRowIndex + 1;
57
+ var nextStart = clampRow(startRowIndex - deletedBefore(startRowIndex));
58
+ // A partially covered area shrinks by the rows it lost; an area deleted
59
+ // outright keeps its size (it now frames the rows that moved up).
60
+ var nextSize = deletedWithin < size ? size - deletedWithin : size;
61
+ return __assign(__assign({}, selection), { range: __assign(__assign({}, selection.range), { startRowIndex: nextStart, endRowIndex: clampRow(nextStart + nextSize - 1) }) });
59
62
  });
60
63
  // Tables: shrink/move based on overlap with deletion; drop tables
61
64
  // whose header row is removed.
@@ -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"}