@rowsncolumns/spreadsheet-state 29.0.0 → 29.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. package/dist/cjs/api/anchored-objects.d.ts +122 -6
  2. package/dist/cjs/api/anchored-objects.d.ts.map +1 -1
  3. package/dist/cjs/api/anchored-objects.js +464 -43
  4. package/dist/cjs/api/copy-paste.d.ts +1 -2
  5. package/dist/cjs/api/copy-paste.d.ts.map +1 -1
  6. package/dist/cjs/api/copy-paste.js +1 -3
  7. package/dist/cjs/api/filter.d.ts +15 -1
  8. package/dist/cjs/api/filter.d.ts.map +1 -1
  9. package/dist/cjs/api/filter.js +32 -2
  10. package/dist/cjs/api/formula.d.ts +63 -0
  11. package/dist/cjs/api/formula.d.ts.map +1 -1
  12. package/dist/cjs/api/formula.js +278 -8
  13. package/dist/cjs/api/paint-format.d.ts +22 -1
  14. package/dist/cjs/api/paint-format.d.ts.map +1 -1
  15. package/dist/cjs/api/paint-format.js +57 -1
  16. package/dist/cjs/api/sort.d.ts +23 -1
  17. package/dist/cjs/api/sort.d.ts.map +1 -1
  18. package/dist/cjs/api/sort.js +52 -6
  19. package/dist/cjs/api/structural-guards.d.ts +57 -0
  20. package/dist/cjs/api/structural-guards.d.ts.map +1 -1
  21. package/dist/cjs/api/structural-guards.js +93 -1
  22. package/dist/cjs/api/structural-table-refs.d.ts +58 -3
  23. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
  24. package/dist/cjs/api/structural-table-refs.js +177 -16
  25. package/dist/cjs/api/table.d.ts +26 -2
  26. package/dist/cjs/api/table.d.ts.map +1 -1
  27. package/dist/cjs/api/table.js +93 -60
  28. package/dist/cjs/api/validation.d.ts.map +1 -1
  29. package/dist/cjs/api/validation.js +53 -8
  30. package/dist/cjs/atoms/creating-table.atom.d.ts +22 -0
  31. package/dist/cjs/atoms/creating-table.atom.d.ts.map +1 -0
  32. package/dist/cjs/atoms/creating-table.atom.js +4 -0
  33. package/dist/cjs/atoms/dialog-state.atom.d.ts +8 -0
  34. package/dist/cjs/atoms/dialog-state.atom.d.ts.map +1 -1
  35. package/dist/cjs/atoms/dialog-state.atom.js +28 -0
  36. package/dist/cjs/atoms/editing-slicer.atom.d.ts +9 -0
  37. package/dist/cjs/atoms/editing-slicer.atom.d.ts.map +1 -0
  38. package/dist/cjs/atoms/editing-slicer.atom.js +6 -0
  39. package/dist/cjs/atoms/index.d.ts +4 -0
  40. package/dist/cjs/atoms/index.d.ts.map +1 -1
  41. package/dist/cjs/atoms/index.js +4 -0
  42. package/dist/cjs/atoms/inserting-slicer.atom.d.ts +8 -0
  43. package/dist/cjs/atoms/inserting-slicer.atom.d.ts.map +1 -0
  44. package/dist/cjs/atoms/inserting-slicer.atom.js +5 -0
  45. package/dist/cjs/atoms/resizing-table.atom.d.ts +8 -0
  46. package/dist/cjs/atoms/resizing-table.atom.d.ts.map +1 -0
  47. package/dist/cjs/atoms/resizing-table.atom.js +5 -0
  48. package/dist/cjs/commands.d.ts +129 -2
  49. package/dist/cjs/commands.d.ts.map +1 -1
  50. package/dist/cjs/components/editors/embed-editor.d.ts +4 -2
  51. package/dist/cjs/components/editors/embed-editor.d.ts.map +1 -1
  52. package/dist/cjs/components/editors/embed-editor.js +38 -9
  53. package/dist/cjs/components/editors/slicer-editor.d.ts +15 -0
  54. package/dist/cjs/components/editors/slicer-editor.d.ts.map +1 -0
  55. package/dist/cjs/components/editors/slicer-editor.js +87 -0
  56. package/dist/cjs/components/editors/table-editor.d.ts +58 -2
  57. package/dist/cjs/components/editors/table-editor.d.ts.map +1 -1
  58. package/dist/cjs/components/editors/table-editor.js +261 -20
  59. package/dist/cjs/components/index.d.ts +1 -0
  60. package/dist/cjs/components/index.d.ts.map +1 -1
  61. package/dist/cjs/components/index.js +1 -0
  62. package/dist/cjs/constants.d.ts +9 -1
  63. package/dist/cjs/constants.d.ts.map +1 -1
  64. package/dist/cjs/constants.js +12 -0
  65. package/dist/cjs/generated-names.d.ts +13 -3
  66. package/dist/cjs/generated-names.d.ts.map +1 -1
  67. package/dist/cjs/generated-names.js +3 -1
  68. package/dist/cjs/helpers.d.ts +5 -0
  69. package/dist/cjs/helpers.d.ts.map +1 -1
  70. package/dist/cjs/helpers.js +10 -1
  71. package/dist/cjs/hooks/use-on-change-batch.d.ts +19 -2
  72. package/dist/cjs/hooks/use-on-change-batch.d.ts.map +1 -1
  73. package/dist/cjs/hooks/use-on-change-batch.js +43 -35
  74. package/dist/cjs/hooks/use-on-change-calculated-column.d.ts +10 -1
  75. package/dist/cjs/hooks/use-on-change-calculated-column.d.ts.map +1 -1
  76. package/dist/cjs/hooks/use-on-change-calculated-column.js +17 -5
  77. package/dist/cjs/hooks/use-on-change-table-column.d.ts +6 -1
  78. package/dist/cjs/hooks/use-on-change-table-column.d.ts.map +1 -1
  79. package/dist/cjs/hooks/use-on-change-table-column.js +17 -5
  80. package/dist/cjs/hooks/use-on-change.d.ts +36 -3
  81. package/dist/cjs/hooks/use-on-change.d.ts.map +1 -1
  82. package/dist/cjs/hooks/use-on-change.js +218 -136
  83. package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts +17 -0
  84. package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
  85. package/dist/cjs/hooks/use-on-create-custom-table-style.js +28 -0
  86. package/dist/cjs/hooks/use-on-create-named-range.d.ts +4 -2
  87. package/dist/cjs/hooks/use-on-create-named-range.d.ts.map +1 -1
  88. package/dist/cjs/hooks/use-on-create-named-range.js +11 -1
  89. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
  90. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  91. package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +3 -1
  92. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
  93. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  94. package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +3 -1
  95. package/dist/cjs/hooks/use-on-delete-column.d.ts +2 -1
  96. package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
  97. package/dist/cjs/hooks/use-on-delete-column.js +3 -1
  98. package/dist/cjs/hooks/use-on-delete-row.d.ts +2 -1
  99. package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
  100. package/dist/cjs/hooks/use-on-delete-row.js +3 -1
  101. package/dist/cjs/hooks/use-on-delete-sheet.d.ts +9 -1
  102. package/dist/cjs/hooks/use-on-delete-sheet.d.ts.map +1 -1
  103. package/dist/cjs/hooks/use-on-delete-sheet.js +17 -1
  104. package/dist/cjs/hooks/use-on-delete-table-row.d.ts +4 -1
  105. package/dist/cjs/hooks/use-on-delete-table-row.d.ts.map +1 -1
  106. package/dist/cjs/hooks/use-on-delete-table-row.js +19 -1
  107. package/dist/cjs/hooks/use-on-delete.d.ts +5 -2
  108. package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
  109. package/dist/cjs/hooks/use-on-delete.js +5 -1
  110. package/dist/cjs/hooks/use-on-embeds.d.ts +7 -4
  111. package/dist/cjs/hooks/use-on-embeds.d.ts.map +1 -1
  112. package/dist/cjs/hooks/use-on-embeds.js +26 -24
  113. package/dist/cjs/hooks/use-on-fill.d.ts +17 -2
  114. package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
  115. package/dist/cjs/hooks/use-on-fill.js +29 -15
  116. package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
  117. package/dist/cjs/hooks/use-on-filter-table.js +209 -103
  118. package/dist/cjs/hooks/use-on-import-excel.d.ts +2 -1
  119. package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
  120. package/dist/cjs/hooks/use-on-import-excel.js +22 -19
  121. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
  122. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  123. package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +3 -1
  124. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
  125. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  126. package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +3 -1
  127. package/dist/cjs/hooks/use-on-insert-column.d.ts +2 -1
  128. package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
  129. package/dist/cjs/hooks/use-on-insert-column.js +3 -1
  130. package/dist/cjs/hooks/use-on-insert-row.d.ts +2 -1
  131. package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
  132. package/dist/cjs/hooks/use-on-insert-row.js +3 -1
  133. package/dist/cjs/hooks/use-on-insert-table-row.d.ts +5 -2
  134. package/dist/cjs/hooks/use-on-insert-table-row.d.ts.map +1 -1
  135. package/dist/cjs/hooks/use-on-insert-table-row.js +19 -1
  136. package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
  137. package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  138. package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +14 -1
  139. package/dist/cjs/hooks/use-on-move-columns.d.ts +3 -1
  140. package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
  141. package/dist/cjs/hooks/use-on-move-columns.js +14 -1
  142. package/dist/cjs/hooks/use-on-move-rows.d.ts +3 -1
  143. package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
  144. package/dist/cjs/hooks/use-on-move-rows.js +14 -1
  145. package/dist/cjs/hooks/use-on-move-selection.d.ts +3 -1
  146. package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
  147. package/dist/cjs/hooks/use-on-move-selection.js +88 -25
  148. package/dist/cjs/hooks/use-on-paste.d.ts +22 -1
  149. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  150. package/dist/cjs/hooks/use-on-paste.js +993 -776
  151. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts +5 -2
  152. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  153. package/dist/cjs/hooks/use-on-remove-duplicates.js +5 -1
  154. package/dist/cjs/hooks/use-on-request-create-table.d.ts +13 -0
  155. package/dist/cjs/hooks/use-on-request-create-table.d.ts.map +1 -0
  156. package/dist/cjs/hooks/use-on-request-create-table.js +44 -0
  157. package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts +7 -0
  158. package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
  159. package/dist/cjs/hooks/use-on-request-insert-slicer.js +15 -0
  160. package/dist/cjs/hooks/use-on-request-resize-table.d.ts +7 -0
  161. package/dist/cjs/hooks/use-on-request-resize-table.d.ts.map +1 -0
  162. package/dist/cjs/hooks/use-on-request-resize-table.js +15 -0
  163. package/dist/cjs/hooks/use-on-resize-table.d.ts +5 -1
  164. package/dist/cjs/hooks/use-on-resize-table.d.ts.map +1 -1
  165. package/dist/cjs/hooks/use-on-resize-table.js +110 -33
  166. package/dist/cjs/hooks/use-on-sort-column.d.ts +28 -3
  167. package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
  168. package/dist/cjs/hooks/use-on-sort-column.js +136 -90
  169. package/dist/cjs/hooks/use-on-sort-range.d.ts +26 -3
  170. package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
  171. package/dist/cjs/hooks/use-on-sort-range.js +113 -67
  172. package/dist/cjs/hooks/use-on-sort-table.d.ts +18 -1
  173. package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
  174. package/dist/cjs/hooks/use-on-sort-table.js +128 -98
  175. package/dist/cjs/hooks/use-on-subtotal.d.ts +10 -3
  176. package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -1
  177. package/dist/cjs/hooks/use-on-subtotal.js +13 -9
  178. package/dist/cjs/hooks/use-on-table.d.ts +39 -7
  179. package/dist/cjs/hooks/use-on-table.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-on-table.js +257 -49
  181. package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts +23 -0
  182. package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
  183. package/dist/cjs/hooks/use-on-undo-calculated-column.js +70 -0
  184. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
  185. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
  186. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.js +96 -0
  187. package/dist/cjs/hooks/use-on-update-named-range.d.ts +4 -2
  188. package/dist/cjs/hooks/use-on-update-named-range.d.ts.map +1 -1
  189. package/dist/cjs/hooks/use-on-update-named-range.js +13 -1
  190. package/dist/cjs/hooks/use-sheet-properties.d.ts +1 -0
  191. package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
  192. package/dist/cjs/hooks/use-sheet-properties.js +54 -34
  193. package/dist/cjs/hooks/use-slicers.d.ts +2 -2
  194. package/dist/cjs/hooks/use-slicers.d.ts.map +1 -1
  195. package/dist/cjs/hooks/use-slicers.js +17 -26
  196. package/dist/cjs/hooks/use-sparkline-groups.d.ts +50 -0
  197. package/dist/cjs/hooks/use-sparkline-groups.d.ts.map +1 -0
  198. package/dist/cjs/hooks/use-sparkline-groups.js +192 -0
  199. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +56 -10
  200. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  201. package/dist/cjs/hooks/use-spreadsheet-state.js +322 -100
  202. package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
  203. package/dist/cjs/hooks/use-structured-reference.js +17 -0
  204. package/dist/cjs/hooks/use-undo-redo-actions.d.ts +2 -1
  205. package/dist/cjs/hooks/use-undo-redo-actions.d.ts.map +1 -1
  206. package/dist/cjs/hooks/use-undo-redo-actions.js +10 -2
  207. package/dist/cjs/hooks/use-undo-redo.d.ts +12 -0
  208. package/dist/cjs/hooks/use-undo-redo.d.ts.map +1 -1
  209. package/dist/cjs/hooks/use-undo-redo.js +169 -10
  210. package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
  211. package/dist/cjs/hooks/utils/sort-rows.js +4 -3
  212. package/dist/cjs/index.d.ts +7 -0
  213. package/dist/cjs/index.d.ts.map +1 -1
  214. package/dist/cjs/index.js +8 -0
  215. package/dist/cjs/interface/apply-fill.d.ts +26 -3
  216. package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
  217. package/dist/cjs/interface/apply-fill.js +207 -98
  218. package/dist/cjs/interface/change-batch.d.ts +1 -1
  219. package/dist/cjs/interface/change-batch.d.ts.map +1 -1
  220. package/dist/cjs/interface/change-batch.js +112 -15
  221. package/dist/cjs/interface/change-calculated-column.d.ts +6 -2
  222. package/dist/cjs/interface/change-calculated-column.d.ts.map +1 -1
  223. package/dist/cjs/interface/change-calculated-column.js +87 -17
  224. package/dist/cjs/interface/change-table-column.d.ts +81 -7
  225. package/dist/cjs/interface/change-table-column.d.ts.map +1 -1
  226. package/dist/cjs/interface/change-table-column.js +336 -76
  227. package/dist/cjs/interface/create-table.d.ts +15 -3
  228. package/dist/cjs/interface/create-table.d.ts.map +1 -1
  229. package/dist/cjs/interface/create-table.js +100 -25
  230. package/dist/cjs/interface/delete-cells-shift-left.d.ts +1 -1
  231. package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
  232. package/dist/cjs/interface/delete-cells-shift-left.js +10 -1
  233. package/dist/cjs/interface/delete-cells-shift-up.d.ts +1 -1
  234. package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
  235. package/dist/cjs/interface/delete-cells-shift-up.js +10 -1
  236. package/dist/cjs/interface/delete-cells.d.ts +1 -1
  237. package/dist/cjs/interface/delete-cells.d.ts.map +1 -1
  238. package/dist/cjs/interface/delete-cells.js +81 -25
  239. package/dist/cjs/interface/delete-column.d.ts +1 -1
  240. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  241. package/dist/cjs/interface/delete-column.js +9 -2
  242. package/dist/cjs/interface/delete-row.d.ts +1 -1
  243. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  244. package/dist/cjs/interface/delete-row.js +223 -18
  245. package/dist/cjs/interface/delete-sheet.d.ts +2 -2
  246. package/dist/cjs/interface/delete-sheet.d.ts.map +1 -1
  247. package/dist/cjs/interface/delete-sheet.js +118 -1
  248. package/dist/cjs/interface/delete-table-column.d.ts +1 -1
  249. package/dist/cjs/interface/delete-table-column.d.ts.map +1 -1
  250. package/dist/cjs/interface/delete-table-column.js +11 -1
  251. package/dist/cjs/interface/delete-table-row.d.ts +1 -1
  252. package/dist/cjs/interface/delete-table-row.d.ts.map +1 -1
  253. package/dist/cjs/interface/delete-table-row.js +361 -275
  254. package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
  255. package/dist/cjs/interface/duplicate-sheet.js +83 -31
  256. package/dist/cjs/interface/embeds.d.ts +10 -1
  257. package/dist/cjs/interface/embeds.d.ts.map +1 -1
  258. package/dist/cjs/interface/embeds.js +120 -6
  259. package/dist/cjs/interface/insert-cells-shift-down.d.ts +1 -1
  260. package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
  261. package/dist/cjs/interface/insert-cells-shift-down.js +10 -1
  262. package/dist/cjs/interface/insert-cells-shift-right.d.ts +1 -1
  263. package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
  264. package/dist/cjs/interface/insert-cells-shift-right.js +10 -1
  265. package/dist/cjs/interface/insert-column.d.ts +2 -2
  266. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  267. package/dist/cjs/interface/insert-column.js +67 -38
  268. package/dist/cjs/interface/insert-row.d.ts +1 -1
  269. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  270. package/dist/cjs/interface/insert-row.js +9 -2
  271. package/dist/cjs/interface/insert-table-row.d.ts +2 -1
  272. package/dist/cjs/interface/insert-table-row.d.ts.map +1 -1
  273. package/dist/cjs/interface/insert-table-row.js +70 -19
  274. package/dist/cjs/interface/remove-duplicates.d.ts +1 -1
  275. package/dist/cjs/interface/remove-duplicates.d.ts.map +1 -1
  276. package/dist/cjs/interface/remove-duplicates.js +46 -6
  277. package/dist/cjs/interface/remove-table.d.ts +1 -1
  278. package/dist/cjs/interface/remove-table.d.ts.map +1 -1
  279. package/dist/cjs/interface/remove-table.js +72 -16
  280. package/dist/cjs/interface/slicers.d.ts +12 -1
  281. package/dist/cjs/interface/slicers.d.ts.map +1 -1
  282. package/dist/cjs/interface/slicers.js +47 -2
  283. package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
  284. package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
  285. package/dist/cjs/interface/spreadsheet-interface.js +64 -1
  286. package/dist/cjs/interface/table-totalrow.d.ts +13 -1
  287. package/dist/cjs/interface/table-totalrow.d.ts.map +1 -1
  288. package/dist/cjs/interface/table-totalrow.js +107 -73
  289. package/dist/cjs/interface/table-utils.d.ts +59 -6
  290. package/dist/cjs/interface/table-utils.d.ts.map +1 -1
  291. package/dist/cjs/interface/table-utils.js +211 -15
  292. package/dist/cjs/interface/update-table.d.ts +16 -1
  293. package/dist/cjs/interface/update-table.d.ts.map +1 -1
  294. package/dist/cjs/interface/update-table.js +190 -44
  295. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  296. package/dist/cjs/test-setup.d.ts.map +1 -1
  297. package/dist/cjs/test-setup.js +6 -0
  298. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  299. package/dist/cjs/validation-schema/table.schema.d.ts +11 -0
  300. package/dist/cjs/validation-schema/table.schema.d.ts.map +1 -1
  301. package/dist/cjs/validation-schema/table.schema.js +20 -3
  302. package/dist/esm/api/anchored-objects.d.ts +122 -6
  303. package/dist/esm/api/anchored-objects.d.ts.map +1 -1
  304. package/dist/esm/api/anchored-objects.js +375 -15
  305. package/dist/esm/api/copy-paste.d.ts +1 -2
  306. package/dist/esm/api/copy-paste.d.ts.map +1 -1
  307. package/dist/esm/api/copy-paste.js +1 -3
  308. package/dist/esm/api/filter.d.ts +15 -1
  309. package/dist/esm/api/filter.d.ts.map +1 -1
  310. package/dist/esm/api/filter.js +28 -0
  311. package/dist/esm/api/formula.d.ts +63 -0
  312. package/dist/esm/api/formula.d.ts.map +1 -1
  313. package/dist/esm/api/formula.js +235 -8
  314. package/dist/esm/api/paint-format.d.ts +22 -1
  315. package/dist/esm/api/paint-format.d.ts.map +1 -1
  316. package/dist/esm/api/paint-format.js +44 -1
  317. package/dist/esm/api/sort.d.ts +23 -1
  318. package/dist/esm/api/sort.d.ts.map +1 -1
  319. package/dist/esm/api/sort.js +45 -6
  320. package/dist/esm/api/structural-guards.d.ts +57 -0
  321. package/dist/esm/api/structural-guards.d.ts.map +1 -1
  322. package/dist/esm/api/structural-guards.js +85 -0
  323. package/dist/esm/api/structural-table-refs.d.ts +58 -3
  324. package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
  325. package/dist/esm/api/structural-table-refs.js +126 -6
  326. package/dist/esm/api/table.d.ts +26 -2
  327. package/dist/esm/api/table.d.ts.map +1 -1
  328. package/dist/esm/api/table.js +70 -48
  329. package/dist/esm/api/validation.d.ts.map +1 -1
  330. package/dist/esm/api/validation.js +53 -8
  331. package/dist/esm/atoms/creating-table.atom.d.ts +22 -0
  332. package/dist/esm/atoms/creating-table.atom.d.ts.map +1 -0
  333. package/dist/esm/atoms/creating-table.atom.js +4 -0
  334. package/dist/esm/atoms/dialog-state.atom.d.ts +8 -0
  335. package/dist/esm/atoms/dialog-state.atom.d.ts.map +1 -1
  336. package/dist/esm/atoms/dialog-state.atom.js +12 -0
  337. package/dist/esm/atoms/editing-slicer.atom.d.ts +9 -0
  338. package/dist/esm/atoms/editing-slicer.atom.d.ts.map +1 -0
  339. package/dist/esm/atoms/editing-slicer.atom.js +6 -0
  340. package/dist/esm/atoms/index.d.ts +4 -0
  341. package/dist/esm/atoms/index.d.ts.map +1 -1
  342. package/dist/esm/atoms/index.js +4 -0
  343. package/dist/esm/atoms/inserting-slicer.atom.d.ts +8 -0
  344. package/dist/esm/atoms/inserting-slicer.atom.d.ts.map +1 -0
  345. package/dist/esm/atoms/inserting-slicer.atom.js +5 -0
  346. package/dist/esm/atoms/resizing-table.atom.d.ts +8 -0
  347. package/dist/esm/atoms/resizing-table.atom.d.ts.map +1 -0
  348. package/dist/esm/atoms/resizing-table.atom.js +5 -0
  349. package/dist/esm/commands.d.ts +129 -2
  350. package/dist/esm/commands.d.ts.map +1 -1
  351. package/dist/esm/components/editors/embed-editor.d.ts +4 -2
  352. package/dist/esm/components/editors/embed-editor.d.ts.map +1 -1
  353. package/dist/esm/components/editors/embed-editor.js +40 -6
  354. package/dist/esm/components/editors/slicer-editor.d.ts +15 -0
  355. package/dist/esm/components/editors/slicer-editor.d.ts.map +1 -0
  356. package/dist/esm/components/editors/slicer-editor.js +85 -0
  357. package/dist/esm/components/editors/table-editor.d.ts +58 -2
  358. package/dist/esm/components/editors/table-editor.d.ts.map +1 -1
  359. package/dist/esm/components/editors/table-editor.js +243 -19
  360. package/dist/esm/components/index.d.ts +1 -0
  361. package/dist/esm/components/index.d.ts.map +1 -1
  362. package/dist/esm/components/index.js +1 -0
  363. package/dist/esm/constants.d.ts +9 -1
  364. package/dist/esm/constants.d.ts.map +1 -1
  365. package/dist/esm/constants.js +12 -0
  366. package/dist/esm/generated-names.d.ts +13 -3
  367. package/dist/esm/generated-names.d.ts.map +1 -1
  368. package/dist/esm/generated-names.js +3 -1
  369. package/dist/esm/helpers.d.ts +5 -0
  370. package/dist/esm/helpers.d.ts.map +1 -1
  371. package/dist/esm/helpers.js +7 -1
  372. package/dist/esm/hooks/use-on-change-batch.d.ts +19 -2
  373. package/dist/esm/hooks/use-on-change-batch.d.ts.map +1 -1
  374. package/dist/esm/hooks/use-on-change-batch.js +19 -3
  375. package/dist/esm/hooks/use-on-change-calculated-column.d.ts +10 -1
  376. package/dist/esm/hooks/use-on-change-calculated-column.d.ts.map +1 -1
  377. package/dist/esm/hooks/use-on-change-calculated-column.js +17 -5
  378. package/dist/esm/hooks/use-on-change-table-column.d.ts +6 -1
  379. package/dist/esm/hooks/use-on-change-table-column.d.ts.map +1 -1
  380. package/dist/esm/hooks/use-on-change-table-column.js +17 -5
  381. package/dist/esm/hooks/use-on-change.d.ts +36 -3
  382. package/dist/esm/hooks/use-on-change.d.ts.map +1 -1
  383. package/dist/esm/hooks/use-on-change.js +214 -124
  384. package/dist/esm/hooks/use-on-create-custom-table-style.d.ts +17 -0
  385. package/dist/esm/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
  386. package/dist/esm/hooks/use-on-create-custom-table-style.js +26 -0
  387. package/dist/esm/hooks/use-on-create-named-range.d.ts +4 -2
  388. package/dist/esm/hooks/use-on-create-named-range.d.ts.map +1 -1
  389. package/dist/esm/hooks/use-on-create-named-range.js +11 -1
  390. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
  391. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  392. package/dist/esm/hooks/use-on-delete-cells-shift-left.js +3 -1
  393. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
  394. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  395. package/dist/esm/hooks/use-on-delete-cells-shift-up.js +3 -1
  396. package/dist/esm/hooks/use-on-delete-column.d.ts +2 -1
  397. package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
  398. package/dist/esm/hooks/use-on-delete-column.js +3 -1
  399. package/dist/esm/hooks/use-on-delete-row.d.ts +2 -1
  400. package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
  401. package/dist/esm/hooks/use-on-delete-row.js +3 -1
  402. package/dist/esm/hooks/use-on-delete-sheet.d.ts +9 -1
  403. package/dist/esm/hooks/use-on-delete-sheet.d.ts.map +1 -1
  404. package/dist/esm/hooks/use-on-delete-sheet.js +17 -1
  405. package/dist/esm/hooks/use-on-delete-table-row.d.ts +4 -1
  406. package/dist/esm/hooks/use-on-delete-table-row.d.ts.map +1 -1
  407. package/dist/esm/hooks/use-on-delete-table-row.js +19 -1
  408. package/dist/esm/hooks/use-on-delete.d.ts +5 -2
  409. package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
  410. package/dist/esm/hooks/use-on-delete.js +5 -1
  411. package/dist/esm/hooks/use-on-embeds.d.ts +7 -4
  412. package/dist/esm/hooks/use-on-embeds.d.ts.map +1 -1
  413. package/dist/esm/hooks/use-on-embeds.js +23 -6
  414. package/dist/esm/hooks/use-on-fill.d.ts +17 -2
  415. package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
  416. package/dist/esm/hooks/use-on-fill.js +27 -1
  417. package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
  418. package/dist/esm/hooks/use-on-filter-table.js +97 -26
  419. package/dist/esm/hooks/use-on-import-excel.d.ts +2 -1
  420. package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
  421. package/dist/esm/hooks/use-on-import-excel.js +4 -1
  422. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
  423. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  424. package/dist/esm/hooks/use-on-insert-cells-shift-down.js +3 -1
  425. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
  426. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  427. package/dist/esm/hooks/use-on-insert-cells-shift-right.js +3 -1
  428. package/dist/esm/hooks/use-on-insert-column.d.ts +2 -1
  429. package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
  430. package/dist/esm/hooks/use-on-insert-column.js +3 -1
  431. package/dist/esm/hooks/use-on-insert-row.d.ts +2 -1
  432. package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
  433. package/dist/esm/hooks/use-on-insert-row.js +3 -1
  434. package/dist/esm/hooks/use-on-insert-table-row.d.ts +5 -2
  435. package/dist/esm/hooks/use-on-insert-table-row.d.ts.map +1 -1
  436. package/dist/esm/hooks/use-on-insert-table-row.js +19 -1
  437. package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
  438. package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  439. package/dist/esm/hooks/use-on-merge-unmerge-cells.js +12 -1
  440. package/dist/esm/hooks/use-on-move-columns.d.ts +3 -1
  441. package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
  442. package/dist/esm/hooks/use-on-move-columns.js +14 -1
  443. package/dist/esm/hooks/use-on-move-rows.d.ts +3 -1
  444. package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
  445. package/dist/esm/hooks/use-on-move-rows.js +14 -1
  446. package/dist/esm/hooks/use-on-move-selection.d.ts +3 -1
  447. package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
  448. package/dist/esm/hooks/use-on-move-selection.js +44 -1
  449. package/dist/esm/hooks/use-on-paste.d.ts +22 -1
  450. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  451. package/dist/esm/hooks/use-on-paste.js +815 -672
  452. package/dist/esm/hooks/use-on-remove-duplicates.d.ts +5 -2
  453. package/dist/esm/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  454. package/dist/esm/hooks/use-on-remove-duplicates.js +5 -1
  455. package/dist/esm/hooks/use-on-request-create-table.d.ts +13 -0
  456. package/dist/esm/hooks/use-on-request-create-table.d.ts.map +1 -0
  457. package/dist/esm/hooks/use-on-request-create-table.js +43 -0
  458. package/dist/esm/hooks/use-on-request-insert-slicer.d.ts +7 -0
  459. package/dist/esm/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
  460. package/dist/esm/hooks/use-on-request-insert-slicer.js +15 -0
  461. package/dist/esm/hooks/use-on-request-resize-table.d.ts +7 -0
  462. package/dist/esm/hooks/use-on-request-resize-table.d.ts.map +1 -0
  463. package/dist/esm/hooks/use-on-request-resize-table.js +15 -0
  464. package/dist/esm/hooks/use-on-resize-table.d.ts +5 -1
  465. package/dist/esm/hooks/use-on-resize-table.d.ts.map +1 -1
  466. package/dist/esm/hooks/use-on-resize-table.js +107 -27
  467. package/dist/esm/hooks/use-on-sort-column.d.ts +28 -3
  468. package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
  469. package/dist/esm/hooks/use-on-sort-column.js +105 -68
  470. package/dist/esm/hooks/use-on-sort-range.d.ts +26 -3
  471. package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
  472. package/dist/esm/hooks/use-on-sort-range.js +100 -64
  473. package/dist/esm/hooks/use-on-sort-table.d.ts +18 -1
  474. package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
  475. package/dist/esm/hooks/use-on-sort-table.js +107 -86
  476. package/dist/esm/hooks/use-on-subtotal.d.ts +10 -3
  477. package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -1
  478. package/dist/esm/hooks/use-on-subtotal.js +7 -5
  479. package/dist/esm/hooks/use-on-table.d.ts +39 -7
  480. package/dist/esm/hooks/use-on-table.d.ts.map +1 -1
  481. package/dist/esm/hooks/use-on-table.js +234 -26
  482. package/dist/esm/hooks/use-on-undo-calculated-column.d.ts +23 -0
  483. package/dist/esm/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
  484. package/dist/esm/hooks/use-on-undo-calculated-column.js +62 -0
  485. package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
  486. package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
  487. package/dist/esm/hooks/use-on-undo-table-auto-expansion.js +75 -0
  488. package/dist/esm/hooks/use-on-update-named-range.d.ts +4 -2
  489. package/dist/esm/hooks/use-on-update-named-range.d.ts.map +1 -1
  490. package/dist/esm/hooks/use-on-update-named-range.js +13 -1
  491. package/dist/esm/hooks/use-sheet-properties.d.ts +1 -0
  492. package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
  493. package/dist/esm/hooks/use-sheet-properties.js +38 -19
  494. package/dist/esm/hooks/use-slicers.d.ts +2 -2
  495. package/dist/esm/hooks/use-slicers.d.ts.map +1 -1
  496. package/dist/esm/hooks/use-slicers.js +16 -8
  497. package/dist/esm/hooks/use-sparkline-groups.d.ts +50 -0
  498. package/dist/esm/hooks/use-sparkline-groups.d.ts.map +1 -0
  499. package/dist/esm/hooks/use-sparkline-groups.js +146 -0
  500. package/dist/esm/hooks/use-spreadsheet-state.d.ts +56 -10
  501. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  502. package/dist/esm/hooks/use-spreadsheet-state.js +259 -30
  503. package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
  504. package/dist/esm/hooks/use-structured-reference.js +17 -0
  505. package/dist/esm/hooks/use-undo-redo-actions.d.ts +2 -1
  506. package/dist/esm/hooks/use-undo-redo-actions.d.ts.map +1 -1
  507. package/dist/esm/hooks/use-undo-redo-actions.js +8 -2
  508. package/dist/esm/hooks/use-undo-redo.d.ts +12 -0
  509. package/dist/esm/hooks/use-undo-redo.d.ts.map +1 -1
  510. package/dist/esm/hooks/use-undo-redo.js +158 -7
  511. package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
  512. package/dist/esm/hooks/utils/sort-rows.js +4 -3
  513. package/dist/esm/index.d.ts +7 -0
  514. package/dist/esm/index.d.ts.map +1 -1
  515. package/dist/esm/index.js +8 -0
  516. package/dist/esm/interface/apply-fill.d.ts +26 -3
  517. package/dist/esm/interface/apply-fill.d.ts.map +1 -1
  518. package/dist/esm/interface/apply-fill.js +188 -88
  519. package/dist/esm/interface/change-batch.d.ts +1 -1
  520. package/dist/esm/interface/change-batch.d.ts.map +1 -1
  521. package/dist/esm/interface/change-batch.js +89 -8
  522. package/dist/esm/interface/change-calculated-column.d.ts +6 -2
  523. package/dist/esm/interface/change-calculated-column.d.ts.map +1 -1
  524. package/dist/esm/interface/change-calculated-column.js +81 -16
  525. package/dist/esm/interface/change-table-column.d.ts +81 -7
  526. package/dist/esm/interface/change-table-column.d.ts.map +1 -1
  527. package/dist/esm/interface/change-table-column.js +295 -67
  528. package/dist/esm/interface/create-table.d.ts +15 -3
  529. package/dist/esm/interface/create-table.d.ts.map +1 -1
  530. package/dist/esm/interface/create-table.js +103 -27
  531. package/dist/esm/interface/delete-cells-shift-left.d.ts +1 -1
  532. package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
  533. package/dist/esm/interface/delete-cells-shift-left.js +10 -1
  534. package/dist/esm/interface/delete-cells-shift-up.d.ts +1 -1
  535. package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
  536. package/dist/esm/interface/delete-cells-shift-up.js +10 -1
  537. package/dist/esm/interface/delete-cells.d.ts +1 -1
  538. package/dist/esm/interface/delete-cells.d.ts.map +1 -1
  539. package/dist/esm/interface/delete-cells.js +47 -14
  540. package/dist/esm/interface/delete-column.d.ts +1 -1
  541. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  542. package/dist/esm/interface/delete-column.js +9 -2
  543. package/dist/esm/interface/delete-row.d.ts +1 -1
  544. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  545. package/dist/esm/interface/delete-row.js +173 -15
  546. package/dist/esm/interface/delete-sheet.d.ts +2 -2
  547. package/dist/esm/interface/delete-sheet.d.ts.map +1 -1
  548. package/dist/esm/interface/delete-sheet.js +113 -1
  549. package/dist/esm/interface/delete-table-column.d.ts +1 -1
  550. package/dist/esm/interface/delete-table-column.d.ts.map +1 -1
  551. package/dist/esm/interface/delete-table-column.js +11 -1
  552. package/dist/esm/interface/delete-table-row.d.ts +1 -1
  553. package/dist/esm/interface/delete-table-row.d.ts.map +1 -1
  554. package/dist/esm/interface/delete-table-row.js +312 -232
  555. package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
  556. package/dist/esm/interface/duplicate-sheet.js +73 -26
  557. package/dist/esm/interface/embeds.d.ts +10 -1
  558. package/dist/esm/interface/embeds.d.ts.map +1 -1
  559. package/dist/esm/interface/embeds.js +84 -5
  560. package/dist/esm/interface/insert-cells-shift-down.d.ts +1 -1
  561. package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
  562. package/dist/esm/interface/insert-cells-shift-down.js +10 -1
  563. package/dist/esm/interface/insert-cells-shift-right.d.ts +1 -1
  564. package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
  565. package/dist/esm/interface/insert-cells-shift-right.js +10 -1
  566. package/dist/esm/interface/insert-column.d.ts +2 -2
  567. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  568. package/dist/esm/interface/insert-column.js +48 -23
  569. package/dist/esm/interface/insert-row.d.ts +1 -1
  570. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  571. package/dist/esm/interface/insert-row.js +9 -2
  572. package/dist/esm/interface/insert-table-row.d.ts +2 -1
  573. package/dist/esm/interface/insert-table-row.d.ts.map +1 -1
  574. package/dist/esm/interface/insert-table-row.js +67 -12
  575. package/dist/esm/interface/remove-duplicates.d.ts +1 -1
  576. package/dist/esm/interface/remove-duplicates.d.ts.map +1 -1
  577. package/dist/esm/interface/remove-duplicates.js +41 -6
  578. package/dist/esm/interface/remove-table.d.ts +1 -1
  579. package/dist/esm/interface/remove-table.d.ts.map +1 -1
  580. package/dist/esm/interface/remove-table.js +58 -10
  581. package/dist/esm/interface/slicers.d.ts +12 -1
  582. package/dist/esm/interface/slicers.d.ts.map +1 -1
  583. package/dist/esm/interface/slicers.js +44 -2
  584. package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
  585. package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
  586. package/dist/esm/interface/spreadsheet-interface.js +73 -1
  587. package/dist/esm/interface/table-totalrow.d.ts +13 -1
  588. package/dist/esm/interface/table-totalrow.d.ts.map +1 -1
  589. package/dist/esm/interface/table-totalrow.js +98 -68
  590. package/dist/esm/interface/table-utils.d.ts +59 -6
  591. package/dist/esm/interface/table-utils.d.ts.map +1 -1
  592. package/dist/esm/interface/table-utils.js +155 -14
  593. package/dist/esm/interface/update-table.d.ts +16 -1
  594. package/dist/esm/interface/update-table.d.ts.map +1 -1
  595. package/dist/esm/interface/update-table.js +203 -42
  596. package/dist/esm/sheet-cell.d.ts.map +1 -1
  597. package/dist/esm/test-setup.d.ts.map +1 -1
  598. package/dist/esm/test-setup.js +6 -0
  599. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  600. package/dist/esm/validation-schema/table.schema.d.ts +11 -0
  601. package/dist/esm/validation-schema/table.schema.d.ts.map +1 -1
  602. package/dist/esm/validation-schema/table.schema.js +15 -2
  603. package/package.json +19 -11
