@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,10 +1,11 @@
1
1
  import { isNil } from "@rowsncolumns/utils";
2
2
  import { useCallback } from "react";
3
+ import { getInsertLinesRefusal } from "../api/structural-guards";
3
4
  import { useShowError } from "../atoms/error-state.atom";
4
5
  import { insertRow } from "../interface/insert-row";
5
6
  import { SHEET_PROTECTION_ERROR_TITLE, useCanEditSheet, useCanPerformSheetAction, } from "./use-can-edit-cellrange";
6
7
  export var useOnInsertRow = function (_a) {
7
- var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, maxRowCount = _a.maxRowCount, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, 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, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onChangePivotTables = _a.onChangePivotTables, getSheetName = _a.getSheetName, enableInsertRowTimingLogs = _a.enableInsertRowTimingLogs, onCommand = _a.onCommand;
8
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, maxRowCount = _a.maxRowCount, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, 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, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, onChangeCitations = _a.onChangeCitations, onChangePivotTables = _a.onChangePivotTables, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeEmbeds = _a.onChangeEmbeds, onChangeCharts = _a.onChangeCharts, onChangeProtectedRanges = _a.onChangeProtectedRanges, getSheetName = _a.getSheetName, enableInsertRowTimingLogs = _a.enableInsertRowTimingLogs, sheetData = _a.sheetData, onCommand = _a.onCommand;
8
9
  var canEditSheet = useCanEditSheet();
9
10
  var canPerformSheetAction = useCanPerformSheetAction();
10
11
  var showError = useShowError();
@@ -25,12 +26,27 @@ export var useOnInsertRow = function (_a) {
25
26
  });
26
27
  return;
27
28
  }
28
- if (!isNil(maxRowCount) && rowCount >= maxRowCount) {
29
- showError({
30
- title: "New rows cannot be added",
31
- message: "You have reached the maximum number of rows.",
32
- });
33
- return;
29
+ if (!isNil(maxRowCount) && rowCount + numRows > maxRowCount) {
30
+ // INS-06: at the grid cap, Excel refuses only when a non-blank (or formatted) cell would
31
+ // be pushed off the end; blank trailing rows are simply discarded.
32
+ var refusal = sheetData
33
+ ? getInsertLinesRefusal({
34
+ axis: "row",
35
+ referenceIndex: referenceRowIndex,
36
+ count: numRows,
37
+ rows: sheetData[sheetId],
38
+ limit: maxRowCount,
39
+ })
40
+ : rowCount >= maxRowCount
41
+ ? {
42
+ title: "New rows cannot be added",
43
+ message: "You have reached the maximum number of rows.",
44
+ }
45
+ : undefined;
46
+ if (refusal) {
47
+ showError({ title: refusal.title, message: refusal.message });
48
+ return;
49
+ }
34
50
  }
35
51
  // Inserts row
36
52
  var startMs = now();
@@ -57,6 +73,10 @@ export var useOnInsertRow = function (_a) {
57
73
  onChangeDataValidations: onChangeDataValidations,
58
74
  onChangeCitations: onChangeCitations,
59
75
  onChangePivotTables: onChangePivotTables,
76
+ onChangeNamedRanges: onChangeNamedRanges,
77
+ onChangeEmbeds: onChangeEmbeds,
78
+ onChangeCharts: onChangeCharts,
79
+ onChangeProtectedRanges: onChangeProtectedRanges,
60
80
  getSheetName: getSheetName,
61
81
  })(sheetId, referenceRowIndex, numRows);
62
82
  var elapsedMs = now() - startMs;
@@ -94,6 +114,10 @@ export var useOnInsertRow = function (_a) {
94
114
  onChangeConditionalFormats,
95
115
  onChangeDataValidations,
96
116
  onChangePivotTables,
117
+ onChangeNamedRanges,
118
+ onChangeEmbeds,
119
+ onChangeCharts,
120
+ onChangeProtectedRanges,
97
121
  enqueueGraphOperation,
98
122
  enqueueCalculation,
99
123
  enqueueStructureChange,
@@ -101,6 +125,7 @@ export var useOnInsertRow = function (_a) {
101
125
  canPerformSheetAction,
102
126
  getSheetName,
103
127
  enableInsertRowTimingLogs,
128
+ sheetData,
104
129
  onCommand,
105
130
  ]);
106
131
  };
@@ -2,6 +2,7 @@ import type { CellInterface } from "@rowsncolumns/common-types";
2
2
  import { type CellData, type Sheet } from "@rowsncolumns/spreadsheet";
3
3
  import type { OnCommand } from "../commands";
4
4
  import type { useCalculation } from "./use-calculation";
5
+ import { type MoveDimensionOptions } from "./use-on-move-rows";
5
6
  import type { useSheetProperties } from "./use-sheet-properties";
6
7
  import type { UseSpreadsheetProps } from "./use-spreadsheet-state";
7
8
  import type { SpreadsheetPatch } from "./use-undo-redo";
@@ -23,6 +24,6 @@ type UseOnMoveColumnsProps<T extends CellData, S extends Sheet> = {
23
24
  getActiveCell: () => CellInterface;
24
25
  onCommand?: OnCommand;
25
26
  };
26
- export declare const useOnMoveColumns: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, createHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeConditionalFormats, onChangeDataValidations, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, getDependents, getDataRowCount, getActiveCell, onCommand, }: UseOnMoveColumnsProps<T, S>) => (sheetId: number, columns: number[], referenceColumnIndex: number) => void;
27
+ export declare const useOnMoveColumns: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, createHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeConditionalFormats, onChangeDataValidations, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, getDependents, getDataRowCount, getActiveCell, onCommand, }: UseOnMoveColumnsProps<T, S>) => (sheetId: number, columns: number[], rawReferenceColumnIndex: number, options?: MoveDimensionOptions) => void;
27
28
  export {};
