@rowsncolumns/spreadsheet-state 28.0.72 → 28.0.74

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 (185) hide show
  1. package/dist/cjs/api/advanced-filter.d.ts +72 -0
  2. package/dist/cjs/api/advanced-filter.d.ts.map +1 -0
  3. package/dist/cjs/api/advanced-filter.js +0 -0
  4. package/dist/cjs/api/goal-seek.d.ts +29 -0
  5. package/dist/cjs/api/goal-seek.d.ts.map +1 -0
  6. package/dist/cjs/api/goal-seek.js +131 -0
  7. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  8. package/dist/cjs/api/immer-utils.js +2 -0
  9. package/dist/cjs/api/paint-format.d.ts +41 -0
  10. package/dist/cjs/api/paint-format.d.ts.map +1 -0
  11. package/dist/cjs/api/paint-format.js +115 -0
  12. package/dist/cjs/api/paste-special.d.ts +48 -0
  13. package/dist/cjs/api/paste-special.d.ts.map +1 -0
  14. package/dist/cjs/api/paste-special.js +229 -0
  15. package/dist/cjs/api/split-text.d.ts +12 -0
  16. package/dist/cjs/api/split-text.d.ts.map +1 -1
  17. package/dist/cjs/api/split-text.js +41 -0
  18. package/dist/cjs/api/subtotal.d.ts +85 -0
  19. package/dist/cjs/api/subtotal.d.ts.map +1 -0
  20. package/dist/cjs/api/subtotal.js +250 -0
  21. package/dist/cjs/commands.d.ts +13 -0
  22. package/dist/cjs/commands.d.ts.map +1 -1
  23. package/dist/cjs/components/editors/data-validation-rule-editor.d.ts.map +1 -1
  24. package/dist/cjs/components/editors/data-validation-rule-editor.js +83 -16
  25. package/dist/cjs/components/editors/table-editor.js +7 -2
  26. package/dist/cjs/hooks/use-calculation-worker.d.ts.map +1 -1
  27. package/dist/cjs/hooks/use-calculation-worker.js +39 -8
  28. package/dist/cjs/hooks/use-calculation.d.ts +12 -2
  29. package/dist/cjs/hooks/use-calculation.d.ts.map +1 -1
  30. package/dist/cjs/hooks/use-calculation.js +71 -35
  31. package/dist/cjs/hooks/use-on-advanced-filter.d.ts +21 -0
  32. package/dist/cjs/hooks/use-on-advanced-filter.d.ts.map +1 -0
  33. package/dist/cjs/hooks/use-on-advanced-filter.js +42 -0
  34. package/dist/cjs/hooks/use-on-goal-seek.d.ts +30 -0
  35. package/dist/cjs/hooks/use-on-goal-seek.d.ts.map +1 -0
  36. package/dist/cjs/hooks/use-on-goal-seek.js +140 -0
  37. package/dist/cjs/hooks/use-on-import-excel.d.ts +10 -1
  38. package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
  39. package/dist/cjs/hooks/use-on-import-excel.js +8 -4
  40. package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  41. package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +53 -34
  42. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  43. package/dist/cjs/hooks/use-on-paste.js +82 -52
  44. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts +2 -1
  45. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  46. package/dist/cjs/hooks/use-on-remove-duplicates.js +5 -3
  47. package/dist/cjs/hooks/use-on-show-column.d.ts.map +1 -1
  48. package/dist/cjs/hooks/use-on-show-column.js +2 -0
  49. package/dist/cjs/hooks/use-on-show-row.d.ts.map +1 -1
  50. package/dist/cjs/hooks/use-on-show-row.js +2 -0
  51. package/dist/cjs/hooks/use-on-subtotal.d.ts +26 -0
  52. package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -0
  53. package/dist/cjs/hooks/use-on-subtotal.js +53 -0
  54. package/dist/cjs/hooks/use-paint-format.d.ts +19 -3
  55. package/dist/cjs/hooks/use-paint-format.d.ts.map +1 -1
  56. package/dist/cjs/hooks/use-paint-format.js +85 -31
  57. package/dist/cjs/hooks/use-sheet-properties.d.ts +3 -0
  58. package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
  59. package/dist/cjs/hooks/use-sheet-properties.js +8 -0
  60. package/dist/cjs/hooks/use-split-text-to-columns.d.ts +2 -1
  61. package/dist/cjs/hooks/use-split-text-to-columns.d.ts.map +1 -1
  62. package/dist/cjs/hooks/use-split-text-to-columns.js +3 -2
  63. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +50 -36
  64. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  65. package/dist/cjs/hooks/use-spreadsheet-state.js +98 -18
  66. package/dist/cjs/index.d.ts +9 -0
  67. package/dist/cjs/index.d.ts.map +1 -1
  68. package/dist/cjs/index.js +9 -0
  69. package/dist/cjs/interface/calculation-interface.d.ts.map +1 -1
  70. package/dist/cjs/interface/calculation-interface.js +5 -0
  71. package/dist/cjs/interface/change-batch-stream.d.ts.map +1 -1
  72. package/dist/cjs/interface/change-batch-stream.js +12 -6
  73. package/dist/cjs/interface/change-batch.d.ts.map +1 -1
  74. package/dist/cjs/interface/change-batch.js +17 -9
  75. package/dist/cjs/interface/change-formatting.d.ts.map +1 -1
  76. package/dist/cjs/interface/change-formatting.js +30 -11
  77. package/dist/cjs/interface/hide-column.d.ts.map +1 -1
  78. package/dist/cjs/interface/hide-column.js +4 -0
  79. package/dist/cjs/interface/hide-row.d.ts.map +1 -1
  80. package/dist/cjs/interface/hide-row.js +4 -0
  81. package/dist/cjs/interface/remove-duplicates.d.ts +3 -2
  82. package/dist/cjs/interface/remove-duplicates.d.ts.map +1 -1
  83. package/dist/cjs/interface/remove-duplicates.js +41 -7
  84. package/dist/cjs/interface/split-text.d.ts +2 -1
  85. package/dist/cjs/interface/split-text.d.ts.map +1 -1
  86. package/dist/cjs/interface/split-text.js +7 -3
  87. package/dist/cjs/interface/spreadsheet-interface.d.ts +2 -1
  88. package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
  89. package/dist/cjs/interface/spreadsheet-interface.js +5 -5
  90. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  91. package/dist/cjs/sheet-cell.js +7 -0
  92. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  93. package/dist/esm/api/advanced-filter.d.ts +72 -0
  94. package/dist/esm/api/advanced-filter.d.ts.map +1 -0
  95. package/dist/esm/api/advanced-filter.js +0 -0
  96. package/dist/esm/api/goal-seek.d.ts +29 -0
  97. package/dist/esm/api/goal-seek.d.ts.map +1 -0
  98. package/dist/esm/api/goal-seek.js +108 -0
  99. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  100. package/dist/esm/api/immer-utils.js +2 -0
  101. package/dist/esm/api/paint-format.d.ts +41 -0
  102. package/dist/esm/api/paint-format.d.ts.map +1 -0
  103. package/dist/esm/api/paint-format.js +77 -0
  104. package/dist/esm/api/paste-special.d.ts +48 -0
  105. package/dist/esm/api/paste-special.d.ts.map +1 -0
  106. package/dist/esm/api/paste-special.js +220 -0
  107. package/dist/esm/api/split-text.d.ts +12 -0
  108. package/dist/esm/api/split-text.d.ts.map +1 -1
  109. package/dist/esm/api/split-text.js +28 -0
  110. package/dist/esm/api/subtotal.d.ts +85 -0
  111. package/dist/esm/api/subtotal.d.ts.map +1 -0
  112. package/dist/esm/api/subtotal.js +181 -0
  113. package/dist/esm/commands.d.ts +13 -0
  114. package/dist/esm/commands.d.ts.map +1 -1
  115. package/dist/esm/components/editors/data-validation-rule-editor.d.ts.map +1 -1
  116. package/dist/esm/components/editors/data-validation-rule-editor.js +52 -4
  117. package/dist/esm/components/editors/table-editor.js +7 -4
  118. package/dist/esm/hooks/use-calculation-worker.d.ts.map +1 -1
  119. package/dist/esm/hooks/use-calculation-worker.js +20 -2
  120. package/dist/esm/hooks/use-calculation.d.ts +12 -2
  121. package/dist/esm/hooks/use-calculation.d.ts.map +1 -1
  122. package/dist/esm/hooks/use-calculation.js +38 -7
  123. package/dist/esm/hooks/use-on-advanced-filter.d.ts +21 -0
  124. package/dist/esm/hooks/use-on-advanced-filter.d.ts.map +1 -0
  125. package/dist/esm/hooks/use-on-advanced-filter.js +41 -0
  126. package/dist/esm/hooks/use-on-goal-seek.d.ts +30 -0
  127. package/dist/esm/hooks/use-on-goal-seek.d.ts.map +1 -0
  128. package/dist/esm/hooks/use-on-goal-seek.js +82 -0
  129. package/dist/esm/hooks/use-on-import-excel.d.ts +10 -1
  130. package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
  131. package/dist/esm/hooks/use-on-import-excel.js +8 -4
  132. package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  133. package/dist/esm/hooks/use-on-merge-unmerge-cells.js +13 -13
  134. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  135. package/dist/esm/hooks/use-on-paste.js +49 -14
  136. package/dist/esm/hooks/use-on-remove-duplicates.d.ts +2 -1
  137. package/dist/esm/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  138. package/dist/esm/hooks/use-on-remove-duplicates.js +5 -3
  139. package/dist/esm/hooks/use-on-show-column.d.ts.map +1 -1
  140. package/dist/esm/hooks/use-on-show-column.js +2 -0
  141. package/dist/esm/hooks/use-on-show-row.d.ts.map +1 -1
  142. package/dist/esm/hooks/use-on-show-row.js +2 -0
  143. package/dist/esm/hooks/use-on-subtotal.d.ts +26 -0
  144. package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -0
  145. package/dist/esm/hooks/use-on-subtotal.js +48 -0
  146. package/dist/esm/hooks/use-paint-format.d.ts +19 -3
  147. package/dist/esm/hooks/use-paint-format.d.ts.map +1 -1
  148. package/dist/esm/hooks/use-paint-format.js +71 -29
  149. package/dist/esm/hooks/use-sheet-properties.d.ts +3 -0
  150. package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
  151. package/dist/esm/hooks/use-sheet-properties.js +8 -0
  152. package/dist/esm/hooks/use-split-text-to-columns.d.ts +2 -1
  153. package/dist/esm/hooks/use-split-text-to-columns.d.ts.map +1 -1
  154. package/dist/esm/hooks/use-split-text-to-columns.js +3 -2
  155. package/dist/esm/hooks/use-spreadsheet-state.d.ts +50 -36
  156. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  157. package/dist/esm/hooks/use-spreadsheet-state.js +89 -16
  158. package/dist/esm/index.d.ts +9 -0
  159. package/dist/esm/index.d.ts.map +1 -1
  160. package/dist/esm/index.js +9 -0
  161. package/dist/esm/interface/calculation-interface.d.ts.map +1 -1
  162. package/dist/esm/interface/calculation-interface.js +3 -0
  163. package/dist/esm/interface/change-batch-stream.d.ts.map +1 -1
  164. package/dist/esm/interface/change-batch-stream.js +12 -6
  165. package/dist/esm/interface/change-batch.d.ts.map +1 -1
  166. package/dist/esm/interface/change-batch.js +15 -9
  167. package/dist/esm/interface/change-formatting.d.ts.map +1 -1
  168. package/dist/esm/interface/change-formatting.js +28 -11
  169. package/dist/esm/interface/hide-column.d.ts.map +1 -1
  170. package/dist/esm/interface/hide-column.js +4 -0
  171. package/dist/esm/interface/hide-row.d.ts.map +1 -1
  172. package/dist/esm/interface/hide-row.js +4 -0
  173. package/dist/esm/interface/remove-duplicates.d.ts +3 -2
  174. package/dist/esm/interface/remove-duplicates.d.ts.map +1 -1
  175. package/dist/esm/interface/remove-duplicates.js +37 -6
  176. package/dist/esm/interface/split-text.d.ts +2 -1
  177. package/dist/esm/interface/split-text.d.ts.map +1 -1
  178. package/dist/esm/interface/split-text.js +6 -3
  179. package/dist/esm/interface/spreadsheet-interface.d.ts +2 -1
  180. package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
  181. package/dist/esm/interface/spreadsheet-interface.js +5 -5
  182. package/dist/esm/sheet-cell.d.ts.map +1 -1
  183. package/dist/esm/sheet-cell.js +7 -0
  184. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  185. package/package.json +18 -18