@@ -1,7 +1,7 @@
1
1
  import { tokenize as defaultTokenizer } from "@rowsncolumns/calculator";
2
2
  import { isCellCoordinate, isCellNode, isCellRangeNode, isStaticNode, } from "@rowsncolumns/dag";
3
3
  import { FormulaError } from "@rowsncolumns/fast-formula-parser";
4
- import { defaultSpreadsheetTheme, } from "@rowsncolumns/spreadsheet";
4
+ import { defaultSpreadsheetTheme, getBandedCells, } from "@rowsncolumns/spreadsheet";
5
5
  import { addressToCell, canUseDOM, cellToAddress, DEFAULT_ACTIVE_CELL, DEFAULT_COLUMN_COUNT, DEFAULT_COLUMN_WIDTH, DEFAULT_ROW_COUNT, DEFAULT_ROW_HEIGHT, generateSelectionsFromFormula, getCellEffectiveFormat, getCellEffectiveValue, getCellFormattedValue, getCellUserEnteredFormat, cellFormatWrapsText, getCellUserEnteredValue, getColumnIndexFromColumnName, getExtendedValueBool, getExtendedValueError, getExtendedValueFormula, getExtendedValueNumber, getExtendedValueString, isAreasEqual, isCellWithinBounds, isNil, iterateCellsInRange, pointToPixel, } from "@rowsncolumns/utils";