28
29
  //# sourceMappingURL=use-on-move-columns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-move-columns.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAWtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,0BAA0B,CAAC,EAAE,mBAAmB,CAC9C,CAAC,EACD,CAAC,CACF,CAAC,4BAA4B,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,mBAAmB,CAC3C,CAAC,EACD,CAAC,CACF,CAAC,yBAAyB,CAAC,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3E,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,wRAiBnE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,eAGhB,MAAM,WAAW,MAAM,EAAE,wBAAwB,MAAM,SAsYpE,CAAC"}
1
+ {"version":3,"file":"use-on-move-columns.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAWtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,0BAA0B,CAAC,EAAE,mBAAmB,CAC9C,CAAC,EACD,CAAC,CACF,CAAC,4BAA4B,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,mBAAmB,CAC3C,CAAC,EACD,CAAC,CACF,CAAC,yBAAyB,CAAC,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3E,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,wRAiBnE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,eAIf,MAAM,WACN,MAAM,EAAE,2BACQ,MAAM,YACrB,oBAAoB,SAkZnC,CAAC"}
@@ -9,10 +9,11 @@ import { moveMergedCells } from "../api/merges";
9
9
  import { updateRangedRulesOnReorder } from "../api/range-rule-helpers";
10
10
  import { shiftTableMovingColumns } from "../api/table";
11
11
  import { useCanEditSheet } from "./use-can-edit-cellrange";
