@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
@@ -1,9 +1,9 @@
1
1
  import { useCallback } from "react";
2
- import { removeDuplicates } from "../interface/remove-duplicates";
2
+ import { removeDuplicates, } from "../interface/remove-duplicates";
3
3
  import { useCanEditCellRange } from "./use-can-edit-cellrange";
4
4
  export const useOnRemoveDuplicates = ({ locale, cellXfsRegistry, sharedStringRegistry, getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, onCommand, }) => {
5
5
  const canEditCellRange = useCanEditCellRange();
6
- return useCallback((sheetId, activeCell, selections) => {
6
+ return useCallback((sheetId, activeCell, selections, options) => {
7
7
  if (!canEditCellRange(sheetId, activeCell)) {
8
8
  console.debug("This range is protected, users cannot edit this cell range.");
9
9
  return;
@@ -16,13 +16,15 @@ export const useOnRemoveDuplicates = ({ locale, cellXfsRegistry, sharedStringReg
16
16
  onChangeSheetData,
17
17
  enqueueCalculation,
18
18
  createHistory,
19
- })(sheetId, activeCell, selections);
19
+ })(sheetId, activeCell, selections, options);
20
20
  // Stream the semantic command so an engine consumer recomputes from the deduped cells.
21
21
  onCommand?.({
22
22
  command: "remove-duplicates",
23
23
  sheetId,
24
24
  activeCell,
25
25
  selections: selections ?? [],
26
+ columnIndices: options?.columnIndices,
27
+ hasHeader: options?.hasHeader,
26
28
  });
27
29
  return result;
28
30
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-show-column.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-show-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EACV,QAAQ,EAER,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC/D,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,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iGAOlE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMf,MAAM,iBAAiB,MAAM,EAAE,SAwF5C,CAAC"}
1
+ {"version":3,"file":"use-on-show-column.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-show-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EACV,QAAQ,EAER,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC/D,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,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,iGAOlE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMf,MAAM,iBAAiB,MAAM,EAAE,SAyF5C,CAAC"}
@@ -21,6 +21,8 @@ export const useOnShowColumn = ({ createHistory, onChangeActiveCell, onChangeSel
21
21
  });
22
22
  return;
23
23
  }
24
+ if (columnIndexes.length === 0)
25
+ return;
24
26
  const saveHistory = createHistory();
25
27
  const firstColumnIndex = columnIndexes[0];
26
28
  const newActiveCell = getNextFocusableCell?.(sheetId, { rowIndex: 0, columnIndex: firstColumnIndex }, Direction.Down, false) ?? { rowIndex: 1, columnIndex: firstColumnIndex };
@@ -1 +1 @@
1
- {"version":3,"file":"use-on-show-row.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-show-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EACV,QAAQ,EAER,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AASnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC5D,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,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,2HAQ/D,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMZ,MAAM,cAAc,MAAM,EAAE,SA4FzC,CAAC"}
1
+ {"version":3,"file":"use-on-show-row.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-show-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EACV,QAAQ,EAER,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AASnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC5D,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,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,2HAQ/D,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMZ,MAAM,cAAc,MAAM,EAAE,SA6FzC,CAAC"}
@@ -21,6 +21,8 @@ export const useOnShowRow = ({ createHistory, onChangeActiveCell, onChangeSelect
21
21
  });
22
22
  return;
23
23
  }
24
+ if (rowIndexes.length === 0)
25
+ return;
24
26
  const saveHistory = createHistory();
25
27
  const firstRowIndex = rowIndexes[0];
26
28
  const newActiveCell = getNextFocusableCell?.(sheetId, { rowIndex: firstRowIndex, columnIndex: 0 }, Direction.Right, false) ?? { rowIndex: firstRowIndex, columnIndex: 1 };
@@ -0,0 +1,26 @@
1
+ import type { GridRange } from "@rowsncolumns/common-types";
2
+ import { type SubtotalOptions, type SubtotalPlan, type SubtotalPlanExecutor } from "../api/subtotal";
3
+ import type { useSheetProperties } from "./use-sheet-properties";
4
+ export type { SubtotalOptions, SubtotalPlan };
5
+ export type UseOnSubtotalProps = {
6
+ getEffectiveValue: ReturnType<typeof useSheetProperties>["getEffectiveValue"];
7
+ getFormattedValue: ReturnType<typeof useSheetProperties>["getFormattedValue"];
8
+ getFormulaValue: ReturnType<typeof useSheetProperties>["getFormulaValue"];
9
+ getRowOutlineLevel: ReturnType<typeof useSheetProperties>["getRowOutlineLevel"];
10
+ onDeleteRow: SubtotalPlanExecutor["onDeleteRow"];
11
+ onInsertRow: SubtotalPlanExecutor["onInsertRow"];
12
+ onChangeBatch: (sheetId: number, ranges: GridRange, values: (string | null)[][]) => void;
13
+ onGroupRows: SubtotalPlanExecutor["onGroupRows"];
14
+ onUngroupRows: SubtotalPlanExecutor["onUngroupRows"];
15
+ };
16
+ /**
17
+ * Excel's Data → Outline → Subtotal, composed over the existing row
18
+ * insert / batch write / row grouping callbacks so both engines execute it
19
+ * through the same streamed commands (see `planSubtotals` for the layout).
20
+ * Groups on the DISPLAYED value of the group column (Excel compares what the
21
+ * cells show). "Replace current subtotals" also resets the range's outline
22
+ * before regrouping, so re-applying keeps Excel's three levels. Returns the
23
+ * applied plan, or `undefined` when the range is protected or has no data rows.
24
+ */
25
+ export declare const useOnSubtotal: ({ getEffectiveValue, getFormattedValue, getFormulaValue, getRowOutlineLevel, onDeleteRow, onInsertRow, onChangeBatch, onGroupRows, onUngroupRows, }: UseOnSubtotalProps) => (sheetId: number, options: SubtotalOptions) => SubtotalPlan | undefined;
26
+ //# sourceMappingURL=use-on-subtotal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-on-subtotal.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-subtotal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,eAAe,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC1E,kBAAkB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAChF,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KACxB,IAAI,CAAC;IACV,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,qJAU3B,kBAAkB,eAIP,MAAM,WAAW,eAAe,KAAG,YAAY,GAAG,SAoC/D,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { useCallback } from "react";
2
+ import { applySubtotalPlan, planSubtotals, } from "../api/subtotal";
3
+ import { useCanEditCellRange } from "./use-can-edit-cellrange";
4
+ /**
5
+ * Excel's Data → Outline → Subtotal, composed over the existing row
6
+ * insert / batch write / row grouping callbacks so both engines execute it
7
+ * through the same streamed commands (see `planSubtotals` for the layout).
8
+ * Groups on the DISPLAYED value of the group column (Excel compares what the
9
+ * cells show). "Replace current subtotals" also resets the range's outline
10
+ * before regrouping, so re-applying keeps Excel's three levels. Returns the
11
+ * applied plan, or `undefined` when the range is protected or has no data rows.
12
+ */
13
+ export const useOnSubtotal = ({ getEffectiveValue, getFormattedValue, getFormulaValue, getRowOutlineLevel, onDeleteRow, onInsertRow, onChangeBatch, onGroupRows, onUngroupRows, }) => {
14
+ const canEditCellRange = useCanEditCellRange();
15
+ return useCallback((sheetId, options) => {
16
+ if (!canEditCellRange(sheetId, options.range)) {
17
+ console.debug("This range is protected, users cannot edit this cell range.");
18
+ return undefined;
19
+ }
20
+ const plan = planSubtotals(options, {
21
+ getValue: (rowIndex, columnIndex) => getFormattedValue(sheetId, rowIndex, columnIndex) ??
22
+ getEffectiveValue(sheetId, rowIndex, columnIndex),
23
+ getFormula: (rowIndex, columnIndex) => getFormulaValue(sheetId, rowIndex, columnIndex),
24
+ getOutlineLevel: (rowIndex) => getRowOutlineLevel(sheetId, rowIndex),
25
+ });
26
+ if (!plan)
27
+ return undefined;
28
+ applySubtotalPlan(sheetId, plan, {
29
+ onDeleteRow,
30
+ onInsertRow,
31
+ onChangeBatch,
32
+ onGroupRows,
33
+ onUngroupRows,
34
+ });
35
+ return plan;
36
+ }, [
37
+ canEditCellRange,
38
+ getEffectiveValue,
39
+ getFormattedValue,
40
+ getFormulaValue,
41
+ getRowOutlineLevel,
42
+ onDeleteRow,
43
+ onInsertRow,
44
+ onChangeBatch,
45
+ onGroupRows,
46
+ onUngroupRows,
47
+ ]);
48
+ };
@@ -1,5 +1,5 @@
1
- import type { CellInterface, SelectionArea } from "@rowsncolumns/common-types";
2
- import type { SelectionAttributes, SheetRange } from "@rowsncolumns/spreadsheet";
1
+ import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/common-types";
2
+ import type { CellFormat, SelectionAttributes, SheetRange } from "@rowsncolumns/spreadsheet";
3
3
  import type { useOnChangeFormatting } from "./use-on-change-formatting";
4
4
  import type { useSheetProperties } from "./use-sheet-properties";
5
5
  import type { useSheetState } from "./use-sheet-state";
@@ -7,8 +7,24 @@ export type UsePaintFormatProps = {
7
7
  onChangeSelections: ReturnType<typeof useSheetState>["onChangeSelections"];
8
8
  onChangeFormatting: ReturnType<typeof useOnChangeFormatting>["onChangeFormatting"];
9
9
  getEffectiveFormat: ReturnType<typeof useSheetProperties>["getEffectiveFormat"];
10
+ /**
11
+ * The merges of a sheet (absolute ranges). When provided, the painter carries the merges that
12
+ * lie fully inside the source block and tiles them onto the target (Sheets / Excel parity).
13
+ */
14
+ getMerges?: (sheetId: number) => GridRange[] | null | undefined;
15
+ /**
16
+ * Replace the merges inside `targetRange` with `merges` (already tiled, absolute). The
17
+ * spreadsheet-state wiring unmerges the target then merges each range in one step.
18
+ */
19
+ onPaintMerges?: (sheetId: number, activeCell: CellInterface, targetRange: GridRange, merges: GridRange[]) => void;
20
+ /**
21
+ * The table-banding / alternating-colour formats the grid paints on a sheet (keyed by
22
+ * `cellIdentifier`). When provided, the captured pattern carries the visible stripe colours as
23
+ * static fills, like Sheets.
24
+ */
25
+ getBandedCells?: (sheetId: number) => Map<string, CellFormat> | undefined;
10
26
  };
11
- export declare const usePaintFormat: ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, }: UsePaintFormatProps) => {
27
+ export declare const usePaintFormat: ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, getMerges, onPaintMerges, getBandedCells, }: UsePaintFormatProps) => {
12
28
  isPaintFormatActive: boolean;
13
29
  onSavePaintFormat: (sheetId: number, activeCell: CellInterface, selections: SelectionArea<SelectionAttributes>[]) => void;
14
30
  onApplyPaintFormat: (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"use-paint-format.d.ts","sourceRoot":"","sources":["../../../hooks/use-paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EAEV,mBAAmB,EACnB,UAAU,EACX,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,kBAAkB,EAAE,UAAU,CAC5B,OAAO,qBAAqB,CAC7B,CAAC,oBAAoB,CAAC,CAAC;IACxB,kBAAkB,EAAE,UAAU,CAC5B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;CACzB,CAAC;AAMF,eAAO,MAAM,cAAc,GAAI,iEAI5B,mBAAmB;;iCAOP,MAAM,cACH,aAAa,cACb,aAAa,CAAC,mBAAmB,CAAC,EAAE;kCAiCvC,MAAM,cACH,aAAa,eACZ,aAAa,CAAC,mBAAmB,CAAC,EAAE;oCAsE/B,UAAU,oBAIV,UAAU;CAgDjC,CAAC"}
1
+ {"version":3,"file":"use-paint-format.d.ts","sourceRoot":"","sources":["../../../hooks/use-paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,UAAU,EACX,MAAM,2BAA2B,CAAC;AAUnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,kBAAkB,EAAE,UAAU,CAC5B,OAAO,qBAAqB,CAC7B,CAAC,oBAAoB,CAAC,CAAC;IACxB,kBAAkB,EAAE,UAAU,CAC5B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,SAAS,EAAE,KAChB,IAAI,CAAC;IACV;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;CAC3E,CAAC;AAaF,eAAO,MAAM,cAAc,GAAI,2GAO5B,mBAAmB;;iCA4EP,MAAM,cACH,aAAa,cACb,aAAa,CAAC,mBAAmB,CAAC,EAAE;kCAkBvC,MAAM,cACH,aAAa,eACZ,aAAa,CAAC,mBAAmB,CAAC,EAAE;oCAkF/B,UAAU,oBAIV,UAAU;CAmCjC,CAAC"}
@@ -1,26 +1,64 @@
1
1
  import { selectionFromActiveCell } from "@rowsncolumns/grid";
2
2
  import { useCallback, useState } from "react";
3
+ import { collectPaintMerges, getBandedCellFormat, layerBandedFormat, tilePaintMerges, } from "../api/paint-format";
3
4
  // A paint-format target spanning at least this many rows/cols is a header-click
4
5
  // full-column/row selection, not an intentional drag — bound it to the pattern.
5
6
  const UNBOUNDED_PAINT_SPAN = 10_000;
6
- export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, }) => {
7
- const [paintFormats, setPaintFormats] = useState([]);
8
- const onSavePaintFormat = useCallback((sheetId, activeCell, selections) => {
9
- const finalSelections = selections.length
10
- ? selections
11
- : selectionFromActiveCell(activeCell);
12
- const paintFormats = [];
13
- for (const sel of finalSelections) {
14
- for (let rowIndex = sel.range.startRowIndex; rowIndex <= sel.range.endRowIndex; rowIndex++) {
7
+ const EMPTY_PATTERN = {
8
+ formats: [],
9
+ merges: [],
10
+ rows: 0,
11
+ cols: 0,
12
+ };
13
+ export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChangeSelections, getMerges, onPaintMerges, getBandedCells, }) => {
14
+ const [pattern, setPattern] = useState(EMPTY_PATTERN);
15
+ const paintFormats = pattern.formats;
16
+ /**
17
+ * Capture the visible look of `range`: the effective format of every cell layered over the
18
+ * table stripe the grid paints beneath it, plus the merges fully inside the range.
19
+ */
20
+ const capturePattern = useCallback((sheetId, ranges) => {
21
+ const bandedCells = getBandedCells?.(sheetId);
22
+ const formats = [];
23
+ for (const range of ranges) {
24
+ for (let rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
15
25
  const rowFormats = [];
16
- for (let columnIndex = sel.range.startColumnIndex; columnIndex <= sel.range.endColumnIndex; columnIndex++) {
17
- rowFormats.push(getEffectiveFormat(sheetId, rowIndex, columnIndex));
26
+ for (let columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
27
+ rowFormats.push(layerBandedFormat(getEffectiveFormat(sheetId, rowIndex, columnIndex), getBandedCellFormat(bandedCells, rowIndex, columnIndex)));
18
28
  }
19
- paintFormats.push(rowFormats);
29
+ formats.push(rowFormats);
20
30
  }
21
31
  }
22
- setPaintFormats(paintFormats);
23
- }, [getEffectiveFormat]);
32
+ // Merges travel with a single-block source only; a multi-area capture has no single
33
+ // tiling origin (the format rows are stacked, as before).
34
+ const source = ranges.length === 1 ? ranges[0] : undefined;
35
+ const merges = source
36
+ ? collectPaintMerges(getMerges?.(sheetId), source)
37
+ : [];
38
+ return {
39
+ formats,
40
+ merges,
41
+ rows: formats.length,
42
+ cols: formats[0]?.length ?? 0,
43
+ };
44
+ }, [getEffectiveFormat, getBandedCells, getMerges]);
45
+ /**
46
+ * Replace the target's merges with the pattern's, tiled with the pattern's period.
47
+ */
48
+ const applyPatternMerges = useCallback((sheetId, activeCell, current, targets) => {
49
+ if (!current.merges.length || !onPaintMerges)
50
+ return;
51
+ for (const target of targets) {
52
+ const tiled = tilePaintMerges(current.merges, current.rows, current.cols, target);
53
+ onPaintMerges(sheetId, activeCell, target, tiled);
54
+ }
55
+ }, [onPaintMerges]);
56
+ const onSavePaintFormat = useCallback((sheetId, activeCell, selections) => {
57
+ const finalSelections = selections.length
58
+ ? selections
59
+ : selectionFromActiveCell(activeCell);
60
+ setPattern(capturePattern(sheetId, finalSelections.map((sel) => sel.range)));
61
+ }, [capturePattern]);
24
62
  // Applies a saved paintFormat
25
63
  const onApplyPaintFormat = useCallback((sheetId, activeCell, selections) => {
26
64
  /**
@@ -32,9 +70,7 @@ export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChang
32
70
  // `changeFormatting` repeats the grid via its rolling indices). Only
33
71
  // header-click full-column/row targets are bounded to the pattern so a paint
34
72
  // never enumerates an entire 1M-row column.
35
- const clampEnd = (start, end, span) => end - start >= UNBOUNDED_PAINT_SPAN
36
- ? Math.min(end, start + span)
37
- : end;
73
+ const clampEnd = (start, end, span) => end - start >= UNBOUNDED_PAINT_SPAN ? Math.min(end, start + span) : end;
38
74
  const newSelections = selections?.length
39
75
  ? selections.map((sel) => ({
40
76
  ...sel,
@@ -58,6 +94,8 @@ export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChang
58
94
  onChangeFormatting(sheetId, activeCell, newSelections, paintFormats, {
59
95
  replace: true,
60
96
  });
97
+ // Merges tile with the same period as the formats.
98
+ applyPatternMerges(sheetId, activeCell, pattern, newSelections.map((sel) => sel.range));
61
99
  /**
62
100
  * User has made selections. lets preserve it
63
101
  */
@@ -65,8 +103,14 @@ export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChang
65
103
  onChangeSelections?.(sheetId, newSelections);
66
104
  }
67
105
  // Reset paintformats
68
- setPaintFormats([]);
69
- }, [paintFormats, onChangeSelections, onChangeFormatting]);
106
+ setPattern(EMPTY_PATTERN);
107
+ }, [
108
+ pattern,
109
+ paintFormats,
110
+ onChangeSelections,
111
+ onChangeFormatting,
112
+ applyPatternMerges,
113
+ ]);
70
114
  /**
71
115
  * Copy formatting from a source range to target range
72
116
  */
@@ -79,24 +123,22 @@ export const usePaintFormat = ({ getEffectiveFormat, onChangeFormatting, onChang
79
123
  * Sheet range to paste to
80
124
  */
81
125
  targetSheetRange) => {
82
- const paintFormats = [];
83
- for (let rowIndex = sourceSheetRange.startRowIndex; rowIndex <= sourceSheetRange.endRowIndex; rowIndex++) {
84
- const rowFormats = [];
85
- for (let columnIndex = sourceSheetRange.startColumnIndex; columnIndex <= sourceSheetRange.endColumnIndex; columnIndex++) {
86
- rowFormats.push(getEffectiveFormat(sourceSheetRange.sheetId, rowIndex, columnIndex));
87
- }
88
- paintFormats.push(rowFormats);
89
- }
126
+ const captured = capturePattern(sourceSheetRange.sheetId, [
127
+ sourceSheetRange,
128
+ ]);
90
129
  // Apply
91
130
  const activeCell = {
92
131
  rowIndex: targetSheetRange.startRowIndex,
93
132
  columnIndex: targetSheetRange.startColumnIndex,
94
133
  };
95
134
  // Copy formatting
96
- onChangeFormatting(targetSheetRange.sheetId, activeCell, [{ range: targetSheetRange }], paintFormats, {
135
+ onChangeFormatting(targetSheetRange.sheetId, activeCell, [{ range: targetSheetRange }], captured.formats, {
97
136
  replace: true,
98
137
  });
99
- }, [onChangeFormatting, getEffectiveFormat]);
138
+ applyPatternMerges(targetSheetRange.sheetId, activeCell, captured, [
139
+ targetSheetRange,
140
+ ]);
141
+ }, [onChangeFormatting, capturePattern, applyPatternMerges]);
100
142
  return {
101
143
  isPaintFormatActive: paintFormats.length > 0,
102
144
  onSavePaintFormat,
@@ -49,6 +49,7 @@ export type UseSheetPropertiesProps<T extends CellData, S extends Sheet> = {
49
49
  getPrecedents?: (cell: FormulaPosition) => FormulaPrecedents;
50
50
  };
51
51
  export declare const useSheetProperties: <T extends CellData = CellData, S extends Sheet = Sheet>({ conditionalFormats, sheetData, sheets, activeSheetId, dataValidations, protectFormulas, getEffectiveStructuredValue, cellXfs, cellXfsRegistry, cellStyles, sharedStrings, locale, use1904, lenientGrouping, getPrecedents, }: UseSheetPropertiesProps<T, S>) => {
52
+ getFormulaValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined;
52
53
  getDataRowCount: (sheetId?: number) => number | undefined;
53
54
  getNonEmptyRowCount: (sheetId: number) => number | undefined;
54
55
  getNonEmptyColumnCount: (sheetId: number, rowIndex: number) => number | undefined;
@@ -56,6 +57,7 @@ export declare const useSheetProperties: <T extends CellData = CellData, S exten
56
57
  getSheetName: (sheetId: number) => string;
57
58
  getSheetCount: () => number;
58
59
  getSheetIndex: (sheetName?: string) => number | undefined;
60
+ getSheetNames: () => string[];
59
61
  getSheetProperties: (sheetId: number) => SheetProperty | undefined;
60
62
  getCellData: (sheetId: number, rowIndex: number, columnIndex: number) => T | null | undefined;
61
63
  getMentionsFromCell: (sheetId: number, rowIndex: number, columnIndex: number) => {
@@ -86,6 +88,7 @@ export declare const useSheetProperties: <T extends CellData = CellData, S exten
86
88
  getFormulasFromRange: (sheetRange: SheetRange, hiddenDimensionStategy?: HIDDEN_DIMENSION_STRATEGY) => (string | undefined)[];
87
89
  isHiddenRow: (sheetId: number, rowIndex: number) => boolean;
88
90
  isHiddenByFilterRow: (sheetId: number, rowIndex: number) => boolean;
91
+ getRowOutlineLevel: (sheetId: number, rowIndex: number) => number;
89
92
  getSheetRowCount: (sheetId: number) => number;
90
93
  getSheetColumnCount: (sheetId: number) => number;
91
94
  getColumnWidth: (sheetId: number, columnIndex: number) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"use-sheet-properties.d.ts","sourceRoot":"","sources":["../../../hooks/use-sheet-properties.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-sheet-properties.d.ts","sourceRoot":"","sources":["../../../hooks/use-sheet-properties.ts"],"names":[],"mappings":"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"}
@@ -226,6 +226,8 @@ export const useSheetProperties = ({ conditionalFormats, sheetData, sheets, acti
226
226
  const metaData = sheetMetaDataById.get(sheetId)?.rowMetadata?.[rowIndex];
227
227
  return Boolean(metaData?.hiddenByUser || metaData?.hiddenByFilter);
228
228
  }, [sheetMetaDataById]);
229
+ // Outline (row grouping) level, 0 when the row is not grouped
230
+ const getRowOutlineLevel = useCallback((sheetId, rowIndex) => sheetMetaDataById.get(sheetId)?.rowMetadata?.[rowIndex]?.outlineLevel ?? 0, [sheetMetaDataById]);
229
231
  // Hidden by filter row
230
232
  const isHiddenByFilterRow = useCallback((sheetId, rowIndex) => {
231
233
  const metaData = sheetMetaDataById.get(sheetId)?.rowMetadata?.[rowIndex];
@@ -253,6 +255,9 @@ export const useSheetProperties = ({ conditionalFormats, sheetData, sheets, acti
253
255
  });
254
256
  return map;
255
257
  }, [sheets]);
258
+ // Sheet names in tab order — resolves 3-D references (`Sheet1:Sheet3!A1`)
259
+ const orderedSheetNames = useMemo(() => sortSheetsByIndex(sheets, true).map((sheet) => sheet.title), [sheets]);
260
+ const getSheetNames = useCallbackRef(useCallback(() => orderedSheetNames, [orderedSheetNames]));
256
261
  // For calculator
257
262
  const getSheetIndex = useCallbackRef(useCallback((sheetName) => {
258
263
  const resolvedName = sheetName ?? sheetnameBySheetId.get(activeSheetId);
@@ -864,6 +869,7 @@ export const useSheetProperties = ({ conditionalFormats, sheetData, sheets, acti
864
869
  return columnarData;
865
870
  }, [getEffectiveValue, getFormattedValue]));
866
871
  return {
872
+ getFormulaValue,
867
873
  getDataRowCount,
868
874
  getNonEmptyRowCount,
869
875
  getNonEmptyColumnCount,
@@ -871,6 +877,7 @@ export const useSheetProperties = ({ conditionalFormats, sheetData, sheets, acti
871
877
  getSheetName,
872
878
  getSheetCount,
873
879
  getSheetIndex,
880
+ getSheetNames,
874
881
  getSheetProperties,
875
882
  getCellData,
876
883
  getMentionsFromCell,
@@ -894,6 +901,7 @@ export const useSheetProperties = ({ conditionalFormats, sheetData, sheets, acti
894
901
  getFormulasFromRange,
895
902
  isHiddenRow,
896
903
  isHiddenByFilterRow,
904
+ getRowOutlineLevel,
897
905
  getSheetRowCount,
898
906
  getSheetColumnCount,
899
907
  getColumnWidth,
@@ -1,5 +1,6 @@
1
1
  import type { CellInterface, SelectionArea } from "@rowsncolumns/common-types";
2
2
  import type { CellData, SelectionAttributes, Sheet } from "@rowsncolumns/spreadsheet";
3
+ import type { SplitTextOptions } from "../api/split-text";
3
4
  import type { useCalculation } from "./use-calculation";
4
5
  import type { useSheetProperties } from "./use-sheet-properties";
5
6
  import type { useSheetState } from "./use-sheet-state";
@@ -15,5 +16,5 @@ export type UseSplitTextToColumnsProps<T extends CellData, S extends Sheet> = {
15
16
  onChangeSelections: ReturnType<typeof useSheetState>["onChangeSelections"];
16
17
  onCommand?: OnCommand;
17
18
  };
18
- export declare const useSplitTextToColumns: <T extends CellData, S extends Sheet>({ locale, getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, onChangeSelections, onCommand, }: UseSplitTextToColumnsProps<T, S>) => (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], delimiter?: string) => void;
19
+ export declare const useSplitTextToColumns: <T extends CellData, S extends Sheet>({ locale, getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, onChangeSelections, onCommand, }: UseSplitTextToColumnsProps<T, S>) => (sheetId: number, activeCell: CellInterface, selections?: SelectionArea<SelectionAttributes>[], delimiter?: string, options?: SplitTextOptions) => void;
19
20
  //# sourceMappingURL=use-split-text-to-columns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-split-text-to-columns.d.ts","sourceRoot":"","sources":["../../../hooks/use-split-text-to-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qHAQxE,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,eAGpB,MAAM,cACH,aAAa,eACZ,aAAa,CAAC,mBAAmB,CAAC,EAAE,6BA+BtD,CAAC"}
1
+ {"version":3,"file":"use-split-text-to-columns.d.ts","sourceRoot":"","sources":["../../../hooks/use-split-text-to-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACN,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC9E,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,qHAQxE,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,eAGpB,MAAM,cACH,aAAa,eACZ,aAAa,CAAC,mBAAmB,CAAC,EAAE,gCAEvC,gBAAgB,SA+B/B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { useCallback } from "react";
2
2
  import { splitText } from "../interface/split-text";
3
3
  export const useSplitTextToColumns = ({ locale, getFormattedValue, onChangeSheetData, enqueueCalculation, createHistory, onChangeSelections, onCommand, }) => {
4
- return useCallback((sheetId, activeCell, selections, delimiter = ",") => {
4
+ return useCallback((sheetId, activeCell, selections, delimiter = ",", options) => {
5
5
  splitText({
6
6
  locale,
7
7
  getFormattedValue,
@@ -9,7 +9,7 @@ export const useSplitTextToColumns = ({ locale, getFormattedValue, onChangeSheet
9
9
  onChangeSheetData,
10
10
  createHistory,
11
11
  onChangeSelections,
12
- })(sheetId, activeCell, selections, delimiter);
12
+ })(sheetId, activeCell, selections, delimiter, options);
13
13
  // Stream the semantic command so an engine consumer re-splits + recomputes.
14
14
  onCommand?.({
15
15
  command: "split-text-to-columns",
@@ -17,6 +17,7 @@ export const useSplitTextToColumns = ({ locale, getFormattedValue, onChangeSheet
17
17
  activeCell,
18
18
  selections: selections ?? [],
19
19
  delimiter,
20
+ columnBreaks: options?.columnBreaks,
20
21
  });
21
22
  }, [
22
23
  locale,