6
6
  import { enableMapSet, enablePatches, produceWithPatches } from "immer";
7
7
  import { buildConditionalFormatExpression } from "../api/conditional-format";
@@ -12,6 +12,7 @@ import { getAutoFillValues } from "../api/fill";
12
12
  import { formulaToRelativeReference } from "../api/formula";
13
13
  import { createSheetDraft, deriveCellFromPrecedents } from "../api/immer-utils";
14
14
  import { arrayResultToA1Ref } from "../hooks/use-on-calculation-success";
15
+ import { deriveBuiltInTableBanding, } from "../hooks/use-spreadsheet-state";
15
16
  import { defaultCellCoords, isStyleReference, SheetCell } from "../sheet-cell";
16
17
  import { CellXfsRegistry } from "../cellxfs-registry";
17
18
  import { SharedStringRegistry } from "../shared-string-registry";
@@ -1221,6 +1222,22 @@ export class Spreadsheet {
1221
1222
  sheetName,
1222
1223
  };
1223
1224
  }
1225
+ // Totals row only (the table's last row); nothing to highlight while it is off.
1226
+ if (specialItem === "#Totals") {
1227
+ if (!totalRow) {
1228
+ return undefined;
1229
+ }
1230
+ return {
1231
+ range: {
1232
+ ...range,
1233
+ startColumnIndex,
1234
+ endColumnIndex,
1235
+ startRowIndex: range.endRowIndex,
1236
+ endRowIndex: range.endRowIndex,
1237
+ },
1238
+ sheetName,
1239
+ };
1240
+ }
1224
1241
  // All
