@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,6 +1,42 @@
1
+ import { getCellUserEnteredValue } from "@rowsncolumns/utils";
1
2
  import { createSheetDraft } from "../api/immer-utils";
2
3
  import { getNextTableColumnName } from "../helpers";
3
4
  import { SheetCell } from "../sheet-cell";
5
+ /**
6
+ * Does any cell of `rowIndex` within a table's columns hold a value or formula?
7
+ * Decides whether switching Total Row on must first shift the row below the
8
+ * table down (Excel inserts a row rather than overwrite data).
9
+ */
10
+ export const tableRowHasContent = (rows, rowIndex, startColumnIndex, endColumnIndex) => {
11
+ const values = rows?.[rowIndex]?.values;
12
+ if (!values)
13
+ return false;
14
+ for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
15
+ const ue = getCellUserEnteredValue(values[columnIndex]);
16
+ if (ue && Object.values(ue).some((value) => value !== undefined && value !== null)) {
17
+ return true;
18
+ }
19
+ }
20
+ return false;
21
+ };
22
+ /**
23
+ * Excel's Header Row → ON re-adds the header ABOVE the data when the row above the table is free:
24
+ * it exists, holds no value or formula in the table's columns, and belongs to no other table.
25
+ * Otherwise the first data row becomes the header row in place.
26
+ */
27
+ export const tableHeaderRowAboveIsFree = ({ sheetId, table, sheetData, tables, }) => {
28
+ const rowIndex = table.range.startRowIndex - 1;
29
+ if (rowIndex < 1)
30
+ return false;
31
+ if (tableRowHasContent(sheetData?.[sheetId], rowIndex, table.range.startColumnIndex, table.range.endColumnIndex)) {
32
+ return false;
33
+ }
34
+ return !tableWouldOverlap({
35
+ sheetId,
36
+ id: table.id,
37
+ range: { ...table.range, startRowIndex: rowIndex, endRowIndex: rowIndex },
38
+ }, tables);
39
+ };
4
40
  // Excel rejects (recovers + drops) tables whose rectangles overlap on the same
5
41
  // sheet. Validate before mutating state so we never accumulate bad data that
6
42
  // later fails to export cleanly.
@@ -15,24 +51,129 @@ export const tableWouldOverlap = (candidate, existing) => {
15
51
  t.id !== candidate.id &&
16
52
  rangesOverlap(t.range, candidate.range));
17
53
  };