12
+ import { resolveMoveReferenceIndex, } from "./use-on-move-rows";
12
13
  export var useOnMoveColumns = function (_a) {
13
14
  var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, createHistory = _a.createHistory, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, getDependents = _a.getDependents, getDataRowCount = _a.getDataRowCount, getActiveCell = _a.getActiveCell, onCommand = _a.onCommand;
14
15
  var canEditSheet = useCanEditSheet();
15
- return useCallback(function (sheetId, columns, referenceColumnIndex) {
16
+ return useCallback(function (sheetId, columns, rawReferenceColumnIndex, options) {
16
17
  var _a;
17
18
  if (!canEditSheet(sheetId)) {
18
19
  console.debug("This range is protected, users cannot edit this cell range.");
@@ -21,6 +22,10 @@ export var useOnMoveColumns = function (_a) {
21
22
  if (!columns.length) {
22
23
  return;
23
24
  }
25
+ var referenceColumnIndex = resolveMoveReferenceIndex(columns, rawReferenceColumnIndex, options);
26
+ if (referenceColumnIndex === undefined) {
27
+ return;
28
+ }
24
29
  var saveHistory = createHistory();
25
30
  var _b = columns, firstColumn = _b[0], _c = columns.length - 1, lastColumn = _b[_c];
26
31
  // We need to track this for history. Precedent cells
@@ -46,11 +51,15 @@ export var useOnMoveColumns = function (_a) {
46
51
  startRowIndex: 1,
47
52
  endRowIndex: dataRowCount,
48
53
  };
49
- // When you move columns, the resident columns
50
- // gets shifted
54
+ // The columns the move displaces (Excel: refs into them shift by ±count). Moving LEFT,
55
+ // columns `referenceColumnIndex..firstColumn-1` slide right; moving RIGHT, columns
56
+ // `lastColumn+1..referenceColumnIndex+count-1` slide left (the block lands at
57
+ // `referenceColumnIndex` in the post-removal frame).
51
58
  var shiftedRange = {
52
- startColumnIndex: Math.min(referenceColumnIndex + count, firstColumn + count),
53
- endColumnIndex: Math.max(referenceColumnIndex + count - 1, firstColumn),
59
+ startColumnIndex: direction === Direction.Left ? referenceColumnIndex : lastColumn + 1,
60
+ endColumnIndex: direction === Direction.Left
61
+ ? firstColumn - 1
62
+ : referenceColumnIndex + count - 1,
54
63
  startRowIndex: 1,
55
64
  endRowIndex: dataRowCount,
56
65
  };
@@ -25,6 +25,21 @@ type UseOnMoveRowsProps<T extends CellData, S extends Sheet> = {
25
25
  getActiveCell: () => CellInterface;
26
26
  onCommand?: OnCommand;
27
27
  };
28
- export declare const useOnMoveRows: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, createHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeConditionalFormats, onChangeDataValidations, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, getDependents, getNonEmptyColumnCount, getActiveCell, onCommand, }: UseOnMoveRowsProps<T, S>) => (sheetId: number, rows: number[], referenceRowIndex: number) => void;
28
+ /**
29
+ * Landing semantics for a row/column move. By default `referenceIndex` is the block's FINAL
30
+ * position in the post-removal frame (what the header-drag hook computes). `insertBefore`
31
+ * selects Excel's "Insert Cut Cells" semantics instead: `referenceIndex` is the row/column the
32
+ * block is inserted BEFORE in the PRE-removal numbering, so a downward move lands `count` earlier
33
+ * (cut row 2 → Insert Cut Cells at row 6 lands the row at 5: r1 r3 r4 r5 r2 r6).
34
+ */
35
+ export type MoveDimensionOptions = {
36
+ insertBefore?: boolean;
37
+ };
38
+ /**
39
+ * Translate an Insert-Cut-Cells reference (pre-removal numbering) into the hook's post-removal
40
+ * landing index. Returns `undefined` when the reference falls inside the moved block (a no-op).
41
+ */
42
+ export declare const resolveMoveReferenceIndex: (dims: number[], referenceIndex: number, options?: MoveDimensionOptions) => number | undefined;
43
+ export declare const useOnMoveRows: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, createHistory, onChangeSheetData, onChangeSheets, onChangeTables, onChangeConditionalFormats, onChangeDataValidations, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, getDependents, getNonEmptyColumnCount, getActiveCell, onCommand, }: UseOnMoveRowsProps<T, S>) => (sheetId: number, rows: number[], rawReferenceRowIndex: number, options?: MoveDimensionOptions) => void;
29
44
  export {};
30
45
  //# sourceMappingURL=use-on-move-rows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-move-rows.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAUtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACtE,0BAA0B,CAAC,EAAE,mBAAmB,CAC9C,CAAC,EACD,CAAC,CACF,CAAC,4BAA4B,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,mBAAmB,CAC3C,CAAC,EACD,CAAC,CACF,CAAC,yBAAyB,CAAC,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,kBAAkB,CAC1B,CAAC,wBAAwB,CAAC,CAAC;IAC5B,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,+RAiBhE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAGb,MAAM,QAAQ,MAAM,EAAE,qBAAqB,MAAM,SA2U9D,CAAC"}
1
+ {"version":3,"file":"use-on-move-rows.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAUtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACtE,0BAA0B,CAAC,EAAE,mBAAmB,CAC9C,CAAC,EACD,CAAC,CACF,CAAC,4BAA4B,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,mBAAmB,CAC3C,CAAC,EACD,CAAC,CACF,CAAC,yBAAyB,CAAC,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,kBAAkB,CAC1B,CAAC,wBAAwB,CAAC,CAAC;IAC5B,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,EACtB,UAAU,oBAAoB,KAC7B,MAAM,GAAG,SAYX,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,+RAiBhE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,eAIZ,MAAM,QACT,MAAM,EAAE,wBACQ,MAAM,YAClB,oBAAoB,SA0VnC,CAAC"}
@@ -9,10 +9,27 @@ import { moveMergedCells } from "../api/merges";
9
9
  import { updateRangedRulesOnReorder } from "../api/range-rule-helpers";
10
10
  import { shiftTableMovingRows } from "../api/table";
11
11
  import { useCanEditSheet } from "./use-can-edit-cellrange";
12
+ /**
13
+ * Translate an Insert-Cut-Cells reference (pre-removal numbering) into the hook's post-removal
14
+ * landing index. Returns `undefined` when the reference falls inside the moved block (a no-op).
15
+ */
16
+ export var resolveMoveReferenceIndex = function (dims, referenceIndex, options) {
17
+ if (!(options === null || options === void 0 ? void 0 : options.insertBefore)) {
18
+ return referenceIndex;
19
+ }
20
+ var _a = dims, first = _a[0], _b = dims.length - 1, last = _a[_b];
21
+ if (referenceIndex > last) {
22
+ return referenceIndex - dims.length;
23
+ }
24
+ if (referenceIndex > first) {
25
+ return undefined;
26
+ }
27
+ return referenceIndex;
28
+ };
12
29
  export var useOnMoveRows = function (_a) {
13
30
  var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, createHistory = _a.createHistory, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangeDataValidations = _a.onChangeDataValidations, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, getDependents = _a.getDependents, getNonEmptyColumnCount = _a.getNonEmptyColumnCount, getActiveCell = _a.getActiveCell, onCommand = _a.onCommand;
14
31
  var canEditSheet = useCanEditSheet();
15
- return useCallback(function (sheetId, rows, referenceRowIndex) {
32
+ return useCallback(function (sheetId, rows, rawReferenceRowIndex, options) {
16
33
  if (!canEditSheet(sheetId)) {
17
34
  console.debug("This range is protected, users cannot edit this cell range.");
18
35
  return;
@@ -20,6 +37,10 @@ export var useOnMoveRows = function (_a) {
20
37
  if (!rows.length) {
21
38
  return;
22
39
  }
40
+ var referenceRowIndex = resolveMoveReferenceIndex(rows, rawReferenceRowIndex, options);
41
+ if (referenceRowIndex === undefined) {
42
+ return;
43
+ }
23
44
  var saveHistory = createHistory();
24
45
  var _a = rows, firstRow = _a[0], _b = rows.length - 1, lastRow = _a[_b];
25
46
  // We need to track this for history. Precedent cells
@@ -129,13 +150,17 @@ export var useOnMoveRows = function (_a) {
129
150
  }
130
151
  finally { if (e_1) throw e_1.error; }
131
152
  }
132
- // When you move columns, the resident columns
133
- // gets shifted
153
+ // The rows the move displaces (Excel: refs into them shift by ±count). Moving UP,
154
+ // rows `referenceRowIndex..firstRow-1` slide down; moving DOWN, rows
155
+ // `lastRow+1..referenceRowIndex+count-1` slide up (the block lands at
156
+ // `referenceRowIndex` in the post-removal frame).
134
157
  var shiftedRange = {
135
158
  startColumnIndex: 1,
136
159
  endColumnIndex: columnCount,
137
- startRowIndex: Math.min(referenceRowIndex + count, firstRow),
138
- endRowIndex: Math.max(referenceRowIndex - count, firstRow),
160
+ startRowIndex: direction === Direction.Left ? referenceRowIndex : lastRow + 1,
161
+ endRowIndex: direction === Direction.Left
162
+ ? firstRow - 1
163
+ : referenceRowIndex + count - 1,
139
164
  };
140
165
  try {
141
166
  // Update formulas
@@ -1,4 +1,4 @@
1
- import type { CellInterface, SelectionArea } from "@rowsncolumns/common-types";
1
+ import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/common-types";
2
2
  import type { CellData, SelectionAttributes, Sheet, TableView } from "@rowsncolumns/spreadsheet";
3
3
  import type { OnCommand } from "../commands";
4
4
  import type { CalculationOperation, useCalculation } from "./use-calculation";
@@ -29,7 +29,12 @@ export type UseOnMoveSelectionProps<T extends CellData, S extends Sheet> = {
29
29
  onChangePivotTables?: UseSpreadsheetProps<T, S>["onChangePivotTables"];
30
30
  getDependents: ReturnType<typeof useCalculation>["getDependents"];
31
31
  getActiveCell: () => CellInterface;
32
+ /**
33
+ * Merged ranges of a sheet — a drag-move whose destination (or source) covers a merge only
34
+ * partially is refused, like Excel ("We can't do that to a merged cell.").
35
+ */
36
+ getSheetMerges?: (sheetId: number) => GridRange[] | undefined | null;
32
37
  onCommand?: OnCommand;
33
38
  };
34
- export declare const useOnMoveSelection: <T extends CellData, S extends Sheet>({ rowCount, columnCount, tables, locale, cellXfsRegistry, sharedStringRegistry, getDependents, getActiveCell, onChangeTables, onChangeSheets, onChangeNamedRanges, onChangeDataValidations, onChangeConditionalFormats, onChangePivotTables, onChangeSheetData, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, isArrayFormula, getDataValidationById, onCommand, }: UseOnMoveSelectionProps<T, S>) => (sheetId: number, from: SelectionArea<SelectionAttributes>, to: SelectionArea<SelectionAttributes>) => void;
39
+ export declare const useOnMoveSelection: <T extends CellData, S extends Sheet>({ rowCount, columnCount, tables, locale, cellXfsRegistry, sharedStringRegistry, getDependents, getActiveCell, onChangeTables, onChangeSheets, onChangeNamedRanges, onChangeDataValidations, onChangeConditionalFormats, onChangePivotTables, onChangeSheetData, createHistory, enqueueGraphOperation, enqueueCalculation, enqueueStructureChange, isArrayFormula, getDataValidationById, getSheetMerges, onCommand, }: UseOnMoveSelectionProps<T, S>) => (sheetId: number, from: SelectionArea<SelectionAttributes>, to: SelectionArea<SelectionAttributes>) => void;
35
40
  //# sourceMappingURL=use-on-move-selection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-move-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAcnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,qBAAqB,CAAC,EAAE,UAAU,CAChC,OAAO,kBAAkB,CAC1B,CAAC,uBAAuB,CAAC,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,cAAc,CAAC,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IACpE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACtE,uBAAuB,CAAC,EAAE,mBAAmB,CAC3C,CAAC,EACD,CAAC,CACF,CAAC,yBAAyB,CAAC,CAAC;IAC7B,0BAA0B,CAAC,EAAE,mBAAmB,CAC9C,CAAC,EACD,CAAC,CACF,CAAC,4BAA4B,CAAC,CAAC;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACvE,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,uYAuBrE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,eAkBjB,MAAM,QACT,aAAa,CAAC,mBAAmB,CAAC,MACpC,aAAa,CAAC,mBAAmB,CAAC,SA6f3C,CAAC"}
1
+ {"version":3,"file":"use-on-move-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-move-selection.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,17 @@ import { useCallback } from "react";
7
7
  import { processSideEffectDependentCells } from "../api/dependency";
8
8
  import { createSheetCellIdentifier } from "../api/formula";
9
9
  import { createSheetDraft } from "../api/immer-utils";
10
+ import { findPartiallyCoveredMerge, MERGED_CELL_MOVE_ERROR } from "../api/merges";
10
11
  import { shiftPivotsOnMove } from "../api/pivot-range";
12
+ import { useShowError } from "../atoms/error-state.atom";
11
13
  import { SheetCell } from "../sheet-cell";
12
14
  import { moveRange } from "./../api/selection";
13
15
  import { useCanEditCellRange } from "./use-can-edit-cellrange";
14
16
  import { useOnMoveTableColumns } from "./use-on-move-table-columns";
15
17
  export var useOnMoveSelection = function (_a) {
16
- var rowCount = _a.rowCount, columnCount = _a.columnCount, tables = _a.tables, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getDependents = _a.getDependents, getActiveCell = _a.getActiveCell, onChangeTables = _a.onChangeTables, onChangeSheets = _a.onChangeSheets, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeDataValidations = _a.onChangeDataValidations, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangePivotTables = _a.onChangePivotTables, onChangeSheetData = _a.onChangeSheetData, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, isArrayFormula = _a.isArrayFormula, getDataValidationById = _a.getDataValidationById, onCommand = _a.onCommand;
18
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, tables = _a.tables, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getDependents = _a.getDependents, getActiveCell = _a.getActiveCell, onChangeTables = _a.onChangeTables, onChangeSheets = _a.onChangeSheets, onChangeNamedRanges = _a.onChangeNamedRanges, onChangeDataValidations = _a.onChangeDataValidations, onChangeConditionalFormats = _a.onChangeConditionalFormats, onChangePivotTables = _a.onChangePivotTables, onChangeSheetData = _a.onChangeSheetData, createHistory = _a.createHistory, enqueueGraphOperation = _a.enqueueGraphOperation, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, isArrayFormula = _a.isArrayFormula, getDataValidationById = _a.getDataValidationById, getSheetMerges = _a.getSheetMerges, onCommand = _a.onCommand;
17
19
  var canEditCellRange = useCanEditCellRange();
20
+ var showError = useShowError();
18
21
  var onMoveTableColumns = useOnMoveTableColumns({
19
22
  rowCount: rowCount,
20
23
  columnCount: columnCount,
@@ -34,6 +37,14 @@ export var useOnMoveSelection = function (_a) {
34
37
  console.debug("This range is protected, users cannot edit this cell range.");
35
38
  return;
36
39
  }
40
+ // Excel refuses a move whose destination or source covers a merged cell only partially
41
+ // (the write would tear the merge); merges wholly inside the block travel with it.
42
+ var merges = getSheetMerges === null || getSheetMerges === void 0 ? void 0 : getSheetMerges(sheetId);
43
+ if (findPartiallyCoveredMerge(to.range, merges) ||
44
+ findPartiallyCoveredMerge(from.range, merges)) {
45
+ showError({ message: MERGED_CELL_MOVE_ERROR });
46
+ return;
47
+ }
37
48
  // Check if we are moving columns
38
49
  // within table
39
50
  var _a = __read(getSelectedTableColumnFromSelection(from, tables), 2), sourceTable = _a[0], sourceColumns = _a[1];
@@ -472,6 +483,8 @@ export var useOnMoveSelection = function (_a) {
472
483
  canEditCellRange,
473
484
  isArrayFormula,
474
485
  getDataValidationById,
486
+ getSheetMerges,
487
+ showError,
475
488
  onCommand,
476
489
  ]);
477
490
  };
@@ -1,5 +1,5 @@
1
1
  import type { Citation } from "@rowsncolumns/common-types";
2
- import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
2
+ import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/grid";
3
3
  import type { CellData, DataValidationRuleRecord, SelectionAttributes, Sheet, TableView } from "@rowsncolumns/spreadsheet";
4
4
  import type { OnCommand } from "../commands";
5
5
  import type { GeneratedNames } from "../generated-names";
@@ -37,6 +37,16 @@ type UseOnPasteProps<T extends CellData, S extends Sheet> = {
37
37
  onChangeEmbeds: UseSpreadsheetProps<T, S>["onChangeEmbeds"];
38
38
  onRequestFonts: UseSpreadsheetProps<T, S>["onRequestFonts"];
39
39
  onChangeDataValidations: UseSpreadsheetProps<T, S>["onChangeDataValidations"];
40
+ /**
41
+ * Defined names wholly inside a CUT block follow it to the paste destination (Excel: `Data`
42
+ * over A1:A3 becomes C1:C3 after cut A1:A3 → paste C1; a partially covered name stays).
43
+ */
44
+ onChangeNamedRanges?: UseSpreadsheetProps<T, S>["onChangeNamedRanges"];
45
+ /**
46
+ * Merged ranges of a sheet — a cut + paste whose destination (or source) covers a merge only
47
+ * partially is refused, like Excel ("We can't do that to a merged cell.").
48
+ */
49
+ getSheetMerges?: (sheetId: number) => GridRange[] | undefined | null;
40
50
  onChangeSelections: ReturnType<typeof useSheetState>["onChangeSelections"];
41
51
  onChangeActiveCell(sheetId: number, cell: CellInterface): void;
42
52
  getDependents: ReturnType<typeof useCalculation>["getDependents"];
@@ -74,6 +84,6 @@ type UseOnPasteProps<T extends CellData, S extends Sheet> = {
74
84
  onCommand?: OnCommand;
75
85
  generatedNames?: GeneratedNames;
76
86
  };
77
- export declare const useOnPaste: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, sheetData, tables: currentTables, maxRowCount, maxColumnCount, isHiddenByFilterRow, onRequestFonts, idCreationStrategy, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeSheets, onChangeTables, onChangeEmbeds, onChangeSelections, onChangeActiveCell, getDependents, getActiveCell, getUserEnteredValue, onChangeDataValidations, preserveFormatting, cellXfsRegistry, sharedStringRegistry, getDataValidationById, getSheetName, onError, citations, onChangeCitations, sanitizeHtml, onCommand, generatedNames, }: UseOnPasteProps<T, S>) => (e: ClipboardEvent | undefined, sourceSheetId: number | undefined, destinationSheetId: number, copiedSelections: SelectionArea<SelectionAttributes>[] | undefined, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[] | undefined, finalSelections: SelectionArea<SelectionAttributes>[] | undefined, isCutOperation: boolean) => Promise<void>;
87
+ export declare const useOnPaste: <T extends CellData, S extends Sheet>({ rowCount, columnCount, locale, sheetData, tables: currentTables, maxRowCount, maxColumnCount, isHiddenByFilterRow, onRequestFonts, idCreationStrategy, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeSheets, onChangeTables, onChangeEmbeds, onChangeSelections, onChangeActiveCell, getDependents, getActiveCell, getUserEnteredValue, onChangeDataValidations, onChangeNamedRanges, getSheetMerges, preserveFormatting, cellXfsRegistry, sharedStringRegistry, getDataValidationById, getSheetName, onError, citations, onChangeCitations, sanitizeHtml, onCommand, generatedNames, }: UseOnPasteProps<T, S>) => (e: ClipboardEvent | undefined, sourceSheetId: number | undefined, destinationSheetId: number, copiedSelections: SelectionArea<SelectionAttributes>[] | undefined, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[] | undefined, finalSelections: SelectionArea<SelectionAttributes>[] | undefined, isCutOperation: boolean) => Promise<void>;
78
88
  export {};
79
89
  //# sourceMappingURL=use-on-paste.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-paste.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-paste.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-on-paste.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-paste.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { __assign, __awaiter, __generator, __read, __rest, __spreadArray, __values } from "tslib";
2
2
  import { isStaticNode } from "@rowsncolumns/dag";
3
- import { areaIntersects, isAreasEqual } from "@rowsncolumns/grid";
3
+ import { areaInsideArea, areaIntersects, isAreasEqual } from "@rowsncolumns/grid";
4
4
  import { selectionFromActiveCell } from "@rowsncolumns/grid";
5
5
  import { DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT, findActiveTableWithinCell, loadWebFont, MAX_COLUMN_COUNT, MAX_ROW_COUNT, useFocusEmbedOrChart, useGetFinalRowHeight, useRedrawGrid, } from "@rowsncolumns/spreadsheet";
6
6
  import { isSelectionACell, useGetEffectiveValuesFromRange, } from "@rowsncolumns/spreadsheet";
@@ -10,6 +10,9 @@ import { useCallback } from "react";
10
10
  import { processSideEffectDependentCells } from "../api/dependency";
11
11
  import { createSheetCellIdentifier } from "../api/formula";
12
12
  import { createSheetDraft } from "../api/immer-utils";
13
+ import { findPartiallyCoveredMerge, MERGED_CELL_MOVE_ERROR } from "../api/merges";
14
+ import { moveRange } from "../api/selection";
15
+ import { useShowError } from "../atoms/error-state.atom";
13
16
  import { applyPasteOperation, isBlankClipboardCell, resolvePasteSpecialOptions, } from "../api/paste-special";
14
17
  import { findAdjacentTable, findTableColumnIndex } from "../api/table";
15
18
  import { addCalculatedColumnsForRowExpansion } from "../interface/change-table-column";
@@ -35,8 +38,9 @@ export var buildDestinationRowAssignments = function (sheetId, startRowIndex, en
35
38
  return assignments;
36
39
  };
37
40
  export var useOnPaste = function (_a) {
38
- var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, sheetData = _a.sheetData, currentTables = _a.tables, _b = _a.maxRowCount, maxRowCount = _b === void 0 ? MAX_ROW_COUNT : _b, _c = _a.maxColumnCount, maxColumnCount = _c === void 0 ? MAX_COLUMN_COUNT : _c, isHiddenByFilterRow = _a.isHiddenByFilterRow, onRequestFonts = _a.onRequestFonts, idCreationStrategy = _a.idCreationStrategy, createHistory = _a.createHistory, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, enqueueGraphOperation = _a.enqueueGraphOperation, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeEmbeds = _a.onChangeEmbeds, onChangeSelections = _a.onChangeSelections, onChangeActiveCell = _a.onChangeActiveCell, getDependents = _a.getDependents, getActiveCell = _a.getActiveCell, getUserEnteredValue = _a.getUserEnteredValue, onChangeDataValidations = _a.onChangeDataValidations, _d = _a.preserveFormatting, preserveFormatting = _d === void 0 ? true : _d, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getDataValidationById = _a.getDataValidationById, getSheetName = _a.getSheetName, onError = _a.onError, citations = _a.citations, onChangeCitations = _a.onChangeCitations, sanitizeHtml = _a.sanitizeHtml, onCommand = _a.onCommand, generatedNames = _a.generatedNames;
41
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, sheetData = _a.sheetData, currentTables = _a.tables, _b = _a.maxRowCount, maxRowCount = _b === void 0 ? MAX_ROW_COUNT : _b, _c = _a.maxColumnCount, maxColumnCount = _c === void 0 ? MAX_COLUMN_COUNT : _c, isHiddenByFilterRow = _a.isHiddenByFilterRow, onRequestFonts = _a.onRequestFonts, idCreationStrategy = _a.idCreationStrategy, createHistory = _a.createHistory, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, enqueueGraphOperation = _a.enqueueGraphOperation, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeTables = _a.onChangeTables, onChangeEmbeds = _a.onChangeEmbeds, onChangeSelections = _a.onChangeSelections, onChangeActiveCell = _a.onChangeActiveCell, getDependents = _a.getDependents, getActiveCell = _a.getActiveCell, getUserEnteredValue = _a.getUserEnteredValue, onChangeDataValidations = _a.onChangeDataValidations, onChangeNamedRanges = _a.onChangeNamedRanges, getSheetMerges = _a.getSheetMerges, _d = _a.preserveFormatting, preserveFormatting = _d === void 0 ? true : _d, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry, getDataValidationById = _a.getDataValidationById, getSheetName = _a.getSheetName, onError = _a.onError, citations = _a.citations, onChangeCitations = _a.onChangeCitations, sanitizeHtml = _a.sanitizeHtml, onCommand = _a.onCommand, generatedNames = _a.generatedNames;
39
42
  var canEditCellRange = useCanEditCellRange();
43
+ var showError = useShowError();
40
44
  // Allowed values
41
45
  var getEffectiveValuesFromRange = useGetEffectiveValuesFromRange();
42
46
  var focusEmbedOrChart = useFocusEmbedOrChart();
@@ -167,6 +171,16 @@ export var useOnPaste = function (_a) {
167
171
  console.debug("Protected range, You cannot paste on to protected cells.");
168
172
  return [2 /*return*/];
169
173
  }
174
+ // A cut is a move: Excel refuses it when the destination (or the source) covers a merged
175
+ // cell only partially — writing into a non-anchor cell of a merge would tear it.
176
+ if (isCutOperation &&
177
+ from &&
178
+ !isNil(sourceSheetId) &&
179
+ (findPartiallyCoveredMerge(to.range, getSheetMerges === null || getSheetMerges === void 0 ? void 0 : getSheetMerges(destinationSheetId)) ||
180
+ findPartiallyCoveredMerge(from.range, getSheetMerges === null || getSheetMerges === void 0 ? void 0 : getSheetMerges(sourceSheetId)))) {
181
+ showError({ message: MERGED_CELL_MOVE_ERROR });
182
+ return [2 /*return*/];
183
+ }
170
184
  // Check if pasting a table would overlap with an existing table
171
185
  if (tables === null || tables === void 0 ? void 0 : tables.length) {
172
186
  existingTable = currentTables === null || currentTables === void 0 ? void 0 : currentTables.find(function (table) {
@@ -802,6 +816,37 @@ export var useOnPaste = function (_a) {
802
816
  }
803
817
  }
804
818
  }
819
+ // Defined names wholly inside the cut block follow it (Excel move semantics); a name the
820
+ // block covers only partially keeps referring to its original area.
821
+ if (isCutOperation && from && !isNil(sourceSheetId)) {
822
+ onChangeNamedRanges === null || onChangeNamedRanges === void 0 ? void 0 : onChangeNamedRanges(function (prevNamedRanges) {
823
+ var _a = __read(produceWithPatches(prevNamedRanges, function (draft) {
824
+ var e_10, _a;
825
+ var _b;
826
+ try {
827
+ for (var draft_1 = __values(draft), draft_1_1 = draft_1.next(); !draft_1_1.done; draft_1_1 = draft_1.next()) {
828
+ var namedRange = draft_1_1.value;
829
+ if (((_b = namedRange.range) === null || _b === void 0 ? void 0 : _b.sheetId) === sourceSheetId &&
830
+ areaInsideArea(namedRange.range, from.range)) {
831
+ namedRange.range = __assign(__assign({}, moveRange(namedRange.range, from.range, to.range)), { sheetId: destinationSheetId });
832
+ }
833
+ }
834
+ }
835
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
836
+ finally {
837
+ try {
838
+ if (draft_1_1 && !draft_1_1.done && (_a = draft_1.return)) _a.call(draft_1);
839
+ }
840
+ finally { if (e_10) throw e_10.error; }
841
+ }
842
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
843
+ if (!patches.length) {
844
+ return prevNamedRanges;
845
+ }
846
+ saveHistory({ namedRanges: { patches: patches, inversePatches: inversePatches } });
847
+ return nextState;
848
+ });
849
+ }
805
850
  // Embeds
806
851
  if (embeds === null || embeds === void 0 ? void 0 : embeds.length) {
807
852
  firstEmbedId_1 = embeds[0].embedId;
@@ -855,7 +900,7 @@ export var useOnPaste = function (_a) {
855
900
  // For cut operation: Move citations to new position
856
901
  onChangeCitations(function (prevCitations) {
857
902
  var _a = __read(produceWithPatches(prevCitations, function (draft) {
858
- var e_10, _a;
903
+ var e_11, _a;
859
904
  var _loop_3 = function (citationId) {
860
905
  var citation = draft.find(function (c) { return c.id === citationId; });
861
906
  if (citation) {
@@ -873,12 +918,12 @@ export var useOnPaste = function (_a) {
873
918
  _loop_3(citationId);
874
919
  }
875
920
  }
876
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
921
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
877
922
  finally {
878
923
  try {
879
924
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
880
925
  }
881
- finally { if (e_10) throw e_10.error; }
926
+ finally { if (e_11) throw e_11.error; }
882
927
  }
883
928
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
884
929
  saveHistory({
@@ -933,7 +978,7 @@ export var useOnPaste = function (_a) {
933
978
  // Update cell citationIds to point to new citations
934
979
  onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
935
980
  var _a = __read(produceWithPatches(prevSheetData, function (draft) {
936
- var e_11, _a;
981
+ var e_12, _a;
937
982
  var _b, _c, _d;
938
983
  try {
939
984
  for (var destinationRows_4 = __values(destinationRows), destinationRows_4_1 = destinationRows_4.next(); !destinationRows_4_1.done; destinationRows_4_1 = destinationRows_4.next()) {
@@ -949,12 +994,12 @@ export var useOnPaste = function (_a) {
949
994
  }
950
995
  }
951
996
  }
952
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
997
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
953
998
  finally {
954
999
  try {
955
1000
  if (destinationRows_4_1 && !destinationRows_4_1.done && (_a = destinationRows_4.return)) _a.call(destinationRows_4);
956
1001
  }
957
- finally { if (e_11) throw e_11.error; }
1002
+ finally { if (e_12) throw e_12.error; }
958
1003
  }
959
1004
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
960
1005
  saveHistory({
@@ -1011,5 +1056,8 @@ export var useOnPaste = function (_a) {
1011
1056
  getFinalRowHeight,
1012
1057
  onCommand,
1013
1058
  generatedNames,
1059
+ onChangeNamedRanges,
1060
+ getSheetMerges,
1061
+ showError,
1014
1062
  ]);
1015
1063
  };
@@ -1,6 +1,7 @@
1
1
  import type { CalculatorConfig } from "@rowsncolumns/calculator";
2
- import type { CellInterface, GridRange, IterativeCalculationOptions, SelectionArea, Citation, CellFormat, NamedCellStyle } from "@rowsncolumns/common-types";
3
- import type { BandedDefinition, BandedRange, CanvasGridProps, CellData, ColorMode, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, PivotTable, ProtectedRange, SelectionAttributes, Sheet, SpreadsheetTheme, TableView, Slicer } from "@rowsncolumns/spreadsheet";
2
+ import type { CellFormat, CellInterface, Citation, GridRange, IterativeCalculationOptions, NamedCellStyle, SelectionArea } from "@rowsncolumns/common-types";
3
+ import type { BandedDefinition, BandedRange, CanvasGridProps, CellData, ColorMode, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, PivotTable, ProtectedRange, SelectionAttributes, Sheet, Slicer, SpreadsheetTheme, TableView } from "@rowsncolumns/spreadsheet";
4
+ import { type FormulaLocaleInput } from "@rowsncolumns/utils";
4
5
  import type { Patch } from "immer";
5
6
  import { getAutoFillValues as defaultGetAutoFillValues } from "../api/fill";
6
7
  import type { OnCommand } from "../commands";
@@ -252,6 +253,14 @@ export type UseSpreadsheetProps<T extends CellData = CellData, S extends Sheet =
252
253
  * Auto detected from Intl.DateTimeFormat().resolvedOptions().locale
253
254
  */
254
255
  locale?: string;
256
+ /**
257
+ * Formula SYNTAX locale (rowsncolumns/spreadsheet#655): the language whose function names,
258
+ * decimal / argument separators and error values the cell editor and formula bar use. Storage
259
+ * and evaluation stay canonical (English names, `.` and `,`), so this only shapes what the user
260
+ * types and sees. Resolved and returned as `formulaLocale` — pass it to `CanvasGrid`. Defaults to
261
+ * `locale`; `"en"` keeps English syntax; a `FormulaLocaleDefinition` adds or overrides names.
262
+ */
263
+ formulaLocale?: FormulaLocaleInput;
255
264
  /**
256
265
  * Formatters used to customize/localize auto-generated names, e.g. new
257
266
  * sheet titles ("Sheet1"), duplicated sheet titles ("Copy of Sheet1"),
@@ -379,7 +388,7 @@ export declare const deriveBuiltInTableBanding: (table: TableView) => BandedDefi
379
388
  * @param param0
380
389
  * @returns
381
390
  */
382
- export declare const useSpreadsheetState: <T extends CellData = CellData, S extends Sheet = Sheet>({ sheets, onChangeSheets, theme, functions, onDemandFormulaPattern, enableLazyCalculation, conditionalFormats, dataValidations, tables, namedRanges, enableExcelImportHistory, enableExcelfileDragDrop, onChangeTables, onChangeNamedRanges, onChangeCharts, onChangeEmbeds, onChangeProtectedRanges, onChangeConditionalFormats, onChangeDataValidations, onChangeBandedRanges, onChangePivotTables, sheetData, onChangeSheetData, onChangeDependencyGraph, onChangeHistory, onCommand: onCommandProp, onChangeTheme, namedCellStyles, onChangeNamedCellStyles, onError, getAutoFillValues: rawGetAutoFillValues, customAutofillLists, getEffectiveStructuredValue, darkThemeClassName, colorMode, fonts, enableDragnDrop, enabledUndoRedo, locale, generatedNames: generatedNamesProp, enableAtFormula, preserveFormattingOnPaste, recalculateOnOpen, protectFormulas, maxRowCount, maxColumnCount, maxSheetCount, idCreationStrategy, fileSizeLimit, cellXfs, cellStyles, onChangeCellXfs, sharedStrings, onChangeSharedStrings, onRequestFonts, onChangeSlicers, citations, onChangeCitations, createCalculationWorker, calculationMode, iterativeCalculation, onIterativeCalculationEnabled, onStreamStart, onStreamProgress, onStreamEnd, onConfirm, onPrompt, sanitizeHtml, }: UseSpreadsheetProps<T, S>) => {
391
+ export declare const useSpreadsheetState: <T extends CellData = CellData, S extends Sheet = Sheet>({ sheets, onChangeSheets, theme, functions, onDemandFormulaPattern, enableLazyCalculation, conditionalFormats, dataValidations, tables, namedRanges, enableExcelImportHistory, enableExcelfileDragDrop, onChangeTables, onChangeNamedRanges, onChangeCharts, onChangeEmbeds, onChangeProtectedRanges, onChangeConditionalFormats, onChangeDataValidations, onChangeBandedRanges, onChangePivotTables, sheetData, onChangeSheetData, onChangeDependencyGraph, onChangeHistory, onCommand: onCommandProp, onChangeTheme, namedCellStyles, onChangeNamedCellStyles, onError, getAutoFillValues: rawGetAutoFillValues, customAutofillLists, getEffectiveStructuredValue, darkThemeClassName, colorMode, fonts, enableDragnDrop, enabledUndoRedo, locale, formulaLocale: formulaLocaleProp, generatedNames: generatedNamesProp, enableAtFormula, preserveFormattingOnPaste, recalculateOnOpen, protectFormulas, maxRowCount, maxColumnCount, maxSheetCount, idCreationStrategy, fileSizeLimit, cellXfs, cellStyles, onChangeCellXfs, sharedStrings, onChangeSharedStrings, onRequestFonts, onChangeSlicers, citations, onChangeCitations, createCalculationWorker, calculationMode, iterativeCalculation, onIterativeCalculationEnabled, onStreamStart, onStreamProgress, onStreamEnd, onConfirm, onPrompt, sanitizeHtml, }: UseSpreadsheetProps<T, S>) => {
383
392
  namedCellStyles: NamedCellStyle[] | undefined;
384
393
  activeCellBySheetId: Record<number, import("@rowsncolumns/grid").CellInterface>;
385
394
  selectionsBySheetId: Record<number, import("@rowsncolumns/grid").SelectionArea<SelectionAttributes>[]>;
@@ -524,9 +533,10 @@ export declare const useSpreadsheetState: <T extends CellData = CellData, S exte
524
533
  onInsertCellsShiftDown: (sheetId: number, activeCell: import("@rowsncolumns/grid").CellInterface, selections: import("@rowsncolumns/grid").SelectionArea<SelectionAttributes>[]) => void;
525
534
  onInsertRow: (sheetId: number, referenceRowIndex: number, numRows?: number) => void;
526
535
  onInsertColumn: (sheetId: number, referenceColumnIndex: number, numColumns?: number) => void;
527
- onMoveColumns: (sheetId: number, columns: number[], referenceColumnIndex: number) => void;
528
- onMoveRows: (sheetId: number, rows: number[], referenceRowIndex: number) => void;
536
+ onMoveColumns: (sheetId: number, columns: number[], rawReferenceColumnIndex: number, options?: import("./use-on-move-rows").MoveDimensionOptions) => void;
537
+ onMoveRows: (sheetId: number, rows: number[], rawReferenceRowIndex: number, options?: import("./use-on-move-rows").MoveDimensionOptions) => void;
529
538
  onMoveSelection: (sheetId: number, from: SelectionArea<SelectionAttributes>, to: SelectionArea<SelectionAttributes>) => void;
539
+ onInsertCutCells: (sheetId: number, from: SelectionArea<SelectionAttributes>, to: SelectionArea<SelectionAttributes>) => void;
530
540
  onSortColumn: (sheetId: number, sortedColumnIndex: number, sortOrder: import("@rowsncolumns/common-types").SortOrder, options?: import("./use-on-sort-column").SortColumnOptions, additionalLevels?: import("./use-on-sort-column").SortColumnLevel[]) => void;
531
541
  onSortTable: import("./use-on-sort-table").OnSortTable;
532
542
  onFilterTable: (sheetId: number, filter: TableView | import("@rowsncolumns/spreadsheet").FilterView, columnIndex: number, conditionType: import("@rowsncolumns/common-types").ConditionType | undefined, conditionValue: import("@rowsncolumns/common-types").ConditionValue[] | undefined, visibleValues: string[] | undefined | null, extras?: import("./use-on-filter-table").FilterTableExtras) => Promise<void>;
@@ -632,6 +642,7 @@ export declare const useSpreadsheetState: <T extends CellData = CellData, S exte
632
642
  onTracePrecedents: (sheetId: number, cell: CellInterface) => void;
633
643
  onClearHistory: () => void;
634
644
  onChangeLocale: (newLocale: string, oldLocale?: string) => void;
645
+ formulaLocale: import("@rowsncolumns/utils").FormulaLocale;
635
646
  onInsertComment: (sheetId: number, rowIndex: number, columnIndex: number, commentThreadId: string | number | undefined) => void;
636
647
  onRemoveComment: (sheetId: number, rowIndex: number, columnIndex: number) => void;
637
648
  onCreateCitation: (sheetId: number, rowIndex: number, columnIndex: number, citation: Citation) => void;