1225
1242
  if (specialItem === "#All") {
1226
1243
  return {
@@ -1358,6 +1375,7 @@ export class Spreadsheet {
1358
1375
  onChangeSheets: this.onChangeSheets,
1359
1376
  onChangeSheetData: this.onChangeSheetData,
1360
1377
  onChangeTables: this.onChangeTables,
1378
+ onChangeCharts: this.onChangeCharts,
1361
1379
  onChangeDataValidations: this.onChangeDataValidations,
1362
1380
  onChangeConditionalFormats: this.onChangeConditionalFormats,
1363
1381
  createHistory: this.createHistory,
@@ -1510,6 +1528,8 @@ export class Spreadsheet {
1510
1528
  getDependents: this.getDependents,
1511
1529
  onChangeSheetData: this.onChangeSheetData,
1512
1530
  onChangeTables: this.onChangeTables,
1531
+ onChangeCharts: this.onChangeCharts,
1532
+ tables: this.tables,
1513
1533
  })(...args),
1514
1534
  onChangeCalculatedColumn: (...args) => changeCalculatedColumn({
1515
1535
  locale: this.locale,
@@ -1613,15 +1633,27 @@ export class Spreadsheet {
1613
1633
  * @param previousTable
1614
1634
  */
1615
1635
  updateTable(sheetId, tableId, updatedTable) {
1636
+ const sheet = this.getSheet(sheetId);
1616
1637
  return updateTable({
1617
1638
  locale: this.locale,
1618
1639
  tables: this.tables,
1619
1640
  createHistory: this.createHistory,
1620
1641
  enqueueCalculation: this.enqueueCalculation,
1642
+ enqueueGraphOperation: this.enqueueGraphOperation,
1643
+ getGraphNodes: () => this._calculationInterface.getNodes(),
1621
1644
  getDependents: this.getDependents,
1622
1645
  onChangeSheetData: this.onChangeSheetData,
1623
1646
  onChangeTables: this.onChangeTables,
1624
1647
  getFormattedValue: this.getFormattedValue,
1648
+ sheetData: this.sheetData,
1649
+ rowCount: sheet.rowCount,
1650
+ columnCount: sheet.columnCount,
1651
+ getSheetName: this.getSheetName,
1652
+ getActiveCell: this.getActiveCell,
1653
+ enqueueStructureChange: this.enqueueStructureChange,
1654
+ onChangeSheets: this.onChangeSheets,
1655
+ onChangeDataValidations: this.onChangeDataValidations,
1656
+ onChangeConditionalFormats: this.onChangeConditionalFormats,
1625
1657
  })(sheetId, tableId, updatedTable);
1626
1658
  }
1627
1659
  /**
@@ -1630,10 +1662,39 @@ export class Spreadsheet {
1630
1662
  */
1631
1663
  removeTable(tableView) {
1632
1664
  removeTable({
1665
+ locale: this.locale,
1666
+ cellXfsRegistry: this.cellXfsRegistry,
1667
+ sharedStringRegistry: this.sharedStringRegistry,
1668
+ getSheetName: this.getSheetName,
1633
1669
  createHistory: this.createHistory,
1634
1670
  enqueueCalculation: this.enqueueCalculation,
1671
+ enqueueGraphOperation: this.enqueueGraphOperation,
1635
1672
  getDependents: this.getDependents,
1673
+ getGraphNodes: () => this._calculationInterface.getNodes(),
1674
+ getBandedCells: (sheetId) => {
1675
+ const bands = (this.tables ?? []).flatMap((table) => {
1676
+ const banded = table.sheetId === sheetId
1677
+ ? (table.bandedRange ?? deriveBuiltInTableBanding(table))
1678
+ : undefined;
1679
+ return banded
1680
+ ? [
1681
+ {
1682
+ bandedRangeId: `${table.id}-${table.theme}`,
1683
+ showFirstColumn: table.showFirstColumn,
1684
+ showLastColumn: table.showLastColumn,
1685
+ totalRow: table.totalRow ?? false,
1686
+ range: { ...table.range, sheetId },
1687
+ ...banded,
1688
+ },
1689
+ ]
1690
+ : [];
1691
+ });
1692
+ return bands.length
1693
+ ? getBandedCells(bands, defaultSpreadsheetTheme, sheetId, (rowIndex) => this.isHiddenRow(sheetId, rowIndex), () => false)
1694
+ : undefined;
1695
+ },
1636
1696
  onChangeSheets: this.onChangeSheets,
1697
+ onChangeSheetData: this.onChangeSheetData,
1637
1698
  onChangeTables: this.onChangeTables,
1638
1699
  })(tableView);
1639
1700
  }
@@ -1736,6 +1797,7 @@ export class Spreadsheet {
1736
1797
  enqueueStructureChange: this.enqueueStructureChange,
1737
1798
  onChangeSheetData: this.onChangeSheetData,
1738
1799
  onChangeSheets: this.onChangeSheets,
1800
+ onChangeCharts: this.onChangeCharts,
1739
1801
  })(sheetId, activeCell, selections);
1740
1802
  }
1741
1803
  /**
@@ -1756,6 +1818,7 @@ export class Spreadsheet {
1756
1818
  enqueueStructureChange: this.enqueueStructureChange,
1757
1819
  onChangeSheetData: this.onChangeSheetData,
1758
1820
  onChangeSheets: this.onChangeSheets,
1821
+ onChangeCharts: this.onChangeCharts,
1759
1822
  })(sheetId, activeCell, selections);
1760
1823
  }
1761
1824
  /** Freeze a row index */
@@ -1858,6 +1921,12 @@ export class Spreadsheet {
1858
1921
  onChangeSheetData: this.onChangeSheetData,
1859
1922
  onChangeActiveSheet: () => { },
1860
1923
  onChangeSheets: this.onChangeSheets,
1924
+ onChangeCharts: this.onChangeCharts,
1925
+ onChangeEmbeds: this.onChangeEmbeds,
1926
+ onChangeTables: this.onChangeTables,
1927
+ onChangeConditionalFormats: this.onChangeConditionalFormats,
1928
+ onChangeDataValidations: this.onChangeDataValidations,
1929
+ onChangeNamedRanges: this.onChangeNamedRanges,
1861
1930
  createHistory: this.createHistory,
1862
1931
  enqueueGraphOperation: this.enqueueGraphOperation,
1863
1932
  })(sheetId);
@@ -2137,6 +2206,7 @@ export class Spreadsheet {
2137
2206
  onChangeSheetData: this.onChangeSheetData,
2138
2207
  onChangeSheets: this.onChangeSheets,
2139
2208
  onChangeTables: this.onChangeTables,
2209
+ onChangeCharts: this.onChangeCharts,
2140
2210
  onChangeDataValidations: this.onChangeDataValidations,
2141
2211
  onChangeConditionalFormats: this.onChangeConditionalFormats,
2142
2212
  })(tableView, rowIndexes);
@@ -2337,6 +2407,7 @@ export class Spreadsheet {
2337
2407
  database,
2338
2408
  locale: this.locale,
2339
2409
  onChangeSheetData: this.onChangeSheetData,
2410
+ onChangeCharts: this.onChangeCharts,
2340
2411
  onChangeSheets: this.onChangeSheets,
2341
2412
  // onCreateNewSheet:,
2342
2413
  createHistory: this.createHistory,
@@ -2355,6 +2426,7 @@ export class Spreadsheet {
2355
2426
  database,
2356
2427
  locale: this.locale,
2357
2428
  onChangeSheetData: this.onChangeSheetData,
2429
+ onChangeCharts: this.onChangeCharts,
2358
2430
  onChangeSheets: this.onChangeSheets,
2359
2431
  // onCreateNewSheet:,
2360
2432
  createHistory: this.createHistory,
@@ -3,12 +3,24 @@ import type { UseOnTableProps } from "../hooks/use-on-table";
3
3
  import type { SpreadsheetPatch } from "../hooks/use-undo-redo";
4
4
  type TableTotalRowProps<T extends CellData, S extends Sheet> = Pick<UseOnTableProps<T, S>, "locale" | "onChangeSheetData" | "enqueueCalculation">;
5
5
  /**
6
- * Add a total row to a table.
6
+ * Add a total row to a table the way Excel does when Total Row is switched on:
7
+ * "Total" in the first column and ONE structured-reference `SUBTOTAL` in the
8
+ * last column — Sum (`109`) when that column's body is all numbers, Count
9
+ * (`103`) otherwise; every other totals cell stays blank. A single-column
10
+ * table gets the formula.
7
11
  *
8
12
  * Expects `updatedTable.range` to already include the total row, i.e.
9
13
  * `range.endRowIndex` is the row the totals are written to.
10
14
  */
11
15
  export declare const addTotalRow: <T extends CellData, S extends Sheet>({ locale, onChangeSheetData, enqueueCalculation, }: TableTotalRowProps<T, S>) => (sheetId: number, updatedTable: TableView, saveHistory: (patches: SpreadsheetPatch) => void) => void;
16
+ /**
17
+ * Rewrite the totals-row cells of `columnIndexes` from their column's recorded
18
+ * `totalsRowFunction` (the totals dropdown's choice): a function writes its
19
+ * structured `SUBTOTAL`, `none` (or no name to reference) clears the cell.
20
+ *
21
+ * Expects `table.range` to include the total row (`range.endRowIndex`).
22
+ */
23
+ export declare const setTotalRowFunctions: <T extends CellData, S extends Sheet>({ locale, onChangeSheetData, enqueueCalculation, }: TableTotalRowProps<T, S>) => (sheetId: number, table: TableView, columnIndexes: number[], saveHistory: (patches: SpreadsheetPatch) => void) => void;
12
24
  /**
13
25
  * Remove the total row from a table.
14
26
  *
@@ -1 +1 @@
1
- {"version":3,"file":"table-totalrow.d.ts","sourceRoot":"","sources":["../../../interface/table-totalrow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAM5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,CACjE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,QAAQ,GAAG,mBAAmB,GAAG,oBAAoB,CACtD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,oDAI9D,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,cAAc,SAAS,EACvB,aAAa,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,SAuJnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,oDAIjE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,cAAc,SAAS,EACvB,aAAa,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,SA4DnD,CAAC"}
1
+ {"version":3,"file":"table-totalrow.d.ts","sourceRoot":"","sources":["../../../interface/table-totalrow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAM5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,CACjE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACrB,QAAQ,GAAG,mBAAmB,GAAG,oBAAoB,CACtD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,oDAI9D,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,cAAc,SAAS,EACvB,aAAa,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,SA8HnD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,oDAIvE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,eAAe,MAAM,EAAE,EACvB,aAAa,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,SAqDnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,oDAIjE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,cAAc,SAAS,EACvB,aAAa,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,SA4DnD,CAAC"}
@@ -1,10 +1,14 @@
1
- import { isNil, isNumber } from "@rowsncolumns/utils";
1
+ import { getTotalsRowFormula, isNil, isNumber } from "@rowsncolumns/utils";
2
2
  import { produceWithPatches } from "immer";
3
3
  import { createSheetCellIdentifier } from "../api/formula";
4
4
  import { createSheetDraft } from "../api/immer-utils";
5
5
  import { SheetCell } from "../sheet-cell";
6
6
  /**
7
- * Add a total row to a table.
7
+ * Add a total row to a table the way Excel does when Total Row is switched on:
8
+ * "Total" in the first column and ONE structured-reference `SUBTOTAL` in the
9
+ * last column — Sum (`109`) when that column's body is all numbers, Count
10
+ * (`103`) otherwise; every other totals cell stays blank. A single-column
11
+ * table gets the formula.
8
12
  *
9
13
  * Expects `updatedTable.range` to already include the total row, i.e.
10
14
  * `range.endRowIndex` is the row the totals are written to.
@@ -13,94 +17,120 @@ export const addTotalRow = ({ locale, onChangeSheetData, enqueueCalculation, })
13
17
  return (sheetId, updatedTable, saveHistory) => {
14
18
  // We need to track this for history. Precedent cells
15
19
  const recalcCells = new Map();
16
- /**
17
- * 1. Validate number columns
18
- * 2. Add Subtotal function
19
- */
20
- const numberColumnIndexes = [];
21
20
  const sheetCell = new SheetCell();
22
21
  const { range: { startRowIndex, startColumnIndex, endRowIndex, endColumnIndex }, } = updatedTable;
23
- // Add total text
24
22
  const totalRowIndex = endRowIndex;
23
+ const bodyStartRowIndex = startRowIndex + (updatedTable.headerRow !== false ? 1 : 0);
25
24
  /**
26
25
  * Update sheet
27
26
  */
28
27
  onChangeSheetData?.((prevSheetData) => {
29
28
  const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
30
- // User is adding a total row
31
- for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
29
+ // Is every non-blank body cell of the column a number? Dates are
30
+ // stored as numbers, but summing them is meaningless.
31
+ const isNumericColumn = (columnIndex) => {
32
32
  const values = [];
33
- let isDateColumn = false;
34
- for (let rowIndex = startRowIndex + (updatedTable.headerRow ? 1 : 0); rowIndex < totalRowIndex; rowIndex++) {
33
+ for (let rowIndex = bodyStartRowIndex; rowIndex < totalRowIndex; rowIndex++) {
35
34
  const cellData = draft[sheetId]?.[rowIndex]?.values?.[columnIndex];
36
- sheetCell.assign(sheetId, {
37
- rowIndex,
38
- columnIndex,
39
- }, cellData, { locale });
40
- const effectiveValue = sheetCell.getEffectiveValue();
35
+ sheetCell.assign(sheetId, { rowIndex, columnIndex }, cellData, {
36
+ locale,
37
+ });
41
38
  const numberFormat = sheetCell.getNumberFormat();
42
- // Dates are stored as numbers, but summing them is meaningless
43
39
  if (numberFormat?.type === "DATE" ||
44
40
  numberFormat?.type === "DATE_TIME") {
45
- isDateColumn = true;
46
- break;
41
+ return false;
47
42
  }
43
+ const effectiveValue = sheetCell.getEffectiveValue();
48
44
  if (!isNil(effectiveValue)) {
49
45
  values.push(effectiveValue);
50
46
  }
51
47
  }
52
- if (!isDateColumn && values.length && values.every(isNumber)) {
53
- numberColumnIndexes.push(columnIndex);
54
- }
55
- }
48
+ return values.length > 0 && values.every(isNumber);
49
+ };
56
50
  const currentSheet = createSheetDraft(draft, sheetId, totalRowIndex);
57
- sheetCell.assign(sheetId, {
58
- rowIndex: totalRowIndex,
59
- columnIndex: startColumnIndex,
60
- }, currentSheet[totalRowIndex]?.values?.[startColumnIndex], { locale });
61
- // Add total text
62
- sheetCell.setUserEnteredValue("Total");
63
- // Bold, can be overridden by user
64
- sheetCell.setUserEnteredFormat("textFormat", {
65
- bold: true,
66
- });
67
- // Set cell data
68
- currentSheet[totalRowIndex].values[startColumnIndex] =
69
- sheetCell.getCellData();
70
- // Add subtotal
71
- for (const columnIndex of numberColumnIndexes) {
72
- // The total label owns the first column
73
- if (columnIndex === startColumnIndex) {
51
+ const writeTotalCell = (columnIndex, value) => {
52
+ sheetCell.assign(sheetId, { rowIndex: totalRowIndex, columnIndex }, currentSheet[totalRowIndex]?.values?.[columnIndex], { locale });
53
+ sheetCell.setUserEnteredValue(value);
54
+ // The totals row's bold and top rule come from the table style's
55
+ // `totalRow` band, not from an explicit cell format.
56
+ currentSheet[totalRowIndex].values[columnIndex] =
57
+ sheetCell.getCellData();
58
+ };
59
+ const writeTotalFormula = (columnIndex, formula) => {
60
+ writeTotalCell(columnIndex, formula);
61
+ const position = { rowIndex: totalRowIndex, columnIndex, sheetId };
62
+ enqueueCalculation({ type: "add", position });
63
+ recalcCells.set(createSheetCellIdentifier(sheetId, totalRowIndex, columnIndex), position);
64
+ };
65
+ // A column with a recorded `totalsRowFunction` (the totals dropdown's
66
+ // choice, kept across toggles) regenerates that; the others take
67
+ // Excel's defaults below.
68
+ const recorded = new Set();
69
+ for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
70
+ const column = updatedTable.columns?.[columnIndex - startColumnIndex];
71
+ const fn = column?.totalsRowFunction;
72
+ if (!fn)
74
73
  continue;
75
- }
76
- const rowIndex = totalRowIndex;
77
- const cellData = draft[sheetId]?.[rowIndex]?.values?.[columnIndex];
78
- sheetCell.assign(sheetId, {
79
- columnIndex,
80
- rowIndex,
81
- }, cellData, { locale });
82
- const columnName = updatedTable.columns?.[columnIndex - startColumnIndex]?.name;
83
- if (columnName) {
84
- sheetCell.setUserEnteredValue(`=SUBTOTAL(109, [${columnName}])`);
74
+ recorded.add(columnIndex);
75
+ const formula = column?.name
76
+ ? getTotalsRowFormula(fn, updatedTable.title, column.name)
77
+ : undefined;
78
+ if (formula)
79
+ writeTotalFormula(columnIndex, formula);
80
+ }
81
+ const lastColumnName = updatedTable.columns?.[endColumnIndex - startColumnIndex]?.name;
82
+ const lastColumnFormula = lastColumnName && !recorded.has(endColumnIndex)
83
+ ? getTotalsRowFormula(isNumericColumn(endColumnIndex) ? "sum" : "count", updatedTable.title, lastColumnName)
84
+ : undefined;
85
+ // The total label owns the first column unless the formula needs it
86
+ // (single-column table).
87
+ if (!recorded.has(startColumnIndex) &&
88
+ (endColumnIndex > startColumnIndex || !lastColumnFormula)) {
89
+ writeTotalCell(startColumnIndex, "Total");
90
+ }
91
+ if (lastColumnFormula) {
92
+ writeTotalFormula(endColumnIndex, lastColumnFormula);
93
+ }
94
+ });
95
+ saveHistory({
96
+ sheetData: { patches, inversePatches },
97
+ recalcCells: { undo: recalcCells, redo: recalcCells },
98
+ });
99
+ return nextState;
100
+ });
101
+ };
102
+ };
103
+ /**
104
+ * Rewrite the totals-row cells of `columnIndexes` from their column's recorded
105
+ * `totalsRowFunction` (the totals dropdown's choice): a function writes its
106
+ * structured `SUBTOTAL`, `none` (or no name to reference) clears the cell.
107
+ *
108
+ * Expects `table.range` to include the total row (`range.endRowIndex`).
109
+ */
110
+ export const setTotalRowFunctions = ({ locale, onChangeSheetData, enqueueCalculation, }) => {
111
+ return (sheetId, table, columnIndexes, saveHistory) => {
112
+ const recalcCells = new Map();
113
+ const sheetCell = new SheetCell();
114
+ const totalRowIndex = table.range.endRowIndex;
115
+ onChangeSheetData?.((prevSheetData) => {
116
+ const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
117
+ const currentSheet = createSheetDraft(draft, sheetId, totalRowIndex);
118
+ for (const columnIndex of columnIndexes) {
119
+ const column = table.columns?.[columnIndex - table.range.startColumnIndex];
120
+ const formula = column?.totalsRowFunction && column.name
121
+ ? getTotalsRowFormula(column.totalsRowFunction, table.title, column.name)
122
+ : undefined;
123
+ sheetCell.assign(sheetId, { rowIndex: totalRowIndex, columnIndex }, formula ? currentSheet[totalRowIndex]?.values?.[columnIndex] : undefined, { locale });
124
+ if (formula) {
125
+ sheetCell.setUserEnteredValue(formula);
85
126
  // Bold, can be overridden by user
86
- sheetCell.setUserEnteredFormat("textFormat", {
87
- bold: true,
88
- });
89
- // Set cell data
90
- currentSheet[totalRowIndex].values[columnIndex] =
91
- sheetCell.getCellData();
92
- const position = {
93
- rowIndex,
94
- columnIndex,
95
- sheetId,
96
- };
97
- enqueueCalculation({
98
- type: "add",
99
- position,
100
- });
101
- // Add sheet id
102
- recalcCells.set(createSheetCellIdentifier(sheetId, rowIndex, columnIndex), position);
127
+ sheetCell.setUserEnteredFormat("textFormat", { bold: true });
103
128
  }
129
+ currentSheet[totalRowIndex].values[columnIndex] =
130
+ sheetCell.getCellData();
131
+ const position = { rowIndex: totalRowIndex, columnIndex, sheetId };
132
+ enqueueCalculation({ type: "add", position });
133
+ recalcCells.set(createSheetCellIdentifier(sheetId, totalRowIndex, columnIndex), position);
104
134
  }
105
135
  });
106
136
  saveHistory({
@@ -1,21 +1,74 @@
1
- import type { GridRange } from "@rowsncolumns/common-types";
2
- import type { CellData, TableView } from "@rowsncolumns/spreadsheet";
1
+ import type { GridRange, SelectionArea } from "@rowsncolumns/common-types";
2
+ import type { CellData, Column, TableView } from "@rowsncolumns/spreadsheet";
3
3
  import type { Draft } from "immer";
4
4
  import type { GeneratedNames } from "../generated-names";
5
+ import type { SheetData } from "../hooks/use-spreadsheet-state";
6
+ /**
7
+ * Does any cell of `rowIndex` within a table's columns hold a value or formula?
8
+ * Decides whether switching Total Row on must first shift the row below the
9
+ * table down (Excel inserts a row rather than overwrite data).
10
+ */
11
+ export declare const tableRowHasContent: <T extends CellData>(rows: SheetData<T>[number] | undefined, rowIndex: number, startColumnIndex: number, endColumnIndex: number) => boolean;
12
+ /**
13
+ * Excel's Header Row → ON re-adds the header ABOVE the data when the row above the table is free:
14
+ * it exists, holds no value or formula in the table's columns, and belongs to no other table.
15
+ * Otherwise the first data row becomes the header row in place.
16
+ */
17
+ export declare const tableHeaderRowAboveIsFree: <T extends CellData>({ sheetId, table, sheetData, tables, }: {
18
+ sheetId: number;
19
+ table: TableView;
20
+ sheetData: SheetData<T> | undefined;
21
+ tables: TableView[] | undefined;
22
+ }) => boolean;
5
23
  export declare const rangesOverlap: (a: GridRange, b: GridRange) => boolean;
6
24
  export declare const tableWouldOverlap: (candidate: {
7
25
  sheetId: number;
8
26
  range: GridRange;
9
27
  id?: TableView["id"];
10
28
  }, existing: TableView[] | undefined) => boolean;
11
- type AddTableColumnOptions<T extends CellData> = {
29
+ /**
30
+ * Excel: a table's header names are unique, compared case-insensitively — a duplicate takes the
31
+ * next free numeric suffix (`Name`, `Name2`, `Name3`).
32
+ */
33
+ export declare const getUniqueTableColumnName: (name: string, taken: Iterable<string>) => string;
34
+ type TableHeaderNamesOptions = {
12
35
  sheetId: number;
13
- draft: Draft<any>;
14
36
  range: GridRange;
15
37
  getFormattedValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | null | undefined;
16
- locale?: string;
17
38
  generatedNames?: GeneratedNames;
39
+ /** Columns the table already names, by position — kept as they are; only the rest are derived. */
40
+ columns?: (Column | undefined)[] | null;
18
41
  };
19
- export declare const addTableColumn: <T extends CellData>({ draft, sheetId, range, getFormattedValue, locale, generatedNames, }: AddTableColumnOptions<T>) => void;
42
+ /**
43
+ * The header names a table takes over `range` (Excel): a column the table already names keeps
44
+ * that name; every other column takes its header cell's display text, de-duplicated against the
45
+ * names before it (`Name`, `Name2`, …), and a blank header cell takes the first free `ColumnN`.
46
+ */
47
+ export declare const getTableHeaderNames: ({ sheetId, range, getFormattedValue, generatedNames, columns, }: TableHeaderNamesOptions) => string[];
48
+ type AddTableColumnOptions<T extends CellData> = TableHeaderNamesOptions & {
49
+ draft: Draft<any>;
50
+ locale?: string;
51
+ };
52
+ /**
53
+ * Write a table's header row: every header cell holds its column's name as TEXT (Excel stores
54
+ * headers as text — a `2024` header becomes the string "2024"), so a blank, numeric, formula or
55
+ * de-duplicated header cell is (re)written; a text cell already reading its name is left alone.
56
+ * The names come from {@link getTableHeaderNames}, so the table's `columns` and its cells agree.
57
+ */
58
+ export declare const addTableColumn: <T extends CellData>({ draft, sheetId, range, getFormattedValue, locale, generatedNames, columns, }: AddTableColumnOptions<T>) => string[];
59
+ export type TableHeaderRefill = {
60
+ tableId: TableView["id"];
61
+ rowIndex: number;
62
+ columnIndex: number;
63
+ /** Position of the header within `table.columns`. */
64
+ dimensionIndex: number;
65
+ name: string;
66
+ };
67
+ export declare const getTableHeaderRefills: ({ sheetId, tables, selections, generatedNames, }: {
68
+ sheetId: number;
69
+ tables: TableView[] | undefined;
70
+ selections: Pick<SelectionArea, "range">[];
71
+ generatedNames?: GeneratedNames;
72
+ }) => TableHeaderRefill[];
20
73
  export {};
21
74
  //# sourceMappingURL=table-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-utils.d.ts","sourceRoot":"","sources":["../../../interface/table-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAU,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOzD,eAAO,MAAM,aAAa,GAAI,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,OAMxD,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,WAAW;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CAAE,EACtE,UAAU,SAAS,EAAE,GAAG,SAAS,KAChC,OAQF,CAAC;AAEF,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,uEAOhD,qBAAqB,CAAC,CAAC,CAAC,SAoC1B,CAAC"}
1
+ {"version":3,"file":"table-utils.d.ts","sourceRoot":"","sources":["../../../interface/table-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,QAAQ,EACnD,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EACtC,UAAU,MAAM,EAChB,kBAAkB,MAAM,EACxB,gBAAgB,MAAM,KACrB,OAUF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,QAAQ,EAAE,wCAK3D;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;CACjC,KAAG,OAqBH,CAAC;AAKF,eAAO,MAAM,aAAa,GAAI,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,OAMxD,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,WAAW;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CAAE,EACtE,UAAU,SAAS,EAAE,GAAG,SAAS,KAChC,OAQF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,EACZ,OAAO,QAAQ,CAAC,MAAM,CAAC,KACtB,MAaF,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kGAAkG;IAClG,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,iEAMjC,uBAAuB,KAAG,MAAM,EA2BlC,CAAC;AAEF,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI,uBAAuB,GAAG;IACzE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA6BF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,gFAQhD,qBAAqB,CAAC,CAAC,CAAC,aAyC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAMF,eAAO,MAAM,qBAAqB,GAAI,kDAKnC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,KAAG,iBAAiB,EAuCpB,CAAC"}