@rowsncolumns/spreadsheet-state 29.1.4 → 29.1.7

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 (225) hide show
  1. package/dist/cjs/api/circular-reference.d.ts +31 -0
  2. package/dist/cjs/api/circular-reference.d.ts.map +1 -0
  3. package/dist/cjs/api/circular-reference.js +85 -0
  4. package/dist/cjs/api/copy-paste.d.ts +6 -0
  5. package/dist/cjs/api/copy-paste.d.ts.map +1 -1
  6. package/dist/cjs/api/copy-paste.js +24 -15
  7. package/dist/cjs/api/datatype.d.ts +2 -0
  8. package/dist/cjs/api/datatype.d.ts.map +1 -1
  9. package/dist/cjs/api/datatype.js +61 -35
  10. package/dist/cjs/api/date.d.ts.map +1 -1
  11. package/dist/cjs/api/date.js +23 -14
  12. package/dist/cjs/api/decimals.d.ts +10 -0
  13. package/dist/cjs/api/decimals.d.ts.map +1 -1
  14. package/dist/cjs/api/decimals.js +34 -11
  15. package/dist/cjs/api/dependency.d.ts +19 -1
  16. package/dist/cjs/api/dependency.d.ts.map +1 -1
  17. package/dist/cjs/api/dependency.js +30 -14
  18. package/dist/cjs/api/filter-condition.d.ts +58 -0
  19. package/dist/cjs/api/filter-condition.d.ts.map +1 -0
  20. package/dist/cjs/api/filter-condition.js +157 -0
  21. package/dist/cjs/api/formula.d.ts.map +1 -1
  22. package/dist/cjs/api/formula.js +9 -7
  23. package/dist/cjs/api/image-embed.d.ts +41 -0
  24. package/dist/cjs/api/image-embed.d.ts.map +1 -0
  25. package/dist/cjs/api/image-embed.js +55 -0
  26. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  27. package/dist/cjs/api/immer-utils.js +43 -15
  28. package/dist/cjs/api/named-range-structural.d.ts +29 -3
  29. package/dist/cjs/api/named-range-structural.d.ts.map +1 -1
  30. package/dist/cjs/api/named-range-structural.js +36 -11
  31. package/dist/cjs/api/parse-html.d.ts.map +1 -1
  32. package/dist/cjs/api/parse-html.js +11 -5
  33. package/dist/cjs/api/structural-formula-update.d.ts +20 -1
  34. package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
  35. package/dist/cjs/api/structural-formula-update.js +264 -90
  36. package/dist/cjs/api/structural-guards.d.ts +11 -0
  37. package/dist/cjs/api/structural-guards.d.ts.map +1 -1
  38. package/dist/cjs/api/structural-guards.js +45 -1
  39. package/dist/cjs/api/structural-table-refs.d.ts +15 -2
  40. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
  41. package/dist/cjs/api/structural-table-refs.js +79 -35
  42. package/dist/cjs/commands.d.ts +17 -3
  43. package/dist/cjs/commands.d.ts.map +1 -1
  44. package/dist/cjs/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
  45. package/dist/cjs/components/editors/conditional-format-rule-editor.js +19 -7
  46. package/dist/cjs/constants.d.ts +4 -1
  47. package/dist/cjs/constants.d.ts.map +1 -1
  48. package/dist/cjs/constants.js +4 -0
  49. package/dist/cjs/helpers/sheet-title.d.ts +2 -1
  50. package/dist/cjs/helpers/sheet-title.d.ts.map +1 -1
  51. package/dist/cjs/helpers/sheet-title.js +3 -1
  52. package/dist/cjs/hooks/use-can-edit-cellrange.d.ts +1 -1
  53. package/dist/cjs/hooks/use-can-edit-cellrange.d.ts.map +1 -1
  54. package/dist/cjs/hooks/use-can-edit-cellrange.js +1 -1
  55. package/dist/cjs/hooks/use-on-calculation-success.d.ts +5 -1
  56. package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
  57. package/dist/cjs/hooks/use-on-calculation-success.js +20 -3
  58. package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
  59. package/dist/cjs/hooks/use-on-copy.js +23 -25
  60. package/dist/cjs/hooks/use-on-create-sheet.d.ts.map +1 -1
  61. package/dist/cjs/hooks/use-on-create-sheet.js +11 -1
  62. package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
  63. package/dist/cjs/hooks/use-on-delete.js +15 -3
  64. package/dist/cjs/hooks/use-on-drag-n-drop.d.ts +5 -0
  65. package/dist/cjs/hooks/use-on-drag-n-drop.d.ts.map +1 -1
  66. package/dist/cjs/hooks/use-on-drag-n-drop.js +6 -5
  67. package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
  68. package/dist/cjs/hooks/use-on-filter-table.js +6 -1
  69. package/dist/cjs/hooks/use-on-find-replace.d.ts.map +1 -1
  70. package/dist/cjs/hooks/use-on-find-replace.js +111 -23
  71. package/dist/cjs/hooks/use-on-insert-image.d.ts.map +1 -1
  72. package/dist/cjs/hooks/use-on-insert-image.js +20 -33
  73. package/dist/cjs/hooks/use-on-paste.d.ts +2 -1
  74. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  75. package/dist/cjs/hooks/use-on-paste.js +53 -24
  76. package/dist/cjs/hooks/use-on-rename-sheet.d.ts +3 -1
  77. package/dist/cjs/hooks/use-on-rename-sheet.d.ts.map +1 -1
  78. package/dist/cjs/hooks/use-on-rename-sheet.js +19 -9
  79. package/dist/cjs/hooks/use-on-sort-column.d.ts +7 -1
  80. package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
  81. package/dist/cjs/hooks/use-on-sort-column.js +25 -8
  82. package/dist/cjs/hooks/use-on-sort-range.d.ts +16 -2
  83. package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
  84. package/dist/cjs/hooks/use-on-sort-range.js +72 -40
  85. package/dist/cjs/hooks/use-on-sort-table.d.ts +7 -2
  86. package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
  87. package/dist/cjs/hooks/use-on-sort-table.js +25 -4
  88. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +5 -3
  89. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  90. package/dist/cjs/hooks/use-spreadsheet-state.js +7 -0
  91. package/dist/cjs/hooks/utils/sort-rows.d.ts +15 -0
  92. package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
  93. package/dist/cjs/hooks/utils/sort-rows.js +16 -0
  94. package/dist/cjs/index.d.ts +3 -0
  95. package/dist/cjs/index.d.ts.map +1 -1
  96. package/dist/cjs/index.js +3 -0
  97. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  98. package/dist/cjs/interface/delete-column.js +254 -101
  99. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  100. package/dist/cjs/interface/delete-row.js +233 -81
  101. package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
  102. package/dist/cjs/interface/duplicate-sheet.js +4 -9
  103. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  104. package/dist/cjs/interface/insert-column.js +1 -1
  105. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  106. package/dist/cjs/interface/insert-row.js +1 -1
  107. package/dist/cjs/interface/new-sheet.d.ts.map +1 -1
  108. package/dist/cjs/interface/new-sheet.js +6 -13
  109. package/dist/cjs/sheet-cell.d.ts +9 -0
  110. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  111. package/dist/cjs/sheet-cell.js +46 -9
  112. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  113. package/dist/esm/api/circular-reference.d.ts +31 -0
  114. package/dist/esm/api/circular-reference.d.ts.map +1 -0
  115. package/dist/esm/api/circular-reference.js +55 -0
  116. package/dist/esm/api/copy-paste.d.ts +6 -0
  117. package/dist/esm/api/copy-paste.d.ts.map +1 -1
  118. package/dist/esm/api/copy-paste.js +26 -14
  119. package/dist/esm/api/datatype.d.ts +2 -0
  120. package/dist/esm/api/datatype.d.ts.map +1 -1
  121. package/dist/esm/api/datatype.js +61 -35
  122. package/dist/esm/api/date.d.ts.map +1 -1
  123. package/dist/esm/api/date.js +23 -14
  124. package/dist/esm/api/decimals.d.ts +10 -0
  125. package/dist/esm/api/decimals.d.ts.map +1 -1
  126. package/dist/esm/api/decimals.js +31 -10
  127. package/dist/esm/api/dependency.d.ts +19 -1
  128. package/dist/esm/api/dependency.d.ts.map +1 -1
  129. package/dist/esm/api/dependency.js +15 -10
  130. package/dist/esm/api/filter-condition.d.ts +58 -0
  131. package/dist/esm/api/filter-condition.d.ts.map +1 -0
  132. package/dist/esm/api/filter-condition.js +146 -0
  133. package/dist/esm/api/formula.d.ts.map +1 -1
  134. package/dist/esm/api/formula.js +9 -7
  135. package/dist/esm/api/image-embed.d.ts +41 -0
  136. package/dist/esm/api/image-embed.d.ts.map +1 -0
  137. package/dist/esm/api/image-embed.js +52 -0
  138. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  139. package/dist/esm/api/immer-utils.js +43 -14
  140. package/dist/esm/api/named-range-structural.d.ts +29 -3
  141. package/dist/esm/api/named-range-structural.d.ts.map +1 -1
  142. package/dist/esm/api/named-range-structural.js +35 -11
  143. package/dist/esm/api/parse-html.d.ts.map +1 -1
  144. package/dist/esm/api/parse-html.js +14 -5
  145. package/dist/esm/api/structural-formula-update.d.ts +20 -1
  146. package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
  147. package/dist/esm/api/structural-formula-update.js +151 -55
  148. package/dist/esm/api/structural-guards.d.ts +11 -0
  149. package/dist/esm/api/structural-guards.d.ts.map +1 -1
  150. package/dist/esm/api/structural-guards.js +31 -0
  151. package/dist/esm/api/structural-table-refs.d.ts +15 -2
  152. package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
  153. package/dist/esm/api/structural-table-refs.js +49 -18
  154. package/dist/esm/commands.d.ts +17 -3
  155. package/dist/esm/commands.d.ts.map +1 -1
  156. package/dist/esm/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
  157. package/dist/esm/components/editors/conditional-format-rule-editor.js +18 -7
  158. package/dist/esm/constants.d.ts +4 -1
  159. package/dist/esm/constants.d.ts.map +1 -1
  160. package/dist/esm/constants.js +4 -0
  161. package/dist/esm/helpers/sheet-title.d.ts +2 -1
  162. package/dist/esm/helpers/sheet-title.d.ts.map +1 -1
  163. package/dist/esm/helpers/sheet-title.js +3 -1
  164. package/dist/esm/hooks/use-can-edit-cellrange.d.ts +1 -1
  165. package/dist/esm/hooks/use-can-edit-cellrange.d.ts.map +1 -1
  166. package/dist/esm/hooks/use-can-edit-cellrange.js +1 -1
  167. package/dist/esm/hooks/use-on-calculation-success.d.ts +5 -1
  168. package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
  169. package/dist/esm/hooks/use-on-calculation-success.js +19 -3
  170. package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
  171. package/dist/esm/hooks/use-on-copy.js +17 -17
  172. package/dist/esm/hooks/use-on-create-sheet.d.ts.map +1 -1
  173. package/dist/esm/hooks/use-on-create-sheet.js +11 -1
  174. package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
  175. package/dist/esm/hooks/use-on-delete.js +15 -3
  176. package/dist/esm/hooks/use-on-drag-n-drop.d.ts +5 -0
  177. package/dist/esm/hooks/use-on-drag-n-drop.d.ts.map +1 -1
  178. package/dist/esm/hooks/use-on-drag-n-drop.js +7 -4
  179. package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
  180. package/dist/esm/hooks/use-on-filter-table.js +13 -2
  181. package/dist/esm/hooks/use-on-find-replace.d.ts.map +1 -1
  182. package/dist/esm/hooks/use-on-find-replace.js +111 -23
  183. package/dist/esm/hooks/use-on-insert-image.d.ts.map +1 -1
  184. package/dist/esm/hooks/use-on-insert-image.js +15 -25
  185. package/dist/esm/hooks/use-on-paste.d.ts +2 -1
  186. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  187. package/dist/esm/hooks/use-on-paste.js +46 -15
  188. package/dist/esm/hooks/use-on-rename-sheet.d.ts +3 -1
  189. package/dist/esm/hooks/use-on-rename-sheet.d.ts.map +1 -1
  190. package/dist/esm/hooks/use-on-rename-sheet.js +19 -9
  191. package/dist/esm/hooks/use-on-sort-column.d.ts +7 -1
  192. package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
  193. package/dist/esm/hooks/use-on-sort-column.js +18 -1
  194. package/dist/esm/hooks/use-on-sort-range.d.ts +16 -2
  195. package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
  196. package/dist/esm/hooks/use-on-sort-range.js +30 -3
  197. package/dist/esm/hooks/use-on-sort-table.d.ts +7 -2
  198. package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
  199. package/dist/esm/hooks/use-on-sort-table.js +25 -4
  200. package/dist/esm/hooks/use-spreadsheet-state.d.ts +5 -3
  201. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  202. package/dist/esm/hooks/use-spreadsheet-state.js +7 -0
  203. package/dist/esm/hooks/utils/sort-rows.d.ts +15 -0
  204. package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
  205. package/dist/esm/hooks/utils/sort-rows.js +15 -0
  206. package/dist/esm/index.d.ts +3 -0
  207. package/dist/esm/index.d.ts.map +1 -1
  208. package/dist/esm/index.js +3 -0
  209. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  210. package/dist/esm/interface/delete-column.js +111 -80
  211. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  212. package/dist/esm/interface/delete-row.js +91 -59
  213. package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
  214. package/dist/esm/interface/duplicate-sheet.js +4 -9
  215. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  216. package/dist/esm/interface/insert-column.js +1 -1
  217. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  218. package/dist/esm/interface/insert-row.js +1 -1
  219. package/dist/esm/interface/new-sheet.d.ts.map +1 -1
  220. package/dist/esm/interface/new-sheet.js +6 -13
  221. package/dist/esm/sheet-cell.d.ts +9 -0
  222. package/dist/esm/sheet-cell.d.ts.map +1 -1
  223. package/dist/esm/sheet-cell.js +46 -7
  224. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  225. package/package.json +9 -9