18
- export const addTableColumn = ({ draft, sheetId, range, getFormattedValue, locale, generatedNames, }) => {
19
- // Validate first row
20
- const columns = [];
54
+ /**
55
+ * Excel: a table's header names are unique, compared case-insensitively — a duplicate takes the
56
+ * next free numeric suffix (`Name`, `Name2`, `Name3`).
57
+ */
58
+ export const getUniqueTableColumnName = (name, taken) => {
59
+ const lower = new Set();
60
+ for (const existing of taken) {
61
+ lower.add(existing.toLowerCase());
62
+ }
63
+ if (!lower.has(name.toLowerCase())) {
64
+ return name;
65
+ }
66
+ let suffix = 2;
67
+ while (lower.has(`${name}${suffix}`.toLowerCase())) {
68
+ suffix++;
69
+ }
70
+ return `${name}${suffix}`;
71
+ };
72
+ /**
73
+ * The header names a table takes over `range` (Excel): a column the table already names keeps
74
+ * that name; every other column takes its header cell's display text, de-duplicated against the
75
+ * names before it (`Name`, `Name2`, …), and a blank header cell takes the first free `ColumnN`.
76
+ */
77
+ export const getTableHeaderNames = ({ sheetId, range, getFormattedValue, generatedNames, columns, }) => {
78
+ const names = [];
79
+ const reserved = (columns ?? []).flatMap((column) => column?.name ? [{ name: column.name }] : []);
80
+ for (let columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
81
+ const existing = columns?.[columnIndex - range.startColumnIndex]?.name;
82
+ if (existing) {
83
+ names.push(existing);
84
+ continue;
85
+ }
86
+ const text = getFormattedValue(sheetId, range.startRowIndex, columnIndex);
87
+ const taken = [...reserved, ...names.map((name) => ({ name }))];
88
+ names.push(text
89
+ ? getUniqueTableColumnName(text, taken.map((column) => column.name))
90
+ : getNextTableColumnName(taken, generatedNames));
91
+ }
92
+ return names;
93
+ };
94
+ /** True when the cell is plain text (not a number, boolean or formula) reading exactly `text`. */
95
+ const isTextCellReading = (cellData, text, formattedValue) => {
96
+ if (!cellData) {
97
+ return false;
98
+ }
99
+ const ue = cellData.ue;
100
+ const typed = ue?.fv != null ||
101
+ ue?.formulaValue != null ||
102
+ ue?.nv != null ||
103
+ ue?.numberValue != null ||
104
+ ue?.bv != null ||
105
+ ue?.boolValue != null;
106
+ if (typed) {
107
+ return false;
108
+ }
109
+ return (ue?.sv === text ||
110
+ ue?.stringValue === text ||
111
+ (cellData.ss != null && formattedValue === text));
112
+ };
113
+ /**
114
+ * Write a table's header row: every header cell holds its column's name as TEXT (Excel stores
115
+ * headers as text — a `2024` header becomes the string "2024"), so a blank, numeric, formula or
116
+ * de-duplicated header cell is (re)written; a text cell already reading its name is left alone.
117
+ * The names come from {@link getTableHeaderNames}, so the table's `columns` and its cells agree.
118
+ */
119
+ export const addTableColumn = ({ draft, sheetId, range, getFormattedValue, locale, generatedNames, columns, }) => {
120
+ const names = getTableHeaderNames({
121
+ sheetId,
122
+ range,
123
+ getFormattedValue,
124
+ generatedNames,
125
+ columns,
126
+ });
21
127
  const sheetCell = new SheetCell();
22
128
  const currentSheet = createSheetDraft(draft, sheetId, range.startRowIndex);
23
129
  for (let columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
24
- const formattedValue = getFormattedValue(sheetId, range.startRowIndex, columnIndex);
25
- // Get table column name
26
- const columnName = getNextTableColumnName(columns, generatedNames);
27
- // Add name to empty header cell
28
- if (!formattedValue) {
29
- sheetCell.assign(sheetId, { rowIndex: range.startRowIndex, columnIndex }, draft?.[sheetId]?.[range.startRowIndex]?.values?.[columnIndex], { locale });
30
- sheetCell.setUserEnteredValue(columnName);
31
- currentSheet[range.startRowIndex].values[columnIndex] =
32
- sheetCell.getCellData();
130
+ const name = names[columnIndex - range.startColumnIndex];
131
+ const cellData = draft?.[sheetId]?.[range.startRowIndex]?.values?.[columnIndex];
132
+ if (isTextCellReading(cellData, name, getFormattedValue(sheetId, range.startRowIndex, columnIndex))) {
133
+ continue;
33
134
  }
34
- columns.push({
35
- name: formattedValue || columnName,
135
+ sheetCell.assign(sheetId, { rowIndex: range.startRowIndex, columnIndex }, cellData, { locale });
136
+ sheetCell.setUserEnteredValue(name, undefined, {
137
+ disableTypeInference: true,
36
138
  });
139
+ currentSheet[range.startRowIndex].values[columnIndex] =
140
+ sheetCell.getCellData();
141
+ }
142
+ return names;
143
+ };
144
+ // Excel keeps a table under Delete / Clear contents: the cells empty out but
145
+ // the table stays, and a cleared header cell falls back to the first free
146
+ // generic `ColumnN` name — a table column is never nameless. Names the table
147
+ // still uses (uncleared headers) stay reserved so the refills never collide.
148
+ export const getTableHeaderRefills = ({ sheetId, tables, selections, generatedNames, }) => {
149
+ const refills = [];
150
+ for (const table of tables ?? []) {
151
+ if (table.sheetId !== sheetId || table.headerRow === false)
152
+ continue;
153
+ const { startRowIndex: rowIndex, startColumnIndex, endColumnIndex, } = table.range;
154
+ const cleared = new Set();
155
+ for (const { range } of selections) {
156
+ if (rowIndex < range.startRowIndex || rowIndex > range.endRowIndex) {
157
+ continue;
158
+ }
159
+ for (let columnIndex = Math.max(startColumnIndex, range.startColumnIndex); columnIndex <= Math.min(endColumnIndex, range.endColumnIndex); columnIndex++) {
160
+ cleared.add(columnIndex);
161
+ }
162
+ }
163
+ if (!cleared.size)
164
+ continue;
165
+ const columns = (table.columns ?? []).filter((_, dimensionIndex) => !cleared.has(startColumnIndex + dimensionIndex));
166
+ for (const columnIndex of [...cleared].sort((a, b) => a - b)) {
167
+ const name = getNextTableColumnName(columns, generatedNames);
168
+ columns.push({ name });
169
+ refills.push({
170
+ tableId: table.id,
171
+ rowIndex,
172
+ columnIndex,
173
+ dimensionIndex: columnIndex - startColumnIndex,
174
+ name,
175
+ });
176
+ }
37
177
  }
178
+ return refills;
38
179
  };
@@ -1,4 +1,19 @@
1
+ import type { GridRange } from "@rowsncolumns/common-types";
1
2
  import type { CellData, Sheet, TableView } from "@rowsncolumns/spreadsheet";
2
3
  import type { UseOnTableProps } from "../hooks/use-on-table";
3
- export declare const updateTable: <T extends CellData, S extends Sheet>({ locale, tables, enqueueCalculation, createHistory, onChangeTables, onChangeSheetData, getFormattedValue, getDependents, generatedNames, }: Pick<UseOnTableProps<T, S>, "locale" | "tables" | "enqueueCalculation" | "getDependents" | "createHistory" | "onChangeTables" | "onChangeSheetData" | "getFormattedValue" | "generatedNames">) => (sheetId: number, tableId: TableView["id"], updatedTable: Partial<TableView>) => void;
4
+ /**
5
+ * The range an update gives `table`: an explicit range that differs from the current one is taken
6
+ * as is (Excel's Resize Table — the dialog's range wins, whatever toggles ride along); else the
7
+ * current range grown by one row when the update turns the total row on and shrunk by one when it
8
+ * turns it off, with the header row toggle moving the top edge (Excel): OFF drops the header row
9
+ * out of the table (the range starts one row lower — never past the last data row), ON re-adds a
10
+ * header row ABOVE the data when `headerRowAboveIsFree` (see `tableHeaderRowAboveIsFree`), else
11
+ * the first data row becomes the header in place. Same rule as the rnc engine's
12
+ * `table_spec_range`. The hook's refusal guard and the update itself must agree on it, so both
13
+ * resolve it here.
14
+ */
15
+ export declare const resolveUpdatedTableRange: (table: TableView, updatedTable: Partial<TableView>, { headerRowAboveIsFree }?: {
16
+ headerRowAboveIsFree?: boolean;
17
+ }) => GridRange;
18
+ export declare const updateTable: <T extends CellData, S extends Sheet>({ locale, tables, namedRanges, enqueueCalculation, enqueueGraphOperation, getGraphNodes, createHistory, onChangeTables, onChangeSheetData, getFormattedValue, getDependents, generatedNames, sheetData, rowCount, columnCount, cellXfsRegistry, sharedStringRegistry, getSheetName, getActiveCell, enqueueStructureChange, onChangeSheets, onChangeDataValidations, onChangeConditionalFormats, }: Pick<UseOnTableProps<T, S>, "locale" | "tables" | "namedRanges" | "enqueueCalculation" | "getDependents" | "createHistory" | "onChangeTables" | "onChangeSheetData" | "getFormattedValue" | "generatedNames" | "sheetData" | "rowCount" | "columnCount" | "cellXfsRegistry" | "sharedStringRegistry" | "getSheetName" | "getActiveCell" | "enqueueGraphOperation" | "enqueueStructureChange" | "onChangeSheets" | "onChangeDataValidations" | "onChangeConditionalFormats"> & Partial<Pick<UseOnTableProps<T, S>, "getGraphNodes">>) => (sheetId: number, tableId: TableView["id"], updatedTable: Partial<TableView>) => void;
4
19
  //# sourceMappingURL=update-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-table.d.ts","sourceRoot":"","sources":["../../../interface/update-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,6IAU9D,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,QAAQ,GACR,QAAQ,GACR,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,CACnB,MAEG,SAAS,MAAM,EACf,SAAS,SAAS,CAAC,IAAI,CAAC,EACxB,cAAc,OAAO,CAAC,SAAS,CAAC,SA0JnC,CAAC"}
1
+ {"version":3,"file":"update-table.d.ts","sourceRoot":"","sources":["../../../interface/update-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAEV,QAAQ,EACR,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAOnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAyB7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GACnC,OAAO,SAAS,EAChB,cAAc,OAAO,CAAC,SAAS,CAAC,EAChC,2BAAkC;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAO,KACxE,SA2BF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,mYAwB9D,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,uBAAuB,GACvB,wBAAwB,GACxB,gBAAgB,GAChB,yBAAyB,GACzB,4BAA4B,CAC/B,GACC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,MAEnD,SAAS,MAAM,EACf,SAAS,SAAS,CAAC,IAAI,CAAC,EACxB,cAAc,OAAO,CAAC,SAAS,CAAC,SAmTnC,CAAC"}
@@ -1,9 +1,55 @@
1
+ import { validateTableName } from "@rowsncolumns/utils";
1
2
  import { produceWithPatches } from "immer";
3
+ import { createSheetDraft } from "../api/immer-utils";
4
+ import { renameTableInFormulas } from "../api/structural-table-refs";
2
5
  import { getGeneratedTableColumnName } from "../generated-names";
6
+ import { SheetCell } from "../sheet-cell";
7
+ import { getRowRelativeFormula } from "./change-table-column";
3
8
  import { markTableAsDirty } from "./helpers";
4
- import { addTotalRow, removeTotalRow } from "./table-totalrow";
5
- import { addTableColumn, tableWouldOverlap } from "./table-utils";
6
- export const updateTable = ({ locale, tables, enqueueCalculation, createHistory, onChangeTables, onChangeSheetData, getFormattedValue, getDependents, generatedNames, }) => {
9
+ import { insertTableRow } from "./insert-table-row";
10
+ import { addTotalRow, removeTotalRow, setTotalRowFunctions, } from "./table-totalrow";
11
+ import { addTableColumn, getTableHeaderNames, tableHeaderRowAboveIsFree, tableRowHasContent, tableWouldOverlap, } from "./table-utils";
12
+ const isSameRange = (a, b) => a.startRowIndex === b.startRowIndex &&
13
+ a.endRowIndex === b.endRowIndex &&
14
+ a.startColumnIndex === b.startColumnIndex &&
15
+ a.endColumnIndex === b.endColumnIndex;
16
+ /**
17
+ * The range an update gives `table`: an explicit range that differs from the current one is taken
18
+ * as is (Excel's Resize Table — the dialog's range wins, whatever toggles ride along); else the
19
+ * current range grown by one row when the update turns the total row on and shrunk by one when it
20
+ * turns it off, with the header row toggle moving the top edge (Excel): OFF drops the header row
21
+ * out of the table (the range starts one row lower — never past the last data row), ON re-adds a
22
+ * header row ABOVE the data when `headerRowAboveIsFree` (see `tableHeaderRowAboveIsFree`), else
23
+ * the first data row becomes the header in place. Same rule as the rnc engine's
24
+ * `table_spec_range`. The hook's refusal guard and the update itself must agree on it, so both
25
+ * resolve it here.
26
+ */
27
+ export const resolveUpdatedTableRange = (table, updatedTable, { headerRowAboveIsFree = false } = {}) => {
28
+ if (updatedTable.range && !isSameRange(updatedTable.range, table.range)) {
29
+ return updatedTable.range;
30
+ }
31
+ let range = table.range;
32
+ const hadTotalRow = table.totalRow === true;
33
+ const willHaveTotalRow = "totalRow" in updatedTable ? updatedTable.totalRow === true : hadTotalRow;
34
+ if (hadTotalRow !== willHaveTotalRow) {
35
+ range = {
36
+ ...range,
37
+ endRowIndex: range.endRowIndex + (willHaveTotalRow ? 1 : -1),
38
+ };
39
+ }
40
+ const hadHeaderRow = table.headerRow !== false;
41
+ const willHaveHeaderRow = "headerRow" in updatedTable ? updatedTable.headerRow !== false : hadHeaderRow;
42
+ if (hadHeaderRow &&
43
+ !willHaveHeaderRow &&
44
+ range.endRowIndex - (willHaveTotalRow ? 1 : 0) > range.startRowIndex) {
45
+ range = { ...range, startRowIndex: range.startRowIndex + 1 };
46
+ }
47
+ else if (!hadHeaderRow && willHaveHeaderRow && headerRowAboveIsFree) {
48
+ range = { ...range, startRowIndex: range.startRowIndex - 1 };
49
+ }
50
+ return range;
51
+ };
52
+ export const updateTable = ({ locale, tables, namedRanges, enqueueCalculation, enqueueGraphOperation, getGraphNodes, createHistory, onChangeTables, onChangeSheetData, getFormattedValue, getDependents, generatedNames, sheetData, rowCount, columnCount, cellXfsRegistry, sharedStringRegistry, getSheetName, getActiveCell, enqueueStructureChange, onChangeSheets, onChangeDataValidations, onChangeConditionalFormats, }) => {
7
53
  return (sheetId, tableId, updatedTable) => {
8
54
  const saveHistory = createHistory();
9
55
  const table = tables?.find((table) => table.id === tableId);
@@ -16,6 +62,12 @@ export const updateTable = ({ locale, tables, enqueueCalculation, createHistory,
16
62
  tableWouldOverlap({ sheetId, range: updatedTable.range, id: tableId }, tables)) {
17
63
  return;
18
64
  }
65
+ // A rename must yield a valid Excel table name no other table or defined name uses.
66
+ if (updatedTable.title !== undefined &&
67
+ updatedTable.title !== table.title &&
68
+ validateTableName(updatedTable.title, tables?.filter((t) => t.id !== tableId).map((t) => t.title), namedRanges?.map((namedRange) => namedRange.name))) {
69
+ return;
70
+ }
19
71
  // Resolve the fully-merged table up front so every consumer below —
20
72
  // including the totals-row handlers, which run outside the state
21
73
  // updaters — sees a concrete range and columns even when callers pass a
@@ -24,24 +76,58 @@ export const updateTable = ({ locale, tables, enqueueCalculation, createHistory,
24
76
  ...table,
25
77
  ...updatedTable,
26
78
  };
79
+ newTable.range = resolveUpdatedTableRange(table, updatedTable, {
80
+ headerRowAboveIsFree: tableHeaderRowAboveIsFree({
81
+ sheetId,
82
+ table,
83
+ sheetData,
84
+ tables,
85
+ }),
86
+ });
27
87
  const newColumnLength = newTable.range.endColumnIndex - newTable.range.startColumnIndex + 1;
28
- if (newTable.headerRow) {
29
- let emptyColumnCounter = newTable.columns?.length ?? 0;
30
- if (!newTable.columns) {
31
- newTable.columns = [];
32
- }
33
- // Set length
34
- newTable.columns = newTable.columns.slice(0, newColumnLength);
35
- for (let columnIndex = newTable.range.startColumnIndex; columnIndex <= newTable.range.endColumnIndex; columnIndex++) {
36
- const formattedValue = getFormattedValue(sheetId, newTable.range.startRowIndex, columnIndex);
37
- const colIndex = columnIndex - newTable.range.startColumnIndex;
38
- if (!newTable.columns[colIndex]) {
39
- newTable.columns[colIndex] = {
40
- name: formattedValue ||
41
- getGeneratedTableColumnName(++emptyColumnCounter, generatedNames),
42
- };
43
- }
44
- }
88
+ if (newTable.headerRow !== false) {
89
+ // Existing columns keep their names; new ones take their header cell's text, de-duplicated
90
+ // (`Name`, `Name2`, …), or the first free `ColumnN` when blank (Excel).
91
+ const existingColumns = (newTable.columns ?? []).slice(0, newColumnLength);
92
+ newTable.columns = getTableHeaderNames({
93
+ sheetId,
94
+ range: newTable.range,
95
+ getFormattedValue,
96
+ generatedNames,
97
+ columns: existingColumns,
98
+ }).map((name, index) => existingColumns[index] ?? { name });
99
+ }
100
+ // Header row toggle (Excel's Table Design → Header Row). OFF clears the header cells' text
101
+ // and drops that row out of the table (`resolveUpdatedTableRange`); the table remembers its
102
+ // column names (`columns[].name`). ON writes the remembered names into the header row — the
103
+ // row above the data when it was free, else the first data row. Both land in this update's
104
+ // history step.
105
+ const hadHeaderRow = table.headerRow !== false;
106
+ const willHaveHeaderRow = "headerRow" in updatedTable
107
+ ? updatedTable.headerRow !== false
108
+ : hadHeaderRow;
109
+ if (willHaveHeaderRow && !hadHeaderRow && !newTable.columns?.length) {
110
+ newTable.columns = Array.from({ length: newColumnLength }, (_, i) => ({
111
+ name: getGeneratedTableColumnName(i + 1, generatedNames),
112
+ }));
113
+ }
114
+ // A recorded calculated-column formula is written for the first body row, which the toggle
115
+ // moves when the header row takes or leaves a data row in place.
116
+ const previousFirstBodyRowIndex = table.range.startRowIndex + (hadHeaderRow ? 1 : 0);
117
+ const nextFirstBodyRowIndex = newTable.range.startRowIndex + (willHaveHeaderRow ? 1 : 0);
118
+ if (previousFirstBodyRowIndex !== nextFirstBodyRowIndex &&
119
+ newTable.columns?.length) {
120
+ const from = previousFirstBodyRowIndex;
121
+ const to = nextFirstBodyRowIndex;
122
+ newTable.columns = newTable.columns.map((column, i) => {
123
+ const formula = column.formula;
124
+ return formula
125
+ ? {
126
+ ...column,
127
+ formula: getRowRelativeFormula(formula, table.range.startColumnIndex + i, from, to, getSheetName?.(sheetId)),
128
+ }
129
+ : column;
130
+ });
45
131
  }
46
132
  // Total row has changed
47
133
  // Only adjust range if totalRow is actually being toggled — a partial
@@ -50,34 +136,90 @@ export const updateTable = ({ locale, tables, enqueueCalculation, createHistory,
50
136
  const willHaveTotalRow = "totalRow" in updatedTable
51
137
  ? updatedTable.totalRow === true
52
138
  : hadTotalRow;
53
- if (hadTotalRow !== willHaveTotalRow) {
54
- let newEndRowIndex = newTable.range.endRowIndex;
55
- if (willHaveTotalRow) {
56
- // User has added a total row
57
- newEndRowIndex++;
58
- }
59
- else {
60
- // User has removed a total row
61
- newEndRowIndex--;
139
+ if (!hadTotalRow && willHaveTotalRow) {
140
+ // Excel inserts a row rather than overwrite data: when the row the
141
+ // totals go into already holds values, shift the table's column band
142
+ // down by one first (same history step, so one undo reverts both).
143
+ // The hook refuses the toggle beforehand when that shift would tear
144
+ // another table, a merge or an array.
145
+ if (tableRowHasContent(sheetData?.[sheetId], table.range.endRowIndex + 1, table.range.startColumnIndex, table.range.endColumnIndex)) {
146
+ insertTableRow({
147
+ rowCount,
148
+ columnCount,
149
+ locale,
150
+ cellXfsRegistry,
151
+ sharedStringRegistry,
152
+ getActiveCell,
153
+ getDependents,
154
+ getSheetName,
155
+ createHistory,
156
+ enqueueGraphOperation,
157
+ enqueueCalculation,
158
+ enqueueStructureChange,
159
+ onChangeSheetData,
160
+ onChangeSheets,
161
+ onChangeTables,
162
+ onChangeDataValidations,
163
+ onChangeConditionalFormats,
164
+ })(table, table.range.endRowIndex - table.range.startRowIndex + 1, undefined, saveHistory);
62
165
  }
63
- newTable.range = {
64
- ...newTable.range,
65
- endRowIndex: newEndRowIndex,
66
- };
67
166
  }
167
+ // Renaming the table: Excel rewrites `Old[…]` → `New[…]` in every formula.
168
+ const renamedTable = updatedTable.title && table.title && updatedTable.title !== table.title
169
+ ? { oldName: table.title, newName: updatedTable.title }
170
+ : undefined;
171
+ const recalcCells = new Map();
68
172
  // Update sheet data
69
173
  onChangeSheetData?.((prevSheetData) => {
70
174
  const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
71
- addTableColumn({
72
- draft,
73
- getFormattedValue,
74
- sheetId,
75
- range: updatedTable.range ?? table.range,
76
- locale,
77
- });
175
+ if (renamedTable) {
176
+ renameTableInFormulas({
177
+ draft,
178
+ ...renamedTable,
179
+ getGraphNodes,
180
+ enqueueCalculation,
181
+ enqueueGraphOperation,
182
+ recalcCells,
183
+ locale,
184
+ });
185
+ }
186
+ if (hadHeaderRow !== willHaveHeaderRow) {
187
+ const { startColumnIndex, endColumnIndex } = newTable.range;
188
+ // OFF clears the row that WAS the header (it left the table); ON writes the new one.
189
+ const startRowIndex = willHaveHeaderRow
190
+ ? newTable.range.startRowIndex
191
+ : table.range.startRowIndex;
192
+ const sheetCell = new SheetCell();
193
+ const headerRow = createSheetDraft(draft, sheetId, startRowIndex);
194
+ for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
195
+ sheetCell.assign(sheetId, { rowIndex: startRowIndex, columnIndex }, willHaveHeaderRow
196
+ ? headerRow[startRowIndex].values[columnIndex]
197
+ : undefined, { locale });
198
+ if (willHaveHeaderRow) {
199
+ sheetCell.setUserEnteredValue(newTable.columns?.[columnIndex - startColumnIndex]?.name ??
200
+ "");
201
+ }
202
+ headerRow[startRowIndex].values[columnIndex] =
203
+ sheetCell.getCellData();
204
+ }
205
+ }
206
+ else if (willHaveHeaderRow) {
207
+ addTableColumn({
208
+ draft,
209
+ getFormattedValue,
210
+ sheetId,
211
+ range: updatedTable.range ?? table.range,
212
+ locale,
213
+ generatedNames,
214
+ columns: newTable.columns,
215
+ });
216
+ }
78
217
  });
79
218
  saveHistory({
80
219
  sheetData: { patches, inversePatches },
220
+ ...(recalcCells.size
221
+ ? { recalcCells: { undo: recalcCells, redo: recalcCells } }
222
+ : {}),
81
223
  });
82
224
  return nextState;
83
225
  });
@@ -90,8 +232,11 @@ export const updateTable = ({ locale, tables, enqueueCalculation, createHistory,
90
232
  draft[tableIndex] = newTable;
91
233
  }
92
234
  });
93
- // Mark table cells as dirty
94
- const recalcCells = markTableAsDirty(table.sheetId, newTable.range, getDependents, enqueueCalculation);
235
+ // Mark table cells as dirty — a header row that just left the table included.
236
+ const recalcCells = markTableAsDirty(table.sheetId, {
237
+ ...newTable.range,
238
+ startRowIndex: Math.min(table.range.startRowIndex, newTable.range.startRowIndex),
239
+ }, getDependents, enqueueCalculation);
95
240
  saveHistory({
96
241
  tables: { patches, inversePatches },
97
242
  recalcCells: { undo: recalcCells, redo: recalcCells },
@@ -107,5 +252,21 @@ export const updateTable = ({ locale, tables, enqueueCalculation, createHistory,
107
252
  removeTotalRow({ locale, onChangeSheetData, enqueueCalculation })(sheetId, newTable, saveHistory);
108
253
  }
109
254
  }
255
+ else if (willHaveTotalRow && updatedTable.columns) {
256
+ // The totals row stays on and the update re-declares the columns: a
257
+ // column whose `totalsRowFunction` changed (the totals dropdown) gets its
258
+ // totals cell rewritten — the recorded function is the source of truth,
259
+ // the cell is derived from it.
260
+ const changedColumnIndexes = [];
261
+ newTable.columns?.forEach((column, index) => {
262
+ const previous = table.columns?.[index]?.totalsRowFunction ?? undefined;
263
+ if ((column.totalsRowFunction ?? undefined) !== previous) {
264
+ changedColumnIndexes.push(newTable.range.startColumnIndex + index);
265
+ }
266
+ });
267
+ if (changedColumnIndexes.length) {
268
+ setTotalRowFunctions({ locale, onChangeSheetData, enqueueCalculation })(sheetId, newTable, changedColumnIndexes, saveHistory);
269
+ }
270
+ }
110
271
  };
111
272
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-cell.d.ts","sourceRoot":"","sources":["../../sheet-cell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sheet-cell.d.ts","sourceRoot":"","sources":["../../sheet-cell.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../test-setup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../test-setup.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC"}
@@ -1,3 +1,9 @@
1
+ import { configure } from "@testing-library/react";
1
2
  import { enableMapSet, enablePatches } from "immer";
2
3
  enablePatches();
3
4
  enableMapSet();
5
+ // The calculation hooks resolve through an inline worker (microtask hops per message, ~150
6
+ // `waitFor` calls across `use-calculation*.spec.ts`); on a loaded CI runner a round trip can
7
+ // outlive Testing Library's 1000ms default (#668 T-120). A settled assertion returns at once, so
8
+ // the larger budget only matters when the runner is slow.
9
+ configure({ asyncUtilTimeout: 15_000 });