@@ -3,6 +3,7 @@ import { isCellNode } from "@rowsncolumns/dag";
3
3
  import { isCellWithinBounds } from "@rowsncolumns/grid";
4
4
  import { createNewSheet, DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT, useGetCellDimensions, useGetColumnWidth, useGetContentfulRangeAroundCell, useGetEffectiveValuesFromRange, useGetRowHeight, } from "@rowsncolumns/spreadsheet";
5
5
  import { useFonts } from "@rowsncolumns/spreadsheet";
6
+ import { getBandedCells } from "@rowsncolumns/spreadsheet";
6
7
  import { defaultSpreadsheetTheme, useCallbackRef, useSpreadsheetTheme, } from "@rowsncolumns/spreadsheet";
7
8
  import { findMatchingBandProperty, getCurrentLocale, isNil, setDefaultEnableAtFormula, uuid, } from "@rowsncolumns/utils";
8
9
  import { enableMapSet, enablePatches, setUseStrictShallowCopy } from "immer";
@@ -121,6 +122,9 @@ import { useSheetDataSubscriber } from "./use-sheetdata-subscriber";
121
122
  import { useSplitTextToColumns } from "./use-split-text-to-columns";
122
123
  import { useOnLocaleChange } from "./use-on-locale-change";
123
124
  import { useOnRemoveDuplicates } from "./use-on-remove-duplicates";