@@ -95,7 +95,8 @@ type UseOnPasteProps<T extends CellData, S extends Sheet> = {
95
95
  */
96
96
  onChangeCitations?: UseSpreadsheetProps<T, S>["onChangeCitations"];
97
97
  /**
98
- * Optional HTML sanitizer for clipboard paste operations
98
+ * Optional additional HTML sanitizer for clipboard paste operations. The
99
+ * built-in sanitizer always runs afterwards; this can only tighten it.
99
100
  */
100
101
  sanitizeHtml?: (html: string) => string;
101
102
  /**
@@ -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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"}
@@ -2,7 +2,7 @@ import { __assign, __awaiter, __generator, __read, __rest, __spreadArray, __valu
2
2
  import { isStaticNode } from "@rowsncolumns/dag";
3
3
  import { areaInsideArea, areaIntersects, isAreasEqual } from "@rowsncolumns/grid";
4
4
  import { selectionFromActiveCell } from "@rowsncolumns/grid";
5
- import { DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT, findActiveTableWithinCell, loadWebFont, MAX_COLUMN_COUNT, MAX_ROW_COUNT, useFocusEmbedOrChart, useGetFinalRowHeight, useRedrawGrid, } from "@rowsncolumns/spreadsheet";
5
+ import { DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT, findActiveTableWithinCell, loadWebFont, MAX_COLUMN_COUNT, MAX_ROW_COUNT, useFocusEmbedOrChart, useGetFinalRowHeight, useGetSheetDimensions, useRedrawGrid, } from "@rowsncolumns/spreadsheet";
6
6
  import { isSelectionACell, useGetEffectiveValuesFromRange, } from "@rowsncolumns/spreadsheet";
7
7
  import { error, getCellFormattedValue, getCellUserEnteredFormat, getCellUserEnteredValue, getExtendedValueBool, getExtendedValueFormula, getExtendedValueNumber, getExtendedValueString, isNil, iterateCellsInRange, uuidString, } from "@rowsncolumns/utils";
8
8
  import { produceWithPatches } from "immer";
@@ -75,9 +75,10 @@ export var useOnPaste = function (_a) {
75
75
  });
76
76
  var redrawGrid = useRedrawGrid();
77
77
  var getFinalRowHeight = useGetFinalRowHeight();
78
+ var getSheetDimensions = useGetSheetDimensions();
78
79
  var _h = useCalculationQueue({ enqueueCalculation: enqueueCalculation }), enqueue = _h.enqueue, processQueue = _h.processQueue;
79
80
  return useCallback(function (e, sourceSheetId, destinationSheetId, copiedSelections, activeCell, selections, finalSelections, isCutOperation) { return __awaiter(void 0, void 0, void 0, function () {
80
- var pasteSpecial, pasteMode, pasteOperation, pasteEvent, forcePlainText, activeSheetName, from, merges, embeds, tables, columnWidths, rowHeights, selectedRowValues, rowIndex, start, end, pasteResults, fontFamilies, fontFamiliesWithWeights, err_1;
81
+ var pasteSpecial, pasteMode, pasteOperation, pasteEvent, forcePlainText, activeSheetName, from, merges, embeds, tables, columnWidths, rowHeights, selectedRowValues, rowIndex, start, end, pasteResults, insertEmbeds, anchorRange, fontFamilies, fontFamiliesWithWeights, err_1;
81
82
  var _a, _b, _c, _d, _e;
82
83
  return __generator(this, function (_f) {
83
84
  switch (_f.label) {
@@ -99,7 +100,7 @@ export var useOnPaste = function (_a) {
99
100
  selectedRowValues.push((_d = (_c = (_b = (_a = sheetData === null || sheetData === void 0 ? void 0 : sheetData[sourceSheetId]) === null || _a === void 0 ? void 0 : _a[rowIndex]) === null || _b === void 0 ? void 0 : _b.values) === null || _c === void 0 ? void 0 : _c.slice(start, end)) !== null && _d !== void 0 ? _d : []);
100
101
  }
101
102
  return [3 /*break*/, 3];
102
- case 1: return [4 /*yield*/, generateDataFromClipboard(e, activeCell, destinationSheetId, activeSheetName, preserveFormatting, locale, idCreationStrategy, forcePlainText, sanitizeHtml)];
103
+ case 1: return [4 /*yield*/, generateDataFromClipboard(e, activeCell, destinationSheetId, activeSheetName, preserveFormatting, locale, idCreationStrategy, forcePlainText, sanitizeHtml, { imageViewport: getSheetDimensions === null || getSheetDimensions === void 0 ? void 0 : getSheetDimensions() })];
103
104
  case 2:
104
105
  pasteResults = _f.sent();
105
106
  selectedRowValues = (_e = pasteResults === null || pasteResults === void 0 ? void 0 : pasteResults.results) !== null && _e !== void 0 ? _e : [];
@@ -114,6 +115,32 @@ export var useOnPaste = function (_a) {
114
115
  if (isNil(selectedRowValues)) {
115
116
  return [2 /*return*/];
116
117
  }
118
+ insertEmbeds = function (saveHistory, pastedEmbeds) {
119
+ var firstEmbedId = pastedEmbeds[0].embedId;
120
+ onChangeEmbeds === null || onChangeEmbeds === void 0 ? void 0 : onChangeEmbeds(function (prevEmbeds) {
121
+ var _a = __read(produceWithPatches(prevEmbeds, function (draft) {
122
+ draft.push.apply(draft, __spreadArray([], __read(pastedEmbeds), false));
123
+ }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
124
+ saveHistory({
125
+ embeds: { patches: patches, inversePatches: inversePatches },
126
+ selectedEmbedOrChart: { redo: firstEmbedId, undo: undefined },
127
+ });
128
+ return nextState;
129
+ });
130
+ // Selected first embed
131
+ focusEmbedOrChart(firstEmbedId);
132
+ };
133
+ // An image paste writes NO cells: the picture floats over the grid anchored at the active
134
+ // cell (Excel / Google Sheets Ctrl+V of a picture), so it skips the cell-paste pipeline.
135
+ if (!selectedRowValues.length && (embeds === null || embeds === void 0 ? void 0 : embeds.length)) {
136
+ anchorRange = selectionFromActiveCell(activeCell)[0].range;
137
+ if (!canEditCellRange(destinationSheetId, anchorRange)) {
138
+ console.debug("Protected range, You cannot paste on to protected cells.");
139
+ return [2 /*return*/];
140
+ }
141
+ insertEmbeds(createHistory(), embeds);
142
+ return [2 /*return*/];
143
+ }
117
144
  if (pasteSpecial.transpose && selectedRowValues.length) {
118
145
  selectedRowValues = transpose(selectedRowValues);
119
146
  }
@@ -694,7 +721,7 @@ export var useOnPaste = function (_a) {
694
721
  onChangeSheets === null || onChangeSheets === void 0 ? void 0 : onChangeSheets(function (prevSheets) {
695
722
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
696
723
  var e_8, _a, e_9, _b, e_10, _c;
697
- var _d, _e, _f, _g, _h;
724
+ var _d, _e, _f, _g, _h, _j, _k, _l;
698
725
  var sheet = draft.find(function (sheet) { return sheet.sheetId === destinationSheetId; });
699
726
  if (sheet) {
700
727
  sheet.rowCount = Math.min(maxRowCount, Math.max((_d = sheet.rowCount) !== null && _d !== void 0 ? _d : DEFAULT_ROW_COUNT, to.range.endRowIndex));
@@ -733,8 +760,8 @@ export var useOnPaste = function (_a) {
733
760
  // Extract merged cells from source range
734
761
  var cutMerges = [];
735
762
  try {
736
- for (var _j = __values(sourceSheet.merges), _k = _j.next(); !_k.done; _k = _j.next()) {
737
- var merge = _k.value;
763
+ for (var _m = __values(sourceSheet.merges), _o = _m.next(); !_o.done; _o = _m.next()) {
764
+ var merge = _o.value;
738
765
  // Check if merge intersects with the cut range
739
766
  if (areaIntersects(merge, from.range)) {
740
767
  // Calculate new merge coordinates relative to destination
@@ -750,7 +777,7 @@ export var useOnPaste = function (_a) {
750
777
  catch (e_8_1) { e_8 = { error: e_8_1 }; }
751
778
  finally {
752
779
  try {
753
- if (_k && !_k.done && (_a = _j.return)) _a.call(_j);
780
+ if (_o && !_o.done && (_a = _m.return)) _a.call(_m);
754
781
  }
755
782
  finally { if (e_8) throw e_8.error; }
756
783
  }
@@ -764,9 +791,16 @@ export var useOnPaste = function (_a) {
764
791
  }
765
792
  }
766
793
  }
794
+ // The landed block replaces the merge geometry it covers (Excel: pasting a
795
+ // block over a merged cell unmerges it so every pasted value is visible; a
796
+ // cut block's merges travel with it, and a partial cover was refused above).
797
+ // A single copied cell pasted onto a merged cell keeps the merge and fills it.
798
+ if (((_f = sheet.merges) === null || _f === void 0 ? void 0 : _f.length) && rowSpan * colSpan > 1) {
799
+ sheet.merges = sheet.merges.filter(function (merge) { return !areaIntersects(merge, to.range); });
800
+ }
767
801
  // Update merges
768
802
  if (mergesToAdd) {
769
- sheet.merges = (_f = sheet.merges) !== null && _f !== void 0 ? _f : [];
803
+ sheet.merges = (_g = sheet.merges) !== null && _g !== void 0 ? _g : [];
770
804
  var _loop_4 = function (merge) {
771
805
  var exists = sheet.merges.find(function (range) {
772
806
  return isAreasEqual(range, merge);
@@ -826,10 +860,16 @@ export var useOnPaste = function (_a) {
826
860
  colSpan > 0) {
827
861
  try {
828
862
  for (var destinationRows_3 = __values(destinationRows), destinationRows_3_1 = destinationRows_3.next(); !destinationRows_3_1.done; destinationRows_3_1 = destinationRows_3.next()) {
829
- var _l = destinationRows_3_1.value, rowIndex = _l.rowIndex, dataRowIndex = _l.dataRowIndex;
863
+ var _p = destinationRows_3_1.value, rowIndex = _p.rowIndex, dataRowIndex = _p.dataRowIndex;
830
864
  // Clipboard-provided row heights win.
831
865
  if (clipboardSizedRows.has(rowIndex))
832
866
  continue;
867
+ // Excel keeps a custom (user-dragged) height: only auto-height
868
+ // rows refit to pasted wrapped / multi-line text. The grid's
869
+ // measurer also skips pinned rows — the guard here keeps the
870
+ // rule at the write site so no measurer can clobber the pin.
871
+ if ((_j = (_h = sheet.rowMetadata) === null || _h === void 0 ? void 0 : _h[rowIndex]) === null || _j === void 0 ? void 0 : _j.resizedByUser)
872
+ continue;
833
873
  var rowData = selectedRowValues[dataRowIndex];
834
874
  if (!rowData)
835
875
  continue;
@@ -868,7 +908,7 @@ export var useOnPaste = function (_a) {
868
908
  continue;
869
909
  }
870
910
  var ue = getCellUserEnteredValue(bestCell);
871
- var overrideText = (_g = getExtendedValueString(ue)) !== null && _g !== void 0 ? _g : "";
911
+ var overrideText = (_k = getExtendedValueString(ue)) !== null && _k !== void 0 ? _k : "";
872
912
  var uf = getCellUserEnteredFormat(bestCell);
873
913
  var height = getFinalRowHeight(destinationSheetId, rowIndex, bestColumnIndex, {
874
914
  textOverride: String(overrideText),
@@ -905,7 +945,7 @@ export var useOnPaste = function (_a) {
905
945
  continue;
906
946
  }
907
947
  var columnIndex = to.range.startColumnIndex + index;
908
- if (!((_h = sheet.columnMetadata) === null || _h === void 0 ? void 0 : _h[columnIndex])) {
948
+ if (!((_l = sheet.columnMetadata) === null || _l === void 0 ? void 0 : _l[columnIndex])) {
909
949
  sheet.columnMetadata[columnIndex] = {};
910
950
  }
911
951
  sheet.columnMetadata[columnIndex].size =
@@ -1071,19 +1111,7 @@ export var useOnPaste = function (_a) {
1071
1111
  }
1072
1112
  // Embeds
1073
1113
  if (embeds === null || embeds === void 0 ? void 0 : embeds.length) {
1074
- var firstEmbedId_1 = embeds[0].embedId;
1075
- onChangeEmbeds === null || onChangeEmbeds === void 0 ? void 0 : onChangeEmbeds(function (prevEmbeds) {
1076
- var _a = __read(produceWithPatches(prevEmbeds, function (draft) {
1077
- draft.push.apply(draft, __spreadArray([], __read(embeds), false));
1078
- }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
1079
- saveHistory({
1080
- embeds: { patches: patches, inversePatches: inversePatches },
1081
- selectedEmbedOrChart: { redo: firstEmbedId_1, undo: undefined },
1082
- });
1083
- return nextState;
1084
- });
1085
- // Selected first embed
1086
- focusEmbedOrChart(embeds[0].embedId);
1114
+ insertEmbeds(saveHistory, embeds);
1087
1115
  }
1088
1116
  // Tables
1089
1117
  if (tables === null || tables === void 0 ? void 0 : tables.length) {
@@ -1290,6 +1318,7 @@ export var useOnPaste = function (_a) {
1290
1318
  getUserEnteredValue,
1291
1319
  focusEmbedOrChart,
1292
1320
  redrawGrid,
1321
+ getSheetDimensions,
1293
1322
  processQueue,
1294
1323
  enqueue,
1295
1324
  isHiddenByFilterRow,
@@ -7,6 +7,8 @@ import type { UseSpreadsheetProps } from "./use-spreadsheet-state";
7
7
  import type { SpreadsheetPatch } from "./use-undo-redo";
8
8
  type UseOnRenameSheetProps<T extends CellData, S extends Sheet> = {
9
9
  locale?: string;
10
+ /** The workbook's sheets — a rename to a title another sheet holds (case-insensitively) is refused. */
11
+ sheets: S[];
10
12
  onChangeSheetData: UseSpreadsheetProps<T, S>["onChangeSheetData"];
11
13
  onChangeSheets: UseSpreadsheetProps<T, S>["onChangeSheets"];
12
14
  onChangeActiveCell(sheetId: number, cell: CellInterface): void;
@@ -16,6 +18,6 @@ type UseOnRenameSheetProps<T extends CellData, S extends Sheet> = {
16
18
  createHistory(): (patches: SpreadsheetPatch) => void;
17
19
  onCommand?: OnCommand;
18
20
  };
19
- export declare const useOnRenameSheet: <T extends CellData, S extends Sheet>({ locale, onChangeSheetData, onChangeSheets, onChangeActiveCell, getActiveCell, getGraphNodes, getPrecedents, createHistory, onCommand, }: UseOnRenameSheetProps<T, S>) => (sheetId: number, name: string, oldName: string) => void;
21
+ export declare const useOnRenameSheet: <T extends CellData, S extends Sheet>({ locale, sheets, onChangeSheetData, onChangeSheets, onChangeActiveCell, getActiveCell, getGraphNodes, getPrecedents, createHistory, onCommand, }: UseOnRenameSheetProps<T, S>) => (sheetId: number, name: string, oldName: string) => void;
20
22
  export {};
21
23
  //# sourceMappingURL=use-on-rename-sheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-rename-sheet.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-rename-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/D,aAAa,IAAI,aAAa,CAAC;IAC/B,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACpE,aAAa,CACX,MAAM,EAAE,cAAc,GACrB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC7C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,2IAUnE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,eAIhB,MAAM,QAAQ,MAAM,WAAW,MAAM,SAyFlD,CAAC"}
1
+ {"version":3,"file":"use-on-rename-sheet.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-rename-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAOtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,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,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/D,aAAa,IAAI,aAAa,CAAC;IAC/B,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;IACpE,aAAa,CACX,MAAM,EAAE,cAAc,GACrB,CAAC,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC7C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,mJAWnE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,eAKhB,MAAM,QAAQ,MAAM,WAAW,MAAM,SAiGlD,CAAC"}
@@ -1,20 +1,28 @@
1
1
  import { __assign, __read } from "tslib";
2
+ import { validateSheetName } from "@rowsncolumns/utils";
2
3
  import { produceWithPatches } from "immer";
3
4
  import { useCallback } from "react";
4
5
  import { updateFormulaSheetReferences } from "../api/rename-sheet";
5
- import { isValidSheetTitle, truncateSheetTitle } from "../helpers/sheet-title";
6
+ import { useShowError } from "../atoms/error-state.atom";
6
7
  import { useCanEditSheet, useCanEditWorkbook } from "./use-can-edit-cellrange";
7
8
  export var useOnRenameSheet = function (_a) {
8
- var locale = _a.locale, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeActiveCell = _a.onChangeActiveCell, getActiveCell = _a.getActiveCell, getGraphNodes = _a.getGraphNodes, getPrecedents = _a.getPrecedents, createHistory = _a.createHistory, onCommand = _a.onCommand;
9
+ var locale = _a.locale, sheets = _a.sheets, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, onChangeActiveCell = _a.onChangeActiveCell, getActiveCell = _a.getActiveCell, getGraphNodes = _a.getGraphNodes, getPrecedents = _a.getPrecedents, createHistory = _a.createHistory, onCommand = _a.onCommand;
9
10
  var canEditSheet = useCanEditSheet();
10
11
  var canEditWorkbook = useCanEditWorkbook();
12
+ var showError = useShowError();
11
13
  return useCallback(function (sheetId, name, oldName) {
12
- // Worksheet names cannot be empty or whitespace-only
13
- if (!isValidSheetTitle(name)) {
14
- console.debug("Sheet name cannot be empty.");
14
+ // Excel's worksheet-name rules (rowsncolumns/spreadsheet#939 U-01): at most 31 characters,
15
+ // none of `\ / ? * [ ] :`, no leading / trailing apostrophe, not `History`, and unique
16
+ // case-insensitively (the calc engine's sheet registry folds case too: `SHEET1` beside
17
+ // `Sheet1` would alias one engine sheet). Every refusal shows Excel's dialog text; a blank
18
+ // name is a silent no-op (the tab editor's "nothing typed").
19
+ var validation = validateSheetName(name, sheets, sheetId);
20
+ if (!validation.ok) {
21
+ if (validation.reason !== "blank") {
22
+ showError({ title: "Error", message: validation.message });
23
+ }
15
24
  return;
16
25
  }
17
- var truncatedName = truncateSheetTitle(name);
18
26
  if (!canEditWorkbook()) {
19
27
  console.debug("Workbook is structurally protected, cannot rename a sheet.");
20
28
  return;
@@ -29,7 +37,7 @@ export var useOnRenameSheet = function (_a) {
29
37
  var _a = __read(produceWithPatches(prevSheets, function (draft) {
30
38
  var sheet = draft.find(function (sheet) { return sheet.sheetId === sheetId; });
31
39
  if (sheet) {
32
- sheet.title = truncatedName;
40
+ sheet.title = name;
33
41
  }
34
42
  }), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
35
43
  // Save sheets history
@@ -44,7 +52,7 @@ export var useOnRenameSheet = function (_a) {
44
52
  updateFormulaSheetReferences(draft, {
45
53
  sheetId: sheetId,
46
54
  oldName: oldName,
47
- newName: truncatedName,
55
+ newName: name,
48
56
  locale: locale,
49
57
  getGraphNodes: getGraphNodes,
50
58
  getPrecedents: getPrecedents,
@@ -61,11 +69,12 @@ export var useOnRenameSheet = function (_a) {
61
69
  onCommand === null || onCommand === void 0 ? void 0 : onCommand({
62
70
  command: "rename-sheet",
63
71
  sheetId: sheetId,
64
- name: truncatedName,
72
+ name: name,
65
73
  oldName: oldName,
66
74
  });
67
75
  }, [
68
76
  locale,
77
+ sheets,
69
78
  onChangeActiveCell,
70
79
  onChangeSheetData,
71
80
  onChangeSheets,
@@ -75,6 +84,7 @@ export var useOnRenameSheet = function (_a) {
75
84
  createHistory,
76
85
  canEditSheet,
77
86
  canEditWorkbook,
87
+ showError,
78
88
  onCommand,
79
89
  ]);
80
90
  };
@@ -1,3 +1,4 @@
1
+ import type { GridRange } from "@rowsncolumns/common-types";
1
2
  import { type CellData, type Sheet, type SortOrder, type SpreadsheetTheme } from "@rowsncolumns/spreadsheet";
2
3
  import type { OnCommand } from "../commands";
3
4
  import type { useCalculation } from "./use-calculation";
@@ -41,6 +42,11 @@ export type UseOnSortColumnProps<T extends CellData, S extends Sheet = Sheet> =
41
42
  getCellData(sheetId: number, rowIndex: number, columnIndex: number): T | null | undefined;
42
43
  /** Length of the sheet's committed data array — the last row a sort touches. */
43
44
  getDataRowCount(sheetId: number): number | undefined;
45
+ /**
46
+ * The sheet's merged regions. Excel refuses a sort over merged cells that
47
+ * are not laid out identically on every row of the sorted block.
48
+ */
49
+ getMerges?(sheetId: number): GridRange[] | null | undefined;
44
50
  /**
45
51
  * Any hidden row (by the user, a filter, or a collapsed group). Used as
46
52
  * the pin predicate only when `isManuallyHiddenRow` is not supplied.
@@ -74,5 +80,5 @@ export type UseOnSortColumnProps<T extends CellData, S extends Sheet = Sheet> =
74
80
  * @param param0
75
81
  * @returns
76
82
  */
77
- export declare const useOnSortColumn: <T extends CellData, S extends Sheet = Sheet>({ rowCount, columnCount, locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeSheets, getCellData, getDataRowCount, isHiddenRow, isManuallyHiddenRow, getDependents, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }: UseOnSortColumnProps<T, S>) => (sheetId: number, sortedColumnIndex: number, sortOrder: SortOrder, options?: SortColumnOptions, additionalLevels?: SortColumnLevel[]) => void;
83
+ export declare const useOnSortColumn: <T extends CellData, S extends Sheet = Sheet>({ rowCount, columnCount, locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeSheets, getCellData, getDataRowCount, getMerges, isHiddenRow, isManuallyHiddenRow, getDependents, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }: UseOnSortColumnProps<T, S>) => (sheetId: number, sortedColumnIndex: number, sortOrder: SortOrder, options?: SortColumnOptions, additionalLevels?: SortColumnLevel[]) => void;
78
84
  //# sourceMappingURL=use-on-sort-column.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-sort-column.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-column.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-on-sort-column.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-column.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { produceWithPatches } from "immer";
5
5
  import { useCallback } from "react";
6
6
  import { createSheetCellIdentifier } from "../api/formula";
7
7
  import { getCellSortValue } from "../api/sort";
8
+ import { getSortMergeRefusal } from "../api/structural-guards";
8
9
  import { createSheetDraft } from "../api/immer-utils";
9
10
  import { SheetCell } from "../sheet-cell";
10
11
  import { useShowError } from "../atoms/error-state.atom";
@@ -36,7 +37,7 @@ var buildSortValue = function (options, fallbackValue, getEffectiveFormat, theme
36
37
  * @returns
37
38
  */
38
39
  export var useOnSortColumn = function (_a) {
39
- var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, sharedStringRegistry = _a.sharedStringRegistry, createHistory = _a.createHistory, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, enqueueGraphOperation = _a.enqueueGraphOperation, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, getCellData = _a.getCellData, getDataRowCount = _a.getDataRowCount, isHiddenRow = _a.isHiddenRow, isManuallyHiddenRow = _a.isManuallyHiddenRow, getDependents = _a.getDependents, getFrozenRowCount = _a.getFrozenRowCount, getSheetName = _a.getSheetName, getEffectiveFormat = _a.getEffectiveFormat, theme = _a.theme, enableSortTimingLogs = _a.enableSortTimingLogs, onCommand = _a.onCommand;
40
+ var rowCount = _a.rowCount, columnCount = _a.columnCount, locale = _a.locale, sharedStringRegistry = _a.sharedStringRegistry, createHistory = _a.createHistory, enqueueCalculation = _a.enqueueCalculation, enqueueStructureChange = _a.enqueueStructureChange, enqueueGraphOperation = _a.enqueueGraphOperation, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, getCellData = _a.getCellData, getDataRowCount = _a.getDataRowCount, getMerges = _a.getMerges, isHiddenRow = _a.isHiddenRow, isManuallyHiddenRow = _a.isManuallyHiddenRow, getDependents = _a.getDependents, getFrozenRowCount = _a.getFrozenRowCount, getSheetName = _a.getSheetName, getEffectiveFormat = _a.getEffectiveFormat, theme = _a.theme, enableSortTimingLogs = _a.enableSortTimingLogs, onCommand = _a.onCommand;
40
41
  var canEditSheet = useCanEditSheet();
41
42
  var canPerformSheetAction = useCanPerformSheetAction();
42
43
  var showError = useShowError();
@@ -47,7 +48,7 @@ export var useOnSortColumn = function (_a) {
47
48
  * column. Omitting this keeps the single-column behavior identical.
48
49
  */
49
50
  additionalLevels) {
50
- var _a, _b;
51
+ var _a, _b, _c;
51
52
  if (!canEditSheet(sheetId)) {
52
53
  console.debug("This range is protected, users cannot edit this cell range.");
53
54
  return;
@@ -64,6 +65,21 @@ export var useOnSortColumn = function (_a) {
64
65
  ? performance.now.bind(performance)
65
66
  : Date.now;
66
67
  var activeSheetName = getSheetName(sheetId);
68
+ // Excel refuses to sort a block whose merged cells differ in layout between rows — the
69
+ // anchor values would move while the merge outlines stayed behind.
70
+ var mergeRefusal = getSortMergeRefusal({
71
+ range: {
72
+ startRowIndex: 1,
73
+ endRowIndex: (_a = getDataRowCount(sheetId)) !== null && _a !== void 0 ? _a : 0,
74
+ startColumnIndex: 1,
75
+ endColumnIndex: columnCount,
76
+ },
77
+ merges: getMerges === null || getMerges === void 0 ? void 0 : getMerges(sheetId),
78
+ });
79
+ if (mergeRefusal) {
80
+ showError(mergeRefusal);
81
+ return;
82
+ }
67
83
  // We need to track this for history. Precedent cells
68
84
  var recalcCells = new Map();
69
85
  // History
@@ -88,10 +104,10 @@ export var useOnSortColumn = function (_a) {
88
104
  // Gather the sort keys from the committed cell data. Pinned rows
89
105
  // contribute no entry and are never rewritten.
90
106
  var buildStart = now();
91
- var dataRowCount = (_a = getDataRowCount(sheetId)) !== null && _a !== void 0 ? _a : 0;
107
+ var dataRowCount = (_b = getDataRowCount(sheetId)) !== null && _b !== void 0 ? _b : 0;
92
108
  var rowEntries = [];
93
109
  var _loop_1 = function (rowIndex) {
94
- var e_1, _c;
110
+ var e_1, _d;
95
111
  if (isPinnedRow(rowIndex)) {
96
112
  return "continue";
97
113
  }
@@ -106,15 +122,15 @@ export var useOnSortColumn = function (_a) {
106
122
  buildLevelValue(sortedColumnIndex, options),
107
123
  ];
108
124
  try {
109
- for (var _d = (e_1 = void 0, __values(additionalLevels !== null && additionalLevels !== void 0 ? additionalLevels : [])), _e = _d.next(); !_e.done; _e = _d.next()) {
110
- var level = _e.value;
125
+ for (var _e = (e_1 = void 0, __values(additionalLevels !== null && additionalLevels !== void 0 ? additionalLevels : [])), _f = _e.next(); !_f.done; _f = _e.next()) {
126
+ var level = _f.value;
111
127
  sortValues.push(buildLevelValue(level.columnIndex, level));
112
128
  }
113
129
  }
114
130
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
115
131
  finally {
116
132
  try {
117
- if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
133
+ if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
118
134
  }
119
135
  finally { if (e_1) throw e_1.error; }
120
136
  }
@@ -136,7 +152,7 @@ export var useOnSortColumn = function (_a) {
136
152
  var specs = __spreadArray([
137
153
  {
138
154
  sortOrder: sortOrder,
139
- sortBy: (_b = options === null || options === void 0 ? void 0 : options.sortBy) !== null && _b !== void 0 ? _b : "value",
155
+ sortBy: (_c = options === null || options === void 0 ? void 0 : options.sortBy) !== null && _c !== void 0 ? _c : "value",
140
156
  // Pre-resolve the target color the same way the cell sort
141
157
  // values are resolved, so sort-rows.ts can compare strings.
142
158
  sortColor: getStringifiedColor(options === null || options === void 0 ? void 0 : options.sortColor, theme),
@@ -331,6 +347,7 @@ export var useOnSortColumn = function (_a) {
331
347
  onChangeSheets,
332
348
  getCellData,
333
349
  getDataRowCount,
350
+ getMerges,
334
351
  isHiddenRow,
335
352
  isManuallyHiddenRow,
336
353
  getDependents,
@@ -1,4 +1,5 @@
1
- import type { SelectionArea } from "@rowsncolumns/common-types";
1
+ import type { GridRange, SelectionArea } from "@rowsncolumns/common-types";
2
+ import { type CellInterface } from "@rowsncolumns/grid";
2
3
  import { type CellData, type Sheet, type SelectionAttributes, type SortOrder, type SpreadsheetTheme } from "@rowsncolumns/spreadsheet";
3
4
  import type { OnCommand } from "../commands";
4
5
  import type { useCalculation } from "./use-calculation";
@@ -42,6 +43,12 @@ export type UseOnSortRangeProps<T extends CellData, S extends Sheet = Sheet> = {
42
43
  getDependents: ReturnType<typeof useCalculation>["getDependents"];
43
44
  getFrozenRowCount(sheetId: number): number;
44
45
  getSheetName(sheetId: number): string;
46
+ /**
47
+ * The sheet's merged regions. A range whose merges are not laid out
48
+ * identically on every row is refused (Excel), because the sort would move
49
+ * the anchor values without their merge outlines.
50
+ */
51
+ getMerges?(sheetId: number): GridRange[] | null | undefined;
45
52
  /**
46
53
  * Optional — needed when callers pass per-column specs using
47
54
  * `sortBy: "cellColor" | "fontColor" | "icon"`. Without it those sort
@@ -54,6 +61,13 @@ export type UseOnSortRangeProps<T extends CellData, S extends Sheet = Sheet> = {
54
61
  */
55
62
  theme: SpreadsheetTheme;
56
63
  onCommand?: OnCommand;
64
+ /**
65
+ * The cursor at sort time. When it stands inside the sorted range (and no
66
+ * per-column `specs` are given) its column is the sort key — Excel / Sheets
67
+ * "Sort A to Z" sorts the range by the column the user is in, not by its
68
+ * leftmost column. Without it the legacy leftmost-column-first order applies.
69
+ */
70
+ getActiveCell?: () => CellInterface | null | undefined;
57
71
  };
58
72
  /**
59
73
  * Sorts a column range.
@@ -61,5 +75,5 @@ export type UseOnSortRangeProps<T extends CellData, S extends Sheet = Sheet> = {
61
75
  * @param param0
62
76
  * @returns
63
77
  */
64
- export declare const useOnSortRange: <T extends CellData, S extends Sheet = Sheet>({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, onChangeSheets, getCellData, getDependents, isHiddenRow, isManuallyHiddenRow, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, onCommand, }: UseOnSortRangeProps<T, S>) => (sheetId: number, selections: SelectionArea<SelectionAttributes>[], sortOrder: SortOrder, specs?: DimensionSortSpec[]) => void;
78
+ export declare const useOnSortRange: <T extends CellData, S extends Sheet = Sheet>({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, onChangeSheets, getCellData, getDependents, isHiddenRow, isManuallyHiddenRow, getFrozenRowCount, getSheetName, getMerges, getEffectiveFormat, theme, onCommand, getActiveCell, }: UseOnSortRangeProps<T, S>) => (sheetId: number, selections: SelectionArea<SelectionAttributes>[], sortOrder: SortOrder, specs?: DimensionSortSpec[]) => void;
65
79
  //# sourceMappingURL=use-on-sort-range.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-sort-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,KAAK,EAIV,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,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;AACxD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,GAAG,KAAK,IACrB;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,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,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D;;;;OAIG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC7D;;;;OAIG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD;;;;;OAKG;IACH,mBAAmB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,UAAU,CAC7B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;IACxB;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,6RAkBzE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMb,MAAM,cACH,aAAa,CAAC,mBAAmB,CAAC,EAAE,aACrC,SAAS,UAQZ,iBAAiB,EAAE,SA2UhC,CAAC"}
1
+ {"version":3,"file":"use-on-sort-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-range.ts"],"names":[],"mappings":"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"}