125
+ import { useOnGoalSeek } from "./use-on-goal-seek";
126
+ import { useOnSubtotal } from "./use-on-subtotal";
127
+ import { useOnAdvancedFilter } from "./use-on-advanced-filter";
124
128
  import { useSharedStringRegistry } from "./use-ss-registry";
125
129
  import { useStructuredReference } from "./use-structured-reference";
126
130
  import { useUndoRedo } from "./use-undo-redo";
@@ -206,7 +210,7 @@ export var useSpreadsheetState = function (_a) {
206
210
  // Semantic command stream
207
211
  onCommandProp = _a.onCommand,
208
212
  // Theme
209
- onChangeTheme = _a.onChangeTheme,
213
+ onChangeTheme = _a.onChangeTheme, namedCellStyles = _a.namedCellStyles, onChangeNamedCellStyles = _a.onChangeNamedCellStyles,
210
214
  // error handler
211
215
  onError = _a.onError,
212
216
  // Get auto fill values
@@ -424,7 +428,7 @@ export var useSpreadsheetState = function (_a) {
424
428
  sharedStrings: sharedStrings,
425
429
  locale: locale,
426
430
  getPrecedents: getPrecedentsForward,
427
- }), getDataRowCount = _s.getDataRowCount, getNonEmptyRowCount = _s.getNonEmptyRowCount, getNonEmptyColumnCount = _s.getNonEmptyColumnCount, getDataColumnCount = _s.getDataColumnCount, getSheetId = _s.getSheetId, getSheetName = _s.getSheetName, getSheetCount = _s.getSheetCount, getSheetIndex = _s.getSheetIndex, getSheetProperties = _s.getSheetProperties, getCellData = _s.getCellData, getMentionsFromCell = _s.getMentionsFromCell, getTextFormatRuns = _s.getTextFormatRuns, getEffectiveValue = _s.getEffectiveValue, getEffectiveValueForCalculation = _s.getEffectiveValueForCalculation, getUserEnteredValue = _s.getUserEnteredValue, getUserEnteredValueStable = _s.getUserEnteredValueStable, getConditionalFormatFormula = _s.getConditionalFormatFormula, getDataValidationFormula = _s.getDataValidationFormula, getDataValidation = _s.getDataValidation, getDefaultHorizontalAlignment = _s.getDefaultHorizontalAlignment, getDataValidationById = _s.getDataValidationById, getActiveSheetId = _s.getActiveSheetId, getUserEnteredFormat = _s.getUserEnteredFormat, getEffectiveFormat = _s.getEffectiveFormat, getFormattedValue = _s.getFormattedValue, getSeriesValuesFromRange = _s.getSeriesValuesFromRange, getFormattingFromRange = _s.getFormattingFromRange, getUserEnteredValuesFromRange = _s.getUserEnteredValuesFromRange, getFormulasFromRange = _s.getFormulasFromRange, getDomainValuesFromRange = _s.getDomainValuesFromRange, getColumnarDataFromRange = _s.getColumnarDataFromRange, isColumnHidden = _s.isColumnHidden, isHiddenRow = _s.isHiddenRow, isHiddenByFilterRow = _s.isHiddenByFilterRow, getSheetRowCount = _s.getSheetRowCount, getSheetColumnCount = _s.getSheetColumnCount, getColumnWidth = _s.getColumnWidth, getRowHeight = _s.getRowHeight, getEffectiveExtendedValue = _s.getEffectiveExtendedValue, getUserEnteredExtendedValue = _s.getUserEnteredExtendedValue, getFrozenRowCount = _s.getFrozenRowCount, getErrorValue = _s.getErrorValue;
431
+ }), getDataRowCount = _s.getDataRowCount, getNonEmptyRowCount = _s.getNonEmptyRowCount, getNonEmptyColumnCount = _s.getNonEmptyColumnCount, getDataColumnCount = _s.getDataColumnCount, getSheetId = _s.getSheetId, getSheetName = _s.getSheetName, getSheetCount = _s.getSheetCount, getSheetIndex = _s.getSheetIndex, getSheetNames = _s.getSheetNames, getSheetProperties = _s.getSheetProperties, getCellData = _s.getCellData, getMentionsFromCell = _s.getMentionsFromCell, getTextFormatRuns = _s.getTextFormatRuns, getEffectiveValue = _s.getEffectiveValue, getEffectiveValueForCalculation = _s.getEffectiveValueForCalculation, getUserEnteredValue = _s.getUserEnteredValue, getUserEnteredValueStable = _s.getUserEnteredValueStable, getConditionalFormatFormula = _s.getConditionalFormatFormula, getDataValidationFormula = _s.getDataValidationFormula, getDataValidation = _s.getDataValidation, getDefaultHorizontalAlignment = _s.getDefaultHorizontalAlignment, getDataValidationById = _s.getDataValidationById, getActiveSheetId = _s.getActiveSheetId, getUserEnteredFormat = _s.getUserEnteredFormat, getEffectiveFormat = _s.getEffectiveFormat, getFormattedValue = _s.getFormattedValue, getFormulaValue = _s.getFormulaValue, getSeriesValuesFromRange = _s.getSeriesValuesFromRange, getFormattingFromRange = _s.getFormattingFromRange, getUserEnteredValuesFromRange = _s.getUserEnteredValuesFromRange, getFormulasFromRange = _s.getFormulasFromRange, getDomainValuesFromRange = _s.getDomainValuesFromRange, getColumnarDataFromRange = _s.getColumnarDataFromRange, isColumnHidden = _s.isColumnHidden, isHiddenRow = _s.isHiddenRow, isHiddenByFilterRow = _s.isHiddenByFilterRow, getRowOutlineLevel = _s.getRowOutlineLevel, getSheetRowCount = _s.getSheetRowCount, getSheetColumnCount = _s.getSheetColumnCount, getColumnWidth = _s.getColumnWidth, getRowHeight = _s.getRowHeight, getEffectiveExtendedValue = _s.getEffectiveExtendedValue, getUserEnteredExtendedValue = _s.getUserEnteredExtendedValue, getFrozenRowCount = _s.getFrozenRowCount, getErrorValue = _s.getErrorValue;
428
432
  // Subscriber
429
433
  useSheetDataSubscriber({ sheetData: sheetData });
430
434
  var _t = useSelectNextPrevSheet({
@@ -524,6 +528,7 @@ export var useSpreadsheetState = function (_a) {
524
528
  getEffectiveValue: getEffectiveValueForCalculation,
525
529
  activeSheetId: activeSheetId,
526
530
  getSheetIndex: getSheetIndex,
531
+ getSheetNames: getSheetNames,
527
532
  getUserEnteredValue: getUserEnteredValueStable,
528
533
  getConditionalFormatFormula: getConditionalFormatFormula,
529
534
  getDataValidationFormula: getDataValidationFormula,
@@ -910,12 +915,66 @@ export var useSpreadsheetState = function (_a) {
910
915
  getRowHeight: getCurrentRowHeight,
911
916
  onCommand: onCommand,
912
917
  }), onChangeFormatting = _0.onChangeFormatting, onChangeBorder = _0.onChangeBorder, onRepeatFormatting = _0.onRepeatFormatting;
913
- // Paint formatting
914
- var _1 = usePaintFormat({
918
+ // Merge unmerge
919
+ var _1 = useOnMergeUnMergeCells({
920
+ locale: locale,
921
+ merges: merges,
922
+ cellXfsRegistry: cellXfsRegistry,
923
+ sharedStringRegistry: sharedStringRegistry,
924
+ onChangeSelections: onChangeSelections,
925
+ createHistory: createHistory,
926
+ onChangeSheets: onChangeSheets,
927
+ onChangeSheetData: onChangeSheetData,
928
+ enqueueCalculation: enqueueCalculation,
929
+ onCommand: onCommand,
930
+ }), onMergeCells = _1.onMergeCells, onUnMergeCells = _1.onUnMergeCells;
931
+ // Paint formatting — carries the visible look of the source: effective formats layered over
932
+ // table banding (as static fills), plus the merges inside the source block, tiled onto the
933
+ // target (issue #620 — Google Sheets parity).
934
+ var getPaintMerges = useCallback(function (sheetId) { var _a; return (_a = sheets.find(function (s) { return s.sheetId === sheetId; })) === null || _a === void 0 ? void 0 : _a.merges; }, [sheets]);
935
+ var getPaintBandedCells = useCallback(function (sheetId) {
936
+ var e_2, _a;
937
+ var _b;
938
+ var bands = [];
939
+ try {
940
+ for (var _c = __values(tables !== null && tables !== void 0 ? tables : []), _d = _c.next(); !_d.done; _d = _c.next()) {
941
+ var table = _d.value;
942
+ if (table.sheetId !== sheetId)
943
+ continue;
944
+ var banded = (_b = table.bandedRange) !== null && _b !== void 0 ? _b : deriveBuiltInTableBanding(table);
945
+ if (isNil(banded))
946
+ continue;
947
+ bands.push(__assign({ bandedRangeId: "".concat(table.id, "-").concat(table.theme), range: __assign(__assign({}, table.range), { sheetId: sheetId }) }, banded));
948
+ }
949
+ }
950
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
951
+ finally {
952
+ try {
953
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
954
+ }
955
+ finally { if (e_2) throw e_2.error; }
956
+ }
957
+ if (!bands.length)
958
+ return undefined;
959
+ return getBandedCells(bands, theme, sheetId, function (rowIndex) { return isHiddenRow(sheetId, rowIndex); }, function (columnIndex) { return isColumnHidden(sheetId, columnIndex); });
960
+ }, [tables, theme, isHiddenRow, isColumnHidden]);
961
+ var onPaintMerges = useCallback(function (sheetId, activeCell, targetRange, paintedMerges) {
962
+ // The target's own merges give way to the pattern's (the painter replaces the look).
963
+ onUnMergeCells(sheetId, activeCell, [{ range: targetRange }]);
964
+ if (paintedMerges.length) {
965
+ onMergeCells(sheetId, activeCell, paintedMerges.map(function (range) { return ({ range: range }); }));
966
+ }
967
+ // `onMergeCells` clears the selection; the painted target stays selected like Excel.
968
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId, [{ range: targetRange }]);
969
+ }, [onUnMergeCells, onMergeCells, onChangeSelections]);
970
+ var _2 = usePaintFormat({
915
971
  onChangeSelections: onChangeSelections,
916
972
  onChangeFormatting: onChangeFormatting,
917
973
  getEffectiveFormat: getEffectiveFormat,
918
- }), isPaintFormatActive = _1.isPaintFormatActive, paintFormat = _1.paintFormat, onApplyPaintFormat = _1.onApplyPaintFormat, onSavePaintFormat = _1.onSavePaintFormat;
974
+ getMerges: getPaintMerges,
975
+ onPaintMerges: onPaintMerges,
976
+ getBandedCells: getPaintBandedCells,
977
+ }), isPaintFormatActive = _2.isPaintFormatActive, paintFormat = _2.paintFormat, onApplyPaintFormat = _2.onApplyPaintFormat, onSavePaintFormat = _2.onSavePaintFormat;
919
978
  // Selection interceptor
920
979
  // for paint format
921
980
  var onChangeSelectionsInterceptor = useCallback(function (sheetId, selections, finishedSelection) {
@@ -946,19 +1005,6 @@ export var useSpreadsheetState = function (_a) {
946
1005
  conditionalFormats: conditionalFormats,
947
1006
  onChangeConditionalFormats: onChangeConditionalFormats,
948
1007
  });
949
- // Merge unmerge
950
- var _2 = useOnMergeUnMergeCells({
951
- locale: locale,
952
- merges: merges,
953
- cellXfsRegistry: cellXfsRegistry,
954
- sharedStringRegistry: sharedStringRegistry,
955
- onChangeSelections: onChangeSelections,
956
- createHistory: createHistory,
957
- onChangeSheets: onChangeSheets,
958
- onChangeSheetData: onChangeSheetData,
959
- enqueueCalculation: enqueueCalculation,
960
- onCommand: onCommand,
961
- }), onMergeCells = _2.onMergeCells, onUnMergeCells = _2.onUnMergeCells;
962
1008
  // Resize
963
1009
  var onResize = useOnResize({
964
1010
  onChangeSheets: onChangeSheets,
@@ -1689,6 +1735,7 @@ export var useSpreadsheetState = function (_a) {
1689
1735
  onChangeDataValidations: onChangeDataValidations,
1690
1736
  onCreateDataValidationRule: onCreateDataValidationRule,
1691
1737
  onChangeTheme: onChangeTheme,
1738
+ onChangeNamedCellStyles: onChangeNamedCellStyles,
1692
1739
  onClearHistory: onClearHistory,
1693
1740
  evaluateConditionalFormatting: evaluateConditionalFormatting,
1694
1741
  evaluateDataValidations: evaluateDataValidations,
@@ -1775,6 +1822,34 @@ export var useSpreadsheetState = function (_a) {
1775
1822
  getFormattedValue: getFormattedValue,
1776
1823
  onCommand: onCommand,
1777
1824
  });
1825
+ // Goal Seek — scratch-evaluates through the calculator, commits via onChange
1826
+ var onGoalSeek = useOnGoalSeek({
1827
+ getFormulaValue: getFormulaValue,
1828
+ getEffectiveValue: getEffectiveValue,
1829
+ onRequestCalculate: onRequestCalculateWithoutFormatting,
1830
+ getDependents: getDependents,
1831
+ onChange: onChange,
1832
+ });
1833
+ // Data → Subtotal (outline of SUBTOTAL rows) over the row/write/group callbacks
1834
+ var onSubtotal = useOnSubtotal({
1835
+ getEffectiveValue: getEffectiveValue,
1836
+ getFormattedValue: getFormattedValue,
1837
+ getFormulaValue: getFormulaValue,
1838
+ getRowOutlineLevel: getRowOutlineLevel,
1839
+ onDeleteRow: onDeleteRow,
1840
+ onInsertRow: onInsertRow,
1841
+ onChangeBatch: onChangeBatch,
1842
+ onGroupRows: onGroupRows,
1843
+ onUngroupRows: onUngroupRows,
1844
+ });
1845
+ // Data → Advanced filter (criteria range) over the hide/show/write callbacks
1846
+ var onAdvancedFilter = useOnAdvancedFilter({
1847
+ getEffectiveValue: getEffectiveValue,
1848
+ getFormattedValue: getFormattedValue,
1849
+ onHideRow: onHideRow,
1850
+ onShowRow: onShowRow,
1851
+ onChangeBatch: onChangeBatch,
1852
+ });
1778
1853
  // Trace dependents and precedents
1779
1854
  var _16 = useOnTraceDependentsPrecedents({
1780
1855
  getDependents: getDependents,
@@ -1794,6 +1869,7 @@ export var useSpreadsheetState = function (_a) {
1794
1869
  locale: locale,
1795
1870
  }), onCreateCitation = _18.onCreateCitation, onUpdateCitation = _18.onUpdateCitation, onRemoveCitationFromCell = _18.onRemoveCitationFromCell, onDeleteCitation = _18.onDeleteCitation;
1796
1871
  return {
1872
+ namedCellStyles: namedCellStyles,
1797
1873
  activeCellBySheetId: activeCellBySheetId,
1798
1874
  selectionsBySheetId: selectionsBySheetId,
1799
1875
  activeCell: activeCell,
@@ -2010,6 +2086,10 @@ export var useSpreadsheetState = function (_a) {
2010
2086
  onSplitTextToColumns: onSplitTextToColumns,
2011
2087
  // Remove duplicates
2012
2088
  onRemoveDuplicates: onRemoveDuplicates,
2089
+ // Data tools
2090
+ onGoalSeek: onGoalSeek,
2091
+ onSubtotal: onSubtotal,
2092
+ onAdvancedFilter: onAdvancedFilter,
2013
2093
  // Add rows
2014
2094
  onRequestAddRows: onRequestAddRows,
2015
2095
  // Dependents
@@ -2,6 +2,7 @@ export * from "./generated-names";
2
2
  export * from "./hooks/use-spreadsheet-state";
3
3
  export * from "./hooks/use-on-copy";
4
4
  export { generateDataFromClipboard, pickFormatting, pickFormula, pickValue, transpose, } from "./api/copy-paste";
5
+ export { applyPasteOperation, isBlankClipboardCell, normalizePasteSpecialOptions, PASTE_SPECIAL_OPTIONS_KEY, PASTE_SPECIAL_TYPE_KEY, resolvePasteSpecialOptions, type ResolvedPasteSpecialOptions, } from "./api/paste-special";
5
6
  export * from "./hooks/use-calculation";
6
7
  export * from "./hooks/use-on-change-batch-stream";
7
8
  export * from "./hooks/use-on-trace-dependents-precedents";
@@ -28,6 +29,14 @@ export * from "./hooks/use-cellxfs-registry";
28
29
  export * from "./hooks/use-ss-registry";
29
30
  export * from "./hooks/use-sheet-properties";
30
31
  export * from "./hooks/use-on-remove-duplicates";
32
+ export * from "./hooks/use-on-goal-seek";
33
+ export * from "./hooks/use-on-subtotal";
34
+ export * from "./hooks/use-on-advanced-filter";
35
+ export * from "./api/split-text";
36
+ export * from "./api/goal-seek";
37
+ export * from "./api/subtotal";
38
+ export * from "./api/advanced-filter";
39
+ export * from "./api/paint-format";
31
40
  export * from "./hooks/use-on-locale-change";
32
41
  export * from "./hooks/use-on-request-resize";
33
42
  export * from "./hooks/use-on-request-edit-table";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -2,6 +2,7 @@ export * from "./generated-names";
2
2
  export * from "./hooks/use-spreadsheet-state";
3
3
  export * from "./hooks/use-on-copy";
4
4
  export { generateDataFromClipboard, pickFormatting, pickFormula, pickValue, transpose, } from "./api/copy-paste";
5
+ export { applyPasteOperation, isBlankClipboardCell, normalizePasteSpecialOptions, PASTE_SPECIAL_OPTIONS_KEY, PASTE_SPECIAL_TYPE_KEY, resolvePasteSpecialOptions, } from "./api/paste-special";
5
6
  export * from "./hooks/use-calculation";
6
7
  export * from "./hooks/use-on-change-batch-stream";
7
8
  export * from "./hooks/use-on-trace-dependents-precedents";
@@ -28,6 +29,14 @@ export * from "./hooks/use-cellxfs-registry";
28
29
  export * from "./hooks/use-ss-registry";
29
30
  export * from "./hooks/use-sheet-properties";
30
31
  export * from "./hooks/use-on-remove-duplicates";
32
+ export * from "./hooks/use-on-goal-seek";
33
+ export * from "./hooks/use-on-subtotal";
34
+ export * from "./hooks/use-on-advanced-filter";
35
+ export * from "./api/split-text";
36
+ export * from "./api/goal-seek";
37
+ export * from "./api/subtotal";
38
+ export * from "./api/advanced-filter";
39
+ export * from "./api/paint-format";
31
40
  export * from "./hooks/use-on-locale-change";
32
41
  // Dialog-opener hooks external engine chrome bridges to (they write the payload
33
42
  // atoms the dialog hosts read; nothing else exports them).
@@ -1 +1 @@
1
- {"version":3,"file":"calculation-interface.d.ts","sourceRoot":"","sources":["../../../interface/calculation-interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculation-interface.d.ts","sourceRoot":"","sources":["../../../interface/calculation-interface.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { __awaiter, __generator } from "tslib";
2
+ import { resolveSheetSpan } from "@rowsncolumns/utils";
2
3
  import { CalculationGraph, CalculationWorkerClient, createNamedRangeResolver, createStructuredReferenceResolver, enqueueCalculationOperations, mapOperationToGraphOperation, } from "@rowsncolumns/calculation-worker/server";
3
4
  import { FormulaError } from "@rowsncolumns/fast-formula-parser";
4
5
  var isSerializedFormulaError = function (value) {
@@ -115,6 +116,10 @@ var CalculationInterface = /** @class */ (function () {
115
116
  depParserConfig: {
116
117
  onStructuredReference: structuredReferenceResolver,
117
118
  onVariable: namedRangeResolver,
119
+ // 3-D references depend on every sheet between the two endpoints
120
+ onSheetRange: function (first, last) {
121
+ return resolveSheetSpan(options.getSheets().map(function (sheet) { return sheet.title; }), first, last);
122
+ },
118
123
  },
119
124
  iterativeCalculation: options.iterativeCalculation,
120
125
  });
@@ -1 +1 @@
1
- {"version":3,"file":"change-batch-stream.d.ts","sourceRoot":"","sources":["../../../interface/change-batch-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,KAAK,cAAc,EAAW,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,QAAQ,EAER,wBAAwB,EAExB,WAAW,EACX,KAAK,EACN,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,MAAM,kCAAkC,GAAG,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,cAAc,KACrB,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,CAChC,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,GAAG,KAAK,IACrB,IAAI,CACN,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,mBAAmB,GACnB,6BAA6B,GAC7B,QAAQ,GACR,uBAAuB,GACvB,oBAAoB,CACvB,GAAG;IACF,cAAc,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC/D,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3D,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7E,8BAA8B,CAAC,EAAE,UAAU,CACzC,OAAO,cAAc,CACtB,CAAC,gCAAgC,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,aAAa,GAAG,IAAI,KACnC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AAyBF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,gTAkB5E,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE3B,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,QAAQ,sBAAsB,EAC9B,gBAAgB,wBAAwB,kBA4W3C,CAAC"}
1
+ {"version":3,"file":"change-batch-stream.d.ts","sourceRoot":"","sources":["../../../interface/change-batch-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,KAAK,cAAc,EAAW,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,QAAQ,EAER,wBAAwB,EAExB,WAAW,EACX,KAAK,EACN,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,MAAM,kCAAkC,GAAG,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,cAAc,KACrB,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,CAChC,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,GAAG,KAAK,IACrB,IAAI,CACN,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,mBAAmB,GACnB,6BAA6B,GAC7B,QAAQ,GACR,uBAAuB,GACvB,oBAAoB,CACvB,GAAG;IACF,cAAc,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC/D,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3D,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7E,8BAA8B,CAAC,EAAE,UAAU,CACzC,OAAO,cAAc,CACtB,CAAC,gCAAgC,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,aAAa,GAAG,IAAI,KACnC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AAyBF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,gTAkB5E,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE3B,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,QAAQ,sBAAsB,EAC9B,gBAAgB,wBAAwB,kBAoX3C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { __asyncValues, __awaiter, __generator, __read, __values } from "tslib";
2
2
  import { makeKey } from "@rowsncolumns/dag";
3
- import { isNil } from "@rowsncolumns/utils";
3
+ import { alignmentImpliesWrap, isNil } from "@rowsncolumns/utils";
4
4
  import { produce } from "immer";
5
5
  import { createSheetDraft } from "../api/immer-utils";
6
6
  import { SheetCell } from "../sheet-cell";
@@ -268,7 +268,9 @@ export var changeBatchStream = function (_a) {
268
268
  if (cellStyles) {
269
269
  cellXfsRegistry === null || cellXfsRegistry === void 0 ? void 0 : cellXfsRegistry.registerCellXfs(sheetCell);
270
270
  if (shouldUpdateRowHeights &&
271
- (cellStyles.textFormat || cellStyles.wrapStrategy)) {
271
+ (cellStyles.textFormat ||
272
+ cellStyles.wrapStrategy ||
273
+ alignmentImpliesWrap(cellStyles.horizontalAlignment))) {
272
274
  var rowUpdates = (_c = rowStyleUpdates.get(position.rowIndex)) !== null && _c !== void 0 ? _c : [];
273
275
  rowUpdates.push({
274
276
  columnIndex: position.columnIndex,
@@ -321,7 +323,9 @@ export var changeBatchStream = function (_a) {
321
323
  var update = updates_1_1.value;
322
324
  var cellStyles = update.cellStyles;
323
325
  if (!cellStyles ||
324
- (!cellStyles.textFormat && !cellStyles.wrapStrategy)) {
326
+ (!cellStyles.textFormat &&
327
+ !cellStyles.wrapStrategy &&
328
+ !alignmentImpliesWrap(cellStyles.horizontalAlignment))) {
325
329
  continue;
326
330
  }
327
331
  if ((isMergedCell === null || isMergedCell === void 0 ? void 0 : isMergedCell(sheetId, rowIndex, update.columnIndex)) ===
@@ -331,9 +335,11 @@ export var changeBatchStream = function (_a) {
331
335
  var formattedValue = !isNil(update.overrideValue) && update.overrideValue !== ""
332
336
  ? String(update.overrideValue)
333
337
  : getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, update.columnIndex);
334
- var shouldWrap = cellStyles.wrapStrategy
335
- ? cellStyles.wrapStrategy === "wrap"
336
- : undefined;
338
+ var shouldWrap = alignmentImpliesWrap(cellStyles.horizontalAlignment)
339
+ ? true
340
+ : cellStyles.wrapStrategy
341
+ ? cellStyles.wrapStrategy === "wrap"
342
+ : undefined;
337
343
  var fontSize = (_d = cellStyles.textFormat) === null || _d === void 0 ? void 0 : _d.fontSize;
338
344
  var newCellDimension = getCellDimensions(sheetId, rowIndex, update.columnIndex, "x", {
339
345
  textOverride: formattedValue !== null && formattedValue !== void 0 ? formattedValue : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"change-batch.d.ts","sourceRoot":"","sources":["../../../interface/change-batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,QAAQ,EAER,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAiBnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAI1E,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,WAAW,GACtB,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,0VAoBC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE1B,SAAS,MAAM,EACf,QAAQ,SAAS,EAAE,GAAG,SAAS,EAC/B,QACI,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAClD,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,GACT,IAAI,EACR,aAAa,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9D,YAAY,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACvE,UAAS,kBAAuB,SAoZnC,CAAC"}
1
+ {"version":3,"file":"change-batch.d.ts","sourceRoot":"","sources":["../../../interface/change-batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,QAAQ,EAER,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAiBnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAI1E,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,WAAW,GACtB,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,0VAoBC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,MAE1B,SAAS,MAAM,EACf,QAAQ,SAAS,EAAE,GAAG,SAAS,EAC/B,QACI,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAClD,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,GACT,IAAI,EACR,aAAa,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9D,YAAY,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACvE,UAAS,kBAAuB,SA2ZnC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { __read, __values } from "tslib";
2
2
  import { DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT, MAX_COLUMN_COUNT, MAX_ROW_COUNT, } from "@rowsncolumns/utils";
3
- import { isNil } from "@rowsncolumns/utils";
3
+ import { alignmentImpliesWrap, isNil } from "@rowsncolumns/utils";
4
4
  import { produceWithPatches } from "immer";
5
5
  import { createSheetCellIdentifier } from "../api/formula";
6
6
  import { createSheetDraft } from "../api/immer-utils";
@@ -195,15 +195,22 @@ export var changeBatch = function (_a) {
195
195
  cellXfsRegistry === null || cellXfsRegistry === void 0 ? void 0 : cellXfsRegistry.getPatches(saveHistory);
196
196
  // Save shared strings patches
197
197
  sharedStringRegistry === null || sharedStringRegistry === void 0 ? void 0 : sharedStringRegistry.getPatches(saveHistory);
198
- // Update row heights when text format or wrapping changes
198
+ // Update row heights when text format or wrapping changes (Excel's
199
+ // justify / distributed alignments wrap implicitly)
200
+ var affectsRowHeight = function (cellFormat) {
201
+ return !!cellFormat &&
202
+ !!(cellFormat.textFormat ||
203
+ cellFormat.wrapStrategy ||
204
+ alignmentImpliesWrap(cellFormat.horizontalAlignment));
205
+ };
199
206
  var shouldUpdateRowHeights = false;
200
207
  if (Array.isArray(formatting)) {
201
208
  shouldUpdateRowHeights = formatting.some(function (row) {
202
- return row.some(function (cellFormat) { return (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.textFormat) || (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.wrapStrategy); });
209
+ return row.some(function (cellFormat) { return affectsRowHeight(cellFormat); });
203
210
  });
204
211
  }
205
212
  else {
206
- shouldUpdateRowHeights = !!((formatting === null || formatting === void 0 ? void 0 : formatting.textFormat) || (formatting === null || formatting === void 0 ? void 0 : formatting.wrapStrategy));
213
+ shouldUpdateRowHeights = affectsRowHeight(formatting);
207
214
  }
208
215
  if (shouldUpdateRowHeights) {
209
216
  onChangeSheets(function (prevSheets) {
@@ -243,8 +250,7 @@ export var changeBatch = function (_a) {
243
250
  var cellFormat = Array.isArray(formatting)
244
251
  ? formatting[rollingRowIndex][rollingColumnIndex]
245
252
  : formatting;
246
- if (!cellFormat ||
247
- (!cellFormat.textFormat && !cellFormat.wrapStrategy)) {
253
+ if (!affectsRowHeight(cellFormat)) {
248
254
  rollingColumnIndex++;
249
255
  continue;
250
256
  }
@@ -254,9 +260,11 @@ export var changeBatch = function (_a) {
254
260
  var formattedValue = !isNil(overrideValue) && overrideValue !== ""
255
261
  ? String(overrideValue)
256
262
  : getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, columnIndex);
257
- var shouldWrap = cellFormat.wrapStrategy
258
- ? cellFormat.wrapStrategy === "wrap"
259
- : undefined;
263
+ var shouldWrap = alignmentImpliesWrap(cellFormat.horizontalAlignment)
264
+ ? true
265
+ : cellFormat.wrapStrategy
266
+ ? cellFormat.wrapStrategy === "wrap"
267
+ : undefined;
260
268
  var fontSize = (_e = cellFormat.textFormat) === null || _e === void 0 ? void 0 : _e.fontSize;
261
269
  var newCellDimension = getCellDimensions === null || getCellDimensions === void 0 ? void 0 : getCellDimensions(sheetId, rowIndex, columnIndex, "x", {
262
270
  textOverride: formattedValue !== null && formattedValue !== void 0 ? formattedValue : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"change-formatting.d.ts","sourceRoot":"","sources":["../../../interface/change-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,cAAc,EACd,KAAK,EACN,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,0BAA0B,EAC3B,MAAM,mCAAmC,CAAC;AAG3C,eAAO,MAAM,gBAAgB,GAC3B,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,cAAc,EACxB,yKAWC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,MAE/B,GAAG,MAAM,UAAU,CACjB,+BAA+B,CAAC,CAAC,CAAC,GAAG,gCAAgC,CACtE,SAiTJ,CAAC"}
1
+ {"version":3,"file":"change-formatting.d.ts","sourceRoot":"","sources":["../../../interface/change-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,cAAc,EACd,KAAK,EACN,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,0BAA0B,EAC3B,MAAM,mCAAmC,CAAC;AA6B3C,eAAO,MAAM,gBAAgB,GAC3B,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,cAAc,EACxB,yKAWC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,MAE/B,GAAG,MAAM,UAAU,CACjB,+BAA+B,CAAC,CAAC,CAAC,GAAG,gCAAgC,CACtE,SAwSJ,CAAC"}
@@ -1,8 +1,30 @@
1
1
  import { __read, __values } from "tslib";
2
- import { isNil } from "@rowsncolumns/utils";
2
+ import { alignmentImpliesWrap, isNil } from "@rowsncolumns/utils";
3
3
  import { produceWithPatches } from "immer";
4
4
  import { createSheetDraft } from "../api/immer-utils";
5
5
  import { SheetCell } from "../sheet-cell";
6
+ /**
7
+ * Text format, wrap strategy and Excel's implicitly wrapping alignments
8
+ * (justify / distributed) all change how tall a row needs to be.
9
+ */
10
+ var affectsRowHeight = function (cellFormat) {
11
+ return !!cellFormat &&
12
+ !!(cellFormat.textFormat ||
13
+ cellFormat.wrapStrategy ||
14
+ alignmentImpliesWrap(cellFormat.horizontalAlignment));
15
+ };
16
+ /**
17
+ * `shouldWrapOverride` for the row measurement: the format being applied
18
+ * decides when it says anything about wrapping, otherwise the cell's stored
19
+ * format does (`undefined`).
20
+ */
21
+ var wrapOverrideFor = function (cellFormat) {
22
+ if (alignmentImpliesWrap(cellFormat.horizontalAlignment))
23
+ return true;
24
+ return cellFormat.wrapStrategy
25
+ ? cellFormat.wrapStrategy === "wrap"
26
+ : undefined;
27
+ };
6
28
  export var changeFormatting = function (_a) {
7
29
  var createHistory = _a.createHistory, getFormattedValue = _a.getFormattedValue, isMergedCell = _a.isMergedCell, onChangeSheetData = _a.onChangeSheetData, onChangeSheets = _a.onChangeSheets, getRowHeight = _a.getRowHeight, getCellDimensions = _a.getCellDimensions, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, getDataValidationById = _a.getDataValidationById;
8
30
  return function () {
@@ -125,16 +147,16 @@ export var changeFormatting = function (_a) {
125
147
  // Update row heights
126
148
  // When text format and wrap changes,
127
149
  // we have to resize the cells
128
- // Check if any cellFormat has textFormat or wrapStrategy
150
+ // Check if any cellFormat has textFormat, wrapStrategy or an alignment
151
+ // that wraps implicitly (Excel justify / distributed)
129
152
  var shouldUpdateRowHeights = false;
130
153
  if (Array.isArray(cellFormatOrCellFormatArray)) {
131
154
  shouldUpdateRowHeights = cellFormatOrCellFormatArray.some(function (row) {
132
- return row.some(function (cellFormat) { return (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.textFormat) || (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.wrapStrategy); });
155
+ return row.some(function (cellFormat) { return affectsRowHeight(cellFormat); });
133
156
  });
134
157
  }
135
158
  else {
136
- shouldUpdateRowHeights = !!((cellFormatOrCellFormatArray === null || cellFormatOrCellFormatArray === void 0 ? void 0 : cellFormatOrCellFormatArray.textFormat) ||
137
- (cellFormatOrCellFormatArray === null || cellFormatOrCellFormatArray === void 0 ? void 0 : cellFormatOrCellFormatArray.wrapStrategy));
159
+ shouldUpdateRowHeights = affectsRowHeight(cellFormatOrCellFormatArray);
138
160
  }
139
161
  if (shouldUpdateRowHeights) {
140
162
  onChangeSheets(function (prevSheets) {
@@ -171,9 +193,8 @@ export var changeFormatting = function (_a) {
171
193
  var cellFormat = Array.isArray(cellFormatOrCellFormatArray)
172
194
  ? cellFormatOrCellFormatArray[rollingRowIndex][rollingColumnIndex]
173
195
  : cellFormatOrCellFormatArray;
174
- // Skip if no cellFormat or no textFormat/wrapStrategy
175
- if (!cellFormat ||
176
- (!cellFormat.textFormat && !cellFormat.wrapStrategy)) {
196
+ // Skip if no cellFormat or nothing that changes the height
197
+ if (!affectsRowHeight(cellFormat)) {
177
198
  rollingColumnIndex++;
178
199
  continue;
179
200
  }
@@ -184,9 +205,7 @@ export var changeFormatting = function (_a) {
184
205
  continue;
185
206
  }
186
207
  var formattedValue = getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, columnIndex);
187
- var shouldWrap = cellFormat.wrapStrategy
188
- ? cellFormat.wrapStrategy === "wrap"
189
- : undefined;
208
+ var shouldWrap = wrapOverrideFor(cellFormat);
190
209
  var fontSize = (_d = cellFormat.textFormat) === null || _d === void 0 ? void 0 : _d.fontSize;
191
210
  var newCellDimension = getCellDimensions === null || getCellDimensions === void 0 ? void 0 : getCellDimensions(sheetId, rowIndex, columnIndex, "x", {
192
211
  textOverride: formattedValue !== null && formattedValue !== void 0 ? formattedValue : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"hide-column.d.ts","sourceRoot":"","sources":["../../../interface/hide-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAGR,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,uJAU9D,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,MACnB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SAyEjD,CAAC"}
1
+ {"version":3,"file":"hide-column.d.ts","sourceRoot":"","sources":["../../../interface/hide-column.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAGR,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,uJAU9D,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,MACnB,SAAS,MAAM,EAAE,eAAe,MAAM,EAAE,SA4EjD,CAAC"}
@@ -5,6 +5,10 @@ export var hideColumns = function (_a) {
5
5
  var getActiveCell = _a.getActiveCell, getSelections = _a.getSelections, onChangeActiveCell = _a.onChangeActiveCell, onChangeSelections = _a.onChangeSelections, onChangeSheets = _a.onChangeSheets, createHistory = _a.createHistory, rowCount = _a.rowCount, columnCount = _a.columnCount, getNextFocusableCell = _a.getNextFocusableCell;
6
6
  return function (sheetId, columnIndexes) {
7
7
  var _a;
8
+ // Nothing to hide: the next active cell / selection below would be
9
+ // computed from undefined bounds and land on NaN.
10
+ if (columnIndexes.length === 0)
11
+ return;
8
12
  var saveHistory = createHistory();
9
13
  var sortedColumnIndexes = __spreadArray([], __read(columnIndexes), false).sort(function (a, b) { return a - b; });
10
14
  var firstColumnIndex = sortedColumnIndexes[0];
@@ -1 +1 @@
1
- {"version":3,"file":"hide-row.d.ts","sourceRoot":"","sources":["../../../interface/hide-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAER,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAC1D,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MAcrB,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,SA8D9C,CAAC"}
1
+ {"version":3,"file":"hide-row.d.ts","sourceRoot":"","sources":["../../../interface/hide-row.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAER,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAC1D,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MAcrB,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,SAiE9C,CAAC"}
@@ -5,6 +5,10 @@ export var hideRows = function (deps) {
5
5
  var getActiveCell = deps.getActiveCell, getSelections = deps.getSelections, onChangeActiveCell = deps.onChangeActiveCell, onChangeSelections = deps.onChangeSelections, onChangeSheets = deps.onChangeSheets, createHistory = deps.createHistory, columnCount = deps.columnCount, rowCount = deps.rowCount, getNextFocusableCell = deps.getNextFocusableCell;
6
6
  return function (sheetId, rowIndexes) {
7
7
  var _a;
8
+ // Nothing to hide: the next active cell / selection below would be
9
+ // computed from undefined bounds and land on NaN.
10
+ if (rowIndexes.length === 0)
11
+ return;
8
12
  var saveHistory = createHistory();
9
13
  var sortedRowIndexes = __spreadArray([], __read(rowIndexes), false).sort(function (a, b) { return a - b; });
10
14
  var firstRowIndex = sortedRowIndexes[0];
@@ -1,5 +1,5 @@
1
1
  import type { CellInterface, SelectionArea } from "@rowsncolumns/common-types";
2
- import type { CellData, SelectionAttributes } from "@rowsncolumns/spreadsheet";
2
+ import type { CellData, RemoveDuplicatesOptions, SelectionAttributes } from "@rowsncolumns/spreadsheet";
3
3
  import type { UseOnRemoveDuplicatesProps } from "../hooks/use-on-remove-duplicates";
4
4
  export type RemoveDuplicatesResult = {
5
5
  /** Number of duplicate rows found and removed */
@@ -7,5 +7,6 @@ export type RemoveDuplicatesResult = {
7
7
  /** Number of unique rows that remain */
8
8
  uniqueRemaining: number;
9
9
  };
10
- export declare const removeDuplicates: <T extends CellData>({ getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, }: UseOnRemoveDuplicatesProps<T>) => (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[]) => RemoveDuplicatesResult;
10
+ export type { RemoveDuplicatesOptions };
11
+ export declare const removeDuplicates: <T extends CellData>({ getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, }: UseOnRemoveDuplicatesProps<T>) => (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], options?: RemoveDuplicatesOptions) => RemoveDuplicatesResult;
11
12
  //# sourceMappingURL=remove-duplicates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove-duplicates.d.ts","sourceRoot":"","sources":["../../../interface/remove-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAK/E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAGpF,MAAM,MAAM,sBAAsB,GAAG;IACnC,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,8EAKlD,0BAA0B,CAAC,CAAC,CAAC,MAE5B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,aAAa,aAAa,CAAC,mBAAmB,CAAC,EAAE,KAChD,sBA0JJ,CAAC"}
1
+ {"version":3,"file":"remove-duplicates.d.ts","sourceRoot":"","sources":["../../../interface/remove-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,QAAQ,EACR,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAGpF,MAAM,MAAM,sBAAsB,GAAG;IACnC,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAiCxC,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,QAAQ,EAAE,8EAKlD,0BAA0B,CAAC,CAAC,CAAC,MAE5B,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,aAAa,aAAa,CAAC,mBAAmB,CAAC,EAAE,EACjD,UAAU,uBAAuB,KAChC,sBAyKJ,CAAC"}