@rowsncolumns/spreadsheet-state 28.0.76 → 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 (633) 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 +8 -2
  5. package/dist/cjs/api/copy-paste.d.ts.map +1 -1
  6. package/dist/cjs/api/copy-paste.js +4 -4
  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/immer-utils.d.ts +11 -1
  14. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  15. package/dist/cjs/api/immer-utils.js +17 -1
  16. package/dist/cjs/api/insert-cut-cells.d.ts +35 -0
  17. package/dist/cjs/api/insert-cut-cells.d.ts.map +1 -0
  18. package/dist/cjs/api/insert-cut-cells.js +60 -0
  19. package/dist/cjs/api/merges.d.ts +8 -0
  20. package/dist/cjs/api/merges.d.ts.map +1 -1
  21. package/dist/cjs/api/merges.js +11 -0
  22. package/dist/cjs/api/paint-format.d.ts +22 -1
  23. package/dist/cjs/api/paint-format.d.ts.map +1 -1
  24. package/dist/cjs/api/paint-format.js +57 -1
  25. package/dist/cjs/api/sort.d.ts +23 -1
  26. package/dist/cjs/api/sort.d.ts.map +1 -1
  27. package/dist/cjs/api/sort.js +52 -6
  28. package/dist/cjs/api/structural-guards.d.ts +57 -0
  29. package/dist/cjs/api/structural-guards.d.ts.map +1 -1
  30. package/dist/cjs/api/structural-guards.js +93 -1
  31. package/dist/cjs/api/structural-table-refs.d.ts +58 -3
  32. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
  33. package/dist/cjs/api/structural-table-refs.js +177 -16
  34. package/dist/cjs/api/subtotal.d.ts +20 -13
  35. package/dist/cjs/api/subtotal.d.ts.map +1 -1
  36. package/dist/cjs/api/subtotal.js +26 -19
  37. package/dist/cjs/api/table.d.ts +26 -2
  38. package/dist/cjs/api/table.d.ts.map +1 -1
  39. package/dist/cjs/api/table.js +93 -60
  40. package/dist/cjs/api/validation.d.ts.map +1 -1
  41. package/dist/cjs/api/validation.js +53 -8
  42. package/dist/cjs/atoms/creating-table.atom.d.ts +22 -0
  43. package/dist/cjs/atoms/creating-table.atom.d.ts.map +1 -0
  44. package/dist/cjs/atoms/creating-table.atom.js +4 -0
  45. package/dist/cjs/atoms/dialog-state.atom.d.ts +8 -0
  46. package/dist/cjs/atoms/dialog-state.atom.d.ts.map +1 -1
  47. package/dist/cjs/atoms/dialog-state.atom.js +28 -0
  48. package/dist/cjs/atoms/editing-slicer.atom.d.ts +9 -0
  49. package/dist/cjs/atoms/editing-slicer.atom.d.ts.map +1 -0
  50. package/dist/cjs/atoms/editing-slicer.atom.js +6 -0
  51. package/dist/cjs/atoms/index.d.ts +4 -0
  52. package/dist/cjs/atoms/index.d.ts.map +1 -1
  53. package/dist/cjs/atoms/index.js +4 -0
  54. package/dist/cjs/atoms/inserting-slicer.atom.d.ts +8 -0
  55. package/dist/cjs/atoms/inserting-slicer.atom.d.ts.map +1 -0
  56. package/dist/cjs/atoms/inserting-slicer.atom.js +5 -0
  57. package/dist/cjs/atoms/resizing-table.atom.d.ts +8 -0
  58. package/dist/cjs/atoms/resizing-table.atom.d.ts.map +1 -0
  59. package/dist/cjs/atoms/resizing-table.atom.js +5 -0
  60. package/dist/cjs/commands.d.ts +138 -2
  61. package/dist/cjs/commands.d.ts.map +1 -1
  62. package/dist/cjs/components/editors/embed-editor.d.ts +4 -2
  63. package/dist/cjs/components/editors/embed-editor.d.ts.map +1 -1
  64. package/dist/cjs/components/editors/embed-editor.js +38 -9
  65. package/dist/cjs/components/editors/slicer-editor.d.ts +15 -0
  66. package/dist/cjs/components/editors/slicer-editor.d.ts.map +1 -0
  67. package/dist/cjs/components/editors/slicer-editor.js +87 -0
  68. package/dist/cjs/components/editors/table-editor.d.ts +58 -2
  69. package/dist/cjs/components/editors/table-editor.d.ts.map +1 -1
  70. package/dist/cjs/components/editors/table-editor.js +261 -20
  71. package/dist/cjs/components/index.d.ts +1 -0
  72. package/dist/cjs/components/index.d.ts.map +1 -1
  73. package/dist/cjs/components/index.js +1 -0
  74. package/dist/cjs/constants.d.ts +9 -1
  75. package/dist/cjs/constants.d.ts.map +1 -1
  76. package/dist/cjs/constants.js +12 -0
  77. package/dist/cjs/generated-names.d.ts +13 -3
  78. package/dist/cjs/generated-names.d.ts.map +1 -1
  79. package/dist/cjs/generated-names.js +3 -1
  80. package/dist/cjs/helpers.d.ts +5 -0
  81. package/dist/cjs/helpers.d.ts.map +1 -1
  82. package/dist/cjs/helpers.js +10 -1
  83. package/dist/cjs/hooks/use-on-change-batch.d.ts +19 -2
  84. package/dist/cjs/hooks/use-on-change-batch.d.ts.map +1 -1
  85. package/dist/cjs/hooks/use-on-change-batch.js +43 -35
  86. package/dist/cjs/hooks/use-on-change-calculated-column.d.ts +10 -1
  87. package/dist/cjs/hooks/use-on-change-calculated-column.d.ts.map +1 -1
  88. package/dist/cjs/hooks/use-on-change-calculated-column.js +17 -5
  89. package/dist/cjs/hooks/use-on-change-table-column.d.ts +6 -1
  90. package/dist/cjs/hooks/use-on-change-table-column.d.ts.map +1 -1
  91. package/dist/cjs/hooks/use-on-change-table-column.js +17 -5
  92. package/dist/cjs/hooks/use-on-change.d.ts +36 -3
  93. package/dist/cjs/hooks/use-on-change.d.ts.map +1 -1
  94. package/dist/cjs/hooks/use-on-change.js +218 -136
  95. package/dist/cjs/hooks/use-on-copy.d.ts +1 -1
  96. package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
  97. package/dist/cjs/hooks/use-on-copy.js +2 -3
  98. package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts +17 -0
  99. package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
  100. package/dist/cjs/hooks/use-on-create-custom-table-style.js +28 -0
  101. package/dist/cjs/hooks/use-on-create-named-range.d.ts +4 -2
  102. package/dist/cjs/hooks/use-on-create-named-range.d.ts.map +1 -1
  103. package/dist/cjs/hooks/use-on-create-named-range.js +11 -1
  104. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
  105. package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  106. package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +3 -1
  107. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
  108. package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  109. package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +3 -1
  110. package/dist/cjs/hooks/use-on-delete-column.d.ts +2 -1
  111. package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
  112. package/dist/cjs/hooks/use-on-delete-column.js +3 -1
  113. package/dist/cjs/hooks/use-on-delete-row.d.ts +2 -1
  114. package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
  115. package/dist/cjs/hooks/use-on-delete-row.js +3 -1
  116. package/dist/cjs/hooks/use-on-delete-sheet.d.ts +9 -1
  117. package/dist/cjs/hooks/use-on-delete-sheet.d.ts.map +1 -1
  118. package/dist/cjs/hooks/use-on-delete-sheet.js +17 -1
  119. package/dist/cjs/hooks/use-on-delete-table-row.d.ts +4 -1
  120. package/dist/cjs/hooks/use-on-delete-table-row.d.ts.map +1 -1
  121. package/dist/cjs/hooks/use-on-delete-table-row.js +19 -1
  122. package/dist/cjs/hooks/use-on-delete.d.ts +5 -2
  123. package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
  124. package/dist/cjs/hooks/use-on-delete.js +5 -1
  125. package/dist/cjs/hooks/use-on-embeds.d.ts +7 -4
  126. package/dist/cjs/hooks/use-on-embeds.d.ts.map +1 -1
  127. package/dist/cjs/hooks/use-on-embeds.js +26 -24
  128. package/dist/cjs/hooks/use-on-fill.d.ts +17 -2
  129. package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
  130. package/dist/cjs/hooks/use-on-fill.js +29 -15
  131. package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
  132. package/dist/cjs/hooks/use-on-filter-table.js +209 -103
  133. package/dist/cjs/hooks/use-on-import-excel.d.ts +2 -1
  134. package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
  135. package/dist/cjs/hooks/use-on-import-excel.js +22 -19
  136. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
  137. package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  138. package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +3 -1
  139. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
  140. package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  141. package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +3 -1
  142. package/dist/cjs/hooks/use-on-insert-column.d.ts +2 -1
  143. package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
  144. package/dist/cjs/hooks/use-on-insert-column.js +3 -1
  145. package/dist/cjs/hooks/use-on-insert-row.d.ts +2 -1
  146. package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
  147. package/dist/cjs/hooks/use-on-insert-row.js +3 -1
  148. package/dist/cjs/hooks/use-on-insert-table-row.d.ts +5 -2
  149. package/dist/cjs/hooks/use-on-insert-table-row.d.ts.map +1 -1
  150. package/dist/cjs/hooks/use-on-insert-table-row.js +19 -1
  151. package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
  152. package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  153. package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +14 -1
  154. package/dist/cjs/hooks/use-on-move-columns.d.ts +4 -1
  155. package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
  156. package/dist/cjs/hooks/use-on-move-columns.js +28 -6
  157. package/dist/cjs/hooks/use-on-move-rows.d.ts +18 -1
  158. package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
  159. package/dist/cjs/hooks/use-on-move-rows.js +44 -6
  160. package/dist/cjs/hooks/use-on-move-selection.d.ts +9 -2
  161. package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
  162. package/dist/cjs/hooks/use-on-move-selection.js +101 -25
  163. package/dist/cjs/hooks/use-on-paste.d.ts +33 -2
  164. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  165. package/dist/cjs/hooks/use-on-paste.js +1005 -740
  166. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts +5 -2
  167. package/dist/cjs/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  168. package/dist/cjs/hooks/use-on-remove-duplicates.js +5 -1
  169. package/dist/cjs/hooks/use-on-request-create-table.d.ts +13 -0
  170. package/dist/cjs/hooks/use-on-request-create-table.d.ts.map +1 -0
  171. package/dist/cjs/hooks/use-on-request-create-table.js +44 -0
  172. package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts +7 -0
  173. package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
  174. package/dist/cjs/hooks/use-on-request-insert-slicer.js +15 -0
  175. package/dist/cjs/hooks/use-on-request-resize-table.d.ts +7 -0
  176. package/dist/cjs/hooks/use-on-request-resize-table.d.ts.map +1 -0
  177. package/dist/cjs/hooks/use-on-request-resize-table.js +15 -0
  178. package/dist/cjs/hooks/use-on-resize-table.d.ts +5 -1
  179. package/dist/cjs/hooks/use-on-resize-table.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-on-resize-table.js +110 -33
  181. package/dist/cjs/hooks/use-on-sort-column.d.ts +28 -3
  182. package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
  183. package/dist/cjs/hooks/use-on-sort-column.js +136 -90
  184. package/dist/cjs/hooks/use-on-sort-range.d.ts +26 -3
  185. package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-on-sort-range.js +113 -67
  187. package/dist/cjs/hooks/use-on-sort-table.d.ts +18 -1
  188. package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
  189. package/dist/cjs/hooks/use-on-sort-table.js +128 -98
  190. package/dist/cjs/hooks/use-on-subtotal.d.ts +10 -3
  191. package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -1
  192. package/dist/cjs/hooks/use-on-subtotal.js +13 -9
  193. package/dist/cjs/hooks/use-on-table.d.ts +39 -7
  194. package/dist/cjs/hooks/use-on-table.d.ts.map +1 -1
  195. package/dist/cjs/hooks/use-on-table.js +257 -49
  196. package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts +23 -0
  197. package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
  198. package/dist/cjs/hooks/use-on-undo-calculated-column.js +70 -0
  199. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
  200. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
  201. package/dist/cjs/hooks/use-on-undo-table-auto-expansion.js +96 -0
  202. package/dist/cjs/hooks/use-on-update-named-range.d.ts +4 -2
  203. package/dist/cjs/hooks/use-on-update-named-range.d.ts.map +1 -1
  204. package/dist/cjs/hooks/use-on-update-named-range.js +13 -1
  205. package/dist/cjs/hooks/use-sheet-properties.d.ts +1 -0
  206. package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
  207. package/dist/cjs/hooks/use-sheet-properties.js +54 -34
  208. package/dist/cjs/hooks/use-slicers.d.ts +2 -2
  209. package/dist/cjs/hooks/use-slicers.d.ts.map +1 -1
  210. package/dist/cjs/hooks/use-slicers.js +17 -26
  211. package/dist/cjs/hooks/use-sparkline-groups.d.ts +50 -0
  212. package/dist/cjs/hooks/use-sparkline-groups.d.ts.map +1 -0
  213. package/dist/cjs/hooks/use-sparkline-groups.js +192 -0
  214. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +69 -12
  215. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  216. package/dist/cjs/hooks/use-spreadsheet-state.js +383 -84
  217. package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
  218. package/dist/cjs/hooks/use-structured-reference.js +17 -0
  219. package/dist/cjs/hooks/use-undo-redo-actions.d.ts +2 -1
  220. package/dist/cjs/hooks/use-undo-redo-actions.d.ts.map +1 -1
  221. package/dist/cjs/hooks/use-undo-redo-actions.js +10 -2
  222. package/dist/cjs/hooks/use-undo-redo.d.ts +12 -0
  223. package/dist/cjs/hooks/use-undo-redo.d.ts.map +1 -1
  224. package/dist/cjs/hooks/use-undo-redo.js +169 -10
  225. package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
  226. package/dist/cjs/hooks/utils/sort-rows.js +4 -3
  227. package/dist/cjs/index.d.ts +8 -0
  228. package/dist/cjs/index.d.ts.map +1 -1
  229. package/dist/cjs/index.js +9 -0
  230. package/dist/cjs/interface/apply-fill.d.ts +26 -3
  231. package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
  232. package/dist/cjs/interface/apply-fill.js +207 -98
  233. package/dist/cjs/interface/change-batch.d.ts +1 -1
  234. package/dist/cjs/interface/change-batch.d.ts.map +1 -1
  235. package/dist/cjs/interface/change-batch.js +112 -15
  236. package/dist/cjs/interface/change-calculated-column.d.ts +6 -2
  237. package/dist/cjs/interface/change-calculated-column.d.ts.map +1 -1
  238. package/dist/cjs/interface/change-calculated-column.js +87 -17
  239. package/dist/cjs/interface/change-table-column.d.ts +81 -7
  240. package/dist/cjs/interface/change-table-column.d.ts.map +1 -1
  241. package/dist/cjs/interface/change-table-column.js +336 -76
  242. package/dist/cjs/interface/create-table.d.ts +15 -3
  243. package/dist/cjs/interface/create-table.d.ts.map +1 -1
  244. package/dist/cjs/interface/create-table.js +100 -25
  245. package/dist/cjs/interface/delete-cells-shift-left.d.ts +1 -1
  246. package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
  247. package/dist/cjs/interface/delete-cells-shift-left.js +10 -1
  248. package/dist/cjs/interface/delete-cells-shift-up.d.ts +1 -1
  249. package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
  250. package/dist/cjs/interface/delete-cells-shift-up.js +10 -1
  251. package/dist/cjs/interface/delete-cells.d.ts +1 -1
  252. package/dist/cjs/interface/delete-cells.d.ts.map +1 -1
  253. package/dist/cjs/interface/delete-cells.js +81 -25
  254. package/dist/cjs/interface/delete-column.d.ts +1 -1
  255. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  256. package/dist/cjs/interface/delete-column.js +29 -22
  257. package/dist/cjs/interface/delete-row.d.ts +1 -1
  258. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  259. package/dist/cjs/interface/delete-row.js +244 -39
  260. package/dist/cjs/interface/delete-sheet.d.ts +2 -2
  261. package/dist/cjs/interface/delete-sheet.d.ts.map +1 -1
  262. package/dist/cjs/interface/delete-sheet.js +118 -1
  263. package/dist/cjs/interface/delete-table-column.d.ts +1 -1
  264. package/dist/cjs/interface/delete-table-column.d.ts.map +1 -1
  265. package/dist/cjs/interface/delete-table-column.js +11 -1
  266. package/dist/cjs/interface/delete-table-row.d.ts +1 -1
  267. package/dist/cjs/interface/delete-table-row.d.ts.map +1 -1
  268. package/dist/cjs/interface/delete-table-row.js +361 -275
  269. package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
  270. package/dist/cjs/interface/duplicate-sheet.js +83 -31
  271. package/dist/cjs/interface/embeds.d.ts +10 -1
  272. package/dist/cjs/interface/embeds.d.ts.map +1 -1
  273. package/dist/cjs/interface/embeds.js +120 -6
  274. package/dist/cjs/interface/insert-cells-shift-down.d.ts +1 -1
  275. package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
  276. package/dist/cjs/interface/insert-cells-shift-down.js +10 -1
  277. package/dist/cjs/interface/insert-cells-shift-right.d.ts +1 -1
  278. package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
  279. package/dist/cjs/interface/insert-cells-shift-right.js +10 -1
  280. package/dist/cjs/interface/insert-column.d.ts +2 -2
  281. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  282. package/dist/cjs/interface/insert-column.js +101 -56
  283. package/dist/cjs/interface/insert-row.d.ts +1 -1
  284. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  285. package/dist/cjs/interface/insert-row.js +25 -7
  286. package/dist/cjs/interface/insert-table-row.d.ts +2 -1
  287. package/dist/cjs/interface/insert-table-row.d.ts.map +1 -1
  288. package/dist/cjs/interface/insert-table-row.js +70 -19
  289. package/dist/cjs/interface/remove-duplicates.d.ts +1 -1
  290. package/dist/cjs/interface/remove-duplicates.d.ts.map +1 -1
  291. package/dist/cjs/interface/remove-duplicates.js +46 -6
  292. package/dist/cjs/interface/remove-table.d.ts +1 -1
  293. package/dist/cjs/interface/remove-table.d.ts.map +1 -1
  294. package/dist/cjs/interface/remove-table.js +72 -16
  295. package/dist/cjs/interface/slicers.d.ts +12 -1
  296. package/dist/cjs/interface/slicers.d.ts.map +1 -1
  297. package/dist/cjs/interface/slicers.js +47 -2
  298. package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
  299. package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
  300. package/dist/cjs/interface/spreadsheet-interface.js +64 -1
  301. package/dist/cjs/interface/table-totalrow.d.ts +13 -1
  302. package/dist/cjs/interface/table-totalrow.d.ts.map +1 -1
  303. package/dist/cjs/interface/table-totalrow.js +107 -73
  304. package/dist/cjs/interface/table-utils.d.ts +59 -6
  305. package/dist/cjs/interface/table-utils.d.ts.map +1 -1
  306. package/dist/cjs/interface/table-utils.js +211 -15
  307. package/dist/cjs/interface/update-table.d.ts +16 -1
  308. package/dist/cjs/interface/update-table.d.ts.map +1 -1
  309. package/dist/cjs/interface/update-table.js +190 -44
  310. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  311. package/dist/cjs/test-setup.d.ts.map +1 -1
  312. package/dist/cjs/test-setup.js +6 -0
  313. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  314. package/dist/cjs/validation-schema/table.schema.d.ts +11 -0
  315. package/dist/cjs/validation-schema/table.schema.d.ts.map +1 -1
  316. package/dist/cjs/validation-schema/table.schema.js +20 -3
  317. package/dist/esm/api/anchored-objects.d.ts +122 -6
  318. package/dist/esm/api/anchored-objects.d.ts.map +1 -1
  319. package/dist/esm/api/anchored-objects.js +375 -15
  320. package/dist/esm/api/copy-paste.d.ts +8 -2
  321. package/dist/esm/api/copy-paste.d.ts.map +1 -1
  322. package/dist/esm/api/copy-paste.js +4 -4
  323. package/dist/esm/api/filter.d.ts +15 -1
  324. package/dist/esm/api/filter.d.ts.map +1 -1
  325. package/dist/esm/api/filter.js +28 -0
  326. package/dist/esm/api/formula.d.ts +63 -0
  327. package/dist/esm/api/formula.d.ts.map +1 -1
  328. package/dist/esm/api/formula.js +235 -8
  329. package/dist/esm/api/immer-utils.d.ts +11 -1
  330. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  331. package/dist/esm/api/immer-utils.js +16 -0
  332. package/dist/esm/api/insert-cut-cells.d.ts +35 -0
  333. package/dist/esm/api/insert-cut-cells.d.ts.map +1 -0
  334. package/dist/esm/api/insert-cut-cells.js +67 -0
  335. package/dist/esm/api/merges.d.ts +8 -0
  336. package/dist/esm/api/merges.d.ts.map +1 -1
  337. package/dist/esm/api/merges.js +9 -0
  338. package/dist/esm/api/paint-format.d.ts +22 -1
  339. package/dist/esm/api/paint-format.d.ts.map +1 -1
  340. package/dist/esm/api/paint-format.js +44 -1
  341. package/dist/esm/api/sort.d.ts +23 -1
  342. package/dist/esm/api/sort.d.ts.map +1 -1
  343. package/dist/esm/api/sort.js +45 -6
  344. package/dist/esm/api/structural-guards.d.ts +57 -0
  345. package/dist/esm/api/structural-guards.d.ts.map +1 -1
  346. package/dist/esm/api/structural-guards.js +85 -0
  347. package/dist/esm/api/structural-table-refs.d.ts +58 -3
  348. package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
  349. package/dist/esm/api/structural-table-refs.js +126 -6
  350. package/dist/esm/api/subtotal.d.ts +20 -13
  351. package/dist/esm/api/subtotal.d.ts.map +1 -1
  352. package/dist/esm/api/subtotal.js +15 -8
  353. package/dist/esm/api/table.d.ts +26 -2
  354. package/dist/esm/api/table.d.ts.map +1 -1
  355. package/dist/esm/api/table.js +70 -48
  356. package/dist/esm/api/validation.d.ts.map +1 -1
  357. package/dist/esm/api/validation.js +53 -8
  358. package/dist/esm/atoms/creating-table.atom.d.ts +22 -0
  359. package/dist/esm/atoms/creating-table.atom.d.ts.map +1 -0
  360. package/dist/esm/atoms/creating-table.atom.js +4 -0
  361. package/dist/esm/atoms/dialog-state.atom.d.ts +8 -0
  362. package/dist/esm/atoms/dialog-state.atom.d.ts.map +1 -1
  363. package/dist/esm/atoms/dialog-state.atom.js +12 -0
  364. package/dist/esm/atoms/editing-slicer.atom.d.ts +9 -0
  365. package/dist/esm/atoms/editing-slicer.atom.d.ts.map +1 -0
  366. package/dist/esm/atoms/editing-slicer.atom.js +6 -0
  367. package/dist/esm/atoms/index.d.ts +4 -0
  368. package/dist/esm/atoms/index.d.ts.map +1 -1
  369. package/dist/esm/atoms/index.js +4 -0
  370. package/dist/esm/atoms/inserting-slicer.atom.d.ts +8 -0
  371. package/dist/esm/atoms/inserting-slicer.atom.d.ts.map +1 -0
  372. package/dist/esm/atoms/inserting-slicer.atom.js +5 -0
  373. package/dist/esm/atoms/resizing-table.atom.d.ts +8 -0
  374. package/dist/esm/atoms/resizing-table.atom.d.ts.map +1 -0
  375. package/dist/esm/atoms/resizing-table.atom.js +5 -0
  376. package/dist/esm/commands.d.ts +138 -2
  377. package/dist/esm/commands.d.ts.map +1 -1
  378. package/dist/esm/components/editors/embed-editor.d.ts +4 -2
  379. package/dist/esm/components/editors/embed-editor.d.ts.map +1 -1
  380. package/dist/esm/components/editors/embed-editor.js +40 -6
  381. package/dist/esm/components/editors/slicer-editor.d.ts +15 -0
  382. package/dist/esm/components/editors/slicer-editor.d.ts.map +1 -0
  383. package/dist/esm/components/editors/slicer-editor.js +85 -0
  384. package/dist/esm/components/editors/table-editor.d.ts +58 -2
  385. package/dist/esm/components/editors/table-editor.d.ts.map +1 -1
  386. package/dist/esm/components/editors/table-editor.js +243 -19
  387. package/dist/esm/components/index.d.ts +1 -0
  388. package/dist/esm/components/index.d.ts.map +1 -1
  389. package/dist/esm/components/index.js +1 -0
  390. package/dist/esm/constants.d.ts +9 -1
  391. package/dist/esm/constants.d.ts.map +1 -1
  392. package/dist/esm/constants.js +12 -0
  393. package/dist/esm/generated-names.d.ts +13 -3
  394. package/dist/esm/generated-names.d.ts.map +1 -1
  395. package/dist/esm/generated-names.js +3 -1
  396. package/dist/esm/helpers.d.ts +5 -0
  397. package/dist/esm/helpers.d.ts.map +1 -1
  398. package/dist/esm/helpers.js +7 -1
  399. package/dist/esm/hooks/use-on-change-batch.d.ts +19 -2
  400. package/dist/esm/hooks/use-on-change-batch.d.ts.map +1 -1
  401. package/dist/esm/hooks/use-on-change-batch.js +19 -3
  402. package/dist/esm/hooks/use-on-change-calculated-column.d.ts +10 -1
  403. package/dist/esm/hooks/use-on-change-calculated-column.d.ts.map +1 -1
  404. package/dist/esm/hooks/use-on-change-calculated-column.js +17 -5
  405. package/dist/esm/hooks/use-on-change-table-column.d.ts +6 -1
  406. package/dist/esm/hooks/use-on-change-table-column.d.ts.map +1 -1
  407. package/dist/esm/hooks/use-on-change-table-column.js +17 -5
  408. package/dist/esm/hooks/use-on-change.d.ts +36 -3
  409. package/dist/esm/hooks/use-on-change.d.ts.map +1 -1
  410. package/dist/esm/hooks/use-on-change.js +214 -124
  411. package/dist/esm/hooks/use-on-copy.d.ts +1 -1
  412. package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
  413. package/dist/esm/hooks/use-on-copy.js +2 -3
  414. package/dist/esm/hooks/use-on-create-custom-table-style.d.ts +17 -0
  415. package/dist/esm/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
  416. package/dist/esm/hooks/use-on-create-custom-table-style.js +26 -0
  417. package/dist/esm/hooks/use-on-create-named-range.d.ts +4 -2
  418. package/dist/esm/hooks/use-on-create-named-range.d.ts.map +1 -1
  419. package/dist/esm/hooks/use-on-create-named-range.js +11 -1
  420. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
  421. package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
  422. package/dist/esm/hooks/use-on-delete-cells-shift-left.js +3 -1
  423. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
  424. package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
  425. package/dist/esm/hooks/use-on-delete-cells-shift-up.js +3 -1
  426. package/dist/esm/hooks/use-on-delete-column.d.ts +2 -1
  427. package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
  428. package/dist/esm/hooks/use-on-delete-column.js +3 -1
  429. package/dist/esm/hooks/use-on-delete-row.d.ts +2 -1
  430. package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
  431. package/dist/esm/hooks/use-on-delete-row.js +3 -1
  432. package/dist/esm/hooks/use-on-delete-sheet.d.ts +9 -1
  433. package/dist/esm/hooks/use-on-delete-sheet.d.ts.map +1 -1
  434. package/dist/esm/hooks/use-on-delete-sheet.js +17 -1
  435. package/dist/esm/hooks/use-on-delete-table-row.d.ts +4 -1
  436. package/dist/esm/hooks/use-on-delete-table-row.d.ts.map +1 -1
  437. package/dist/esm/hooks/use-on-delete-table-row.js +19 -1
  438. package/dist/esm/hooks/use-on-delete.d.ts +5 -2
  439. package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
  440. package/dist/esm/hooks/use-on-delete.js +5 -1
  441. package/dist/esm/hooks/use-on-embeds.d.ts +7 -4
  442. package/dist/esm/hooks/use-on-embeds.d.ts.map +1 -1
  443. package/dist/esm/hooks/use-on-embeds.js +23 -6
  444. package/dist/esm/hooks/use-on-fill.d.ts +17 -2
  445. package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
  446. package/dist/esm/hooks/use-on-fill.js +27 -1
  447. package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
  448. package/dist/esm/hooks/use-on-filter-table.js +97 -26
  449. package/dist/esm/hooks/use-on-import-excel.d.ts +2 -1
  450. package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
  451. package/dist/esm/hooks/use-on-import-excel.js +4 -1
  452. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
  453. package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
  454. package/dist/esm/hooks/use-on-insert-cells-shift-down.js +3 -1
  455. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
  456. package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
  457. package/dist/esm/hooks/use-on-insert-cells-shift-right.js +3 -1
  458. package/dist/esm/hooks/use-on-insert-column.d.ts +2 -1
  459. package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
  460. package/dist/esm/hooks/use-on-insert-column.js +3 -1
  461. package/dist/esm/hooks/use-on-insert-row.d.ts +2 -1
  462. package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
  463. package/dist/esm/hooks/use-on-insert-row.js +3 -1
  464. package/dist/esm/hooks/use-on-insert-table-row.d.ts +5 -2
  465. package/dist/esm/hooks/use-on-insert-table-row.d.ts.map +1 -1
  466. package/dist/esm/hooks/use-on-insert-table-row.js +19 -1
  467. package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
  468. package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
  469. package/dist/esm/hooks/use-on-merge-unmerge-cells.js +12 -1
  470. package/dist/esm/hooks/use-on-move-columns.d.ts +4 -1
  471. package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
  472. package/dist/esm/hooks/use-on-move-columns.js +28 -6
  473. package/dist/esm/hooks/use-on-move-rows.d.ts +18 -1
  474. package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
  475. package/dist/esm/hooks/use-on-move-rows.js +44 -6
  476. package/dist/esm/hooks/use-on-move-selection.d.ts +9 -2
  477. package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
  478. package/dist/esm/hooks/use-on-move-selection.js +57 -1
  479. package/dist/esm/hooks/use-on-paste.d.ts +33 -2
  480. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  481. package/dist/esm/hooks/use-on-paste.js +825 -643
  482. package/dist/esm/hooks/use-on-remove-duplicates.d.ts +5 -2
  483. package/dist/esm/hooks/use-on-remove-duplicates.d.ts.map +1 -1
  484. package/dist/esm/hooks/use-on-remove-duplicates.js +5 -1
  485. package/dist/esm/hooks/use-on-request-create-table.d.ts +13 -0
  486. package/dist/esm/hooks/use-on-request-create-table.d.ts.map +1 -0
  487. package/dist/esm/hooks/use-on-request-create-table.js +43 -0
  488. package/dist/esm/hooks/use-on-request-insert-slicer.d.ts +7 -0
  489. package/dist/esm/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
  490. package/dist/esm/hooks/use-on-request-insert-slicer.js +15 -0
  491. package/dist/esm/hooks/use-on-request-resize-table.d.ts +7 -0
  492. package/dist/esm/hooks/use-on-request-resize-table.d.ts.map +1 -0
  493. package/dist/esm/hooks/use-on-request-resize-table.js +15 -0
  494. package/dist/esm/hooks/use-on-resize-table.d.ts +5 -1
  495. package/dist/esm/hooks/use-on-resize-table.d.ts.map +1 -1
  496. package/dist/esm/hooks/use-on-resize-table.js +107 -27
  497. package/dist/esm/hooks/use-on-sort-column.d.ts +28 -3
  498. package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
  499. package/dist/esm/hooks/use-on-sort-column.js +105 -68
  500. package/dist/esm/hooks/use-on-sort-range.d.ts +26 -3
  501. package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
  502. package/dist/esm/hooks/use-on-sort-range.js +100 -64
  503. package/dist/esm/hooks/use-on-sort-table.d.ts +18 -1
  504. package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
  505. package/dist/esm/hooks/use-on-sort-table.js +107 -86
  506. package/dist/esm/hooks/use-on-subtotal.d.ts +10 -3
  507. package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -1
  508. package/dist/esm/hooks/use-on-subtotal.js +7 -5
  509. package/dist/esm/hooks/use-on-table.d.ts +39 -7
  510. package/dist/esm/hooks/use-on-table.d.ts.map +1 -1
  511. package/dist/esm/hooks/use-on-table.js +234 -26
  512. package/dist/esm/hooks/use-on-undo-calculated-column.d.ts +23 -0
  513. package/dist/esm/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
  514. package/dist/esm/hooks/use-on-undo-calculated-column.js +62 -0
  515. package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
  516. package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
  517. package/dist/esm/hooks/use-on-undo-table-auto-expansion.js +75 -0
  518. package/dist/esm/hooks/use-on-update-named-range.d.ts +4 -2
  519. package/dist/esm/hooks/use-on-update-named-range.d.ts.map +1 -1
  520. package/dist/esm/hooks/use-on-update-named-range.js +13 -1
  521. package/dist/esm/hooks/use-sheet-properties.d.ts +1 -0
  522. package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
  523. package/dist/esm/hooks/use-sheet-properties.js +38 -19
  524. package/dist/esm/hooks/use-slicers.d.ts +2 -2
  525. package/dist/esm/hooks/use-slicers.d.ts.map +1 -1
  526. package/dist/esm/hooks/use-slicers.js +16 -8
  527. package/dist/esm/hooks/use-sparkline-groups.d.ts +50 -0
  528. package/dist/esm/hooks/use-sparkline-groups.d.ts.map +1 -0
  529. package/dist/esm/hooks/use-sparkline-groups.js +146 -0
  530. package/dist/esm/hooks/use-spreadsheet-state.d.ts +69 -12
  531. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  532. package/dist/esm/hooks/use-spreadsheet-state.js +321 -14
  533. package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
  534. package/dist/esm/hooks/use-structured-reference.js +17 -0
  535. package/dist/esm/hooks/use-undo-redo-actions.d.ts +2 -1
  536. package/dist/esm/hooks/use-undo-redo-actions.d.ts.map +1 -1
  537. package/dist/esm/hooks/use-undo-redo-actions.js +8 -2
  538. package/dist/esm/hooks/use-undo-redo.d.ts +12 -0
  539. package/dist/esm/hooks/use-undo-redo.d.ts.map +1 -1
  540. package/dist/esm/hooks/use-undo-redo.js +158 -7
  541. package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
  542. package/dist/esm/hooks/utils/sort-rows.js +4 -3
  543. package/dist/esm/index.d.ts +8 -0
  544. package/dist/esm/index.d.ts.map +1 -1
  545. package/dist/esm/index.js +9 -0
  546. package/dist/esm/interface/apply-fill.d.ts +26 -3
  547. package/dist/esm/interface/apply-fill.d.ts.map +1 -1
  548. package/dist/esm/interface/apply-fill.js +188 -88
  549. package/dist/esm/interface/change-batch.d.ts +1 -1
  550. package/dist/esm/interface/change-batch.d.ts.map +1 -1
  551. package/dist/esm/interface/change-batch.js +89 -8
  552. package/dist/esm/interface/change-calculated-column.d.ts +6 -2
  553. package/dist/esm/interface/change-calculated-column.d.ts.map +1 -1
  554. package/dist/esm/interface/change-calculated-column.js +81 -16
  555. package/dist/esm/interface/change-table-column.d.ts +81 -7
  556. package/dist/esm/interface/change-table-column.d.ts.map +1 -1
  557. package/dist/esm/interface/change-table-column.js +295 -67
  558. package/dist/esm/interface/create-table.d.ts +15 -3
  559. package/dist/esm/interface/create-table.d.ts.map +1 -1
  560. package/dist/esm/interface/create-table.js +103 -27
  561. package/dist/esm/interface/delete-cells-shift-left.d.ts +1 -1
  562. package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
  563. package/dist/esm/interface/delete-cells-shift-left.js +10 -1
  564. package/dist/esm/interface/delete-cells-shift-up.d.ts +1 -1
  565. package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
  566. package/dist/esm/interface/delete-cells-shift-up.js +10 -1
  567. package/dist/esm/interface/delete-cells.d.ts +1 -1
  568. package/dist/esm/interface/delete-cells.d.ts.map +1 -1
  569. package/dist/esm/interface/delete-cells.js +47 -14
  570. package/dist/esm/interface/delete-column.d.ts +1 -1
  571. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  572. package/dist/esm/interface/delete-column.js +26 -30
  573. package/dist/esm/interface/delete-row.d.ts +1 -1
  574. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  575. package/dist/esm/interface/delete-row.js +191 -44
  576. package/dist/esm/interface/delete-sheet.d.ts +2 -2
  577. package/dist/esm/interface/delete-sheet.d.ts.map +1 -1
  578. package/dist/esm/interface/delete-sheet.js +113 -1
  579. package/dist/esm/interface/delete-table-column.d.ts +1 -1
  580. package/dist/esm/interface/delete-table-column.d.ts.map +1 -1
  581. package/dist/esm/interface/delete-table-column.js +11 -1
  582. package/dist/esm/interface/delete-table-row.d.ts +1 -1
  583. package/dist/esm/interface/delete-table-row.d.ts.map +1 -1
  584. package/dist/esm/interface/delete-table-row.js +312 -232
  585. package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
  586. package/dist/esm/interface/duplicate-sheet.js +73 -26
  587. package/dist/esm/interface/embeds.d.ts +10 -1
  588. package/dist/esm/interface/embeds.d.ts.map +1 -1
  589. package/dist/esm/interface/embeds.js +84 -5
  590. package/dist/esm/interface/insert-cells-shift-down.d.ts +1 -1
  591. package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
  592. package/dist/esm/interface/insert-cells-shift-down.js +10 -1
  593. package/dist/esm/interface/insert-cells-shift-right.d.ts +1 -1
  594. package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
  595. package/dist/esm/interface/insert-cells-shift-right.js +10 -1
  596. package/dist/esm/interface/insert-column.d.ts +2 -2
  597. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  598. package/dist/esm/interface/insert-column.js +70 -33
  599. package/dist/esm/interface/insert-row.d.ts +1 -1
  600. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  601. package/dist/esm/interface/insert-row.js +22 -6
  602. package/dist/esm/interface/insert-table-row.d.ts +2 -1
  603. package/dist/esm/interface/insert-table-row.d.ts.map +1 -1
  604. package/dist/esm/interface/insert-table-row.js +67 -12
  605. package/dist/esm/interface/remove-duplicates.d.ts +1 -1
  606. package/dist/esm/interface/remove-duplicates.d.ts.map +1 -1
  607. package/dist/esm/interface/remove-duplicates.js +41 -6
  608. package/dist/esm/interface/remove-table.d.ts +1 -1
  609. package/dist/esm/interface/remove-table.d.ts.map +1 -1
  610. package/dist/esm/interface/remove-table.js +58 -10
  611. package/dist/esm/interface/slicers.d.ts +12 -1
  612. package/dist/esm/interface/slicers.d.ts.map +1 -1
  613. package/dist/esm/interface/slicers.js +44 -2
  614. package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
  615. package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
  616. package/dist/esm/interface/spreadsheet-interface.js +73 -1
  617. package/dist/esm/interface/table-totalrow.d.ts +13 -1
  618. package/dist/esm/interface/table-totalrow.d.ts.map +1 -1
  619. package/dist/esm/interface/table-totalrow.js +98 -68
  620. package/dist/esm/interface/table-utils.d.ts +59 -6
  621. package/dist/esm/interface/table-utils.d.ts.map +1 -1
  622. package/dist/esm/interface/table-utils.js +155 -14
  623. package/dist/esm/interface/update-table.d.ts +16 -1
  624. package/dist/esm/interface/update-table.d.ts.map +1 -1
  625. package/dist/esm/interface/update-table.js +203 -42
  626. package/dist/esm/sheet-cell.d.ts.map +1 -1
  627. package/dist/esm/test-setup.d.ts.map +1 -1
  628. package/dist/esm/test-setup.js +6 -0
  629. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  630. package/dist/esm/validation-schema/table.schema.d.ts +11 -0
  631. package/dist/esm/validation-schema/table.schema.d.ts.map +1 -1
  632. package/dist/esm/validation-schema/table.schema.js +15 -2
  633. package/package.json +25 -17
@@ -1,13 +1,14 @@
1
- import { __assign, __read, __values } from "tslib";
1
+ import { __assign, __read, __rest, __values } from "tslib";
2
2
  import { isCellNode } from "@rowsncolumns/dag";
3
3
  import { addressToCell, getCellUserEnteredValue, getExtendedValueFormula, } from "@rowsncolumns/utils";
4
4
  import { SheetCell } from "../sheet-cell";
5
- import { breakTableColumnsInFormula, breakTableReferencesInFormula, createSheetCellIdentifier, } from "./formula";
5
+ import { breakTableColumnsInFormula, breakTableReferencesInFormula, convertStructuredRefsToA1InFormula, createSheetCellIdentifier, renameTableColumnsInFormula, renameTableInFormula, } from "./formula";
6
6
  import { createSheetDraft } from "./immer-utils";
7
7
  /**
8
- * Which tables / table columns `deleteRow` (a table goes with its header row)
9
- * or `deleteColumn` (a table goes when every column is deleted; otherwise the
10
- * covered columns are spliced out) removes for the band
8
+ * Which tables / table columns `deleteRow` (a table goes only when every one
9
+ * of its rows is deleted — losing its header row keeps it, the next row
10
+ * becomes the header) or `deleteColumn` (a table goes when every column is
11
+ * deleted; otherwise the covered columns are spliced out) removes for the band
11
12
  * `[minIndex, maxIndex]` on `sheetId`. Mirrors the table updates those
12
13
  * interfaces apply to `tables`.
13
14
  */
@@ -21,13 +22,13 @@ export var collectRemovedTableParts = function (tables, sheetId, axis, minIndex,
21
22
  if (table.sheetId !== sheetId || !table.title)
22
23
  continue;
23
24
  if (axis === "row") {
24
- var startRowIndex = table.range.startRowIndex;
25
- if (startRowIndex >= minIndex && startRowIndex <= maxIndex) {
25
+ var _f = table.range, startRowIndex = _f.startRowIndex, endRowIndex = _f.endRowIndex;
26
+ if (minIndex <= startRowIndex && maxIndex >= endRowIndex) {
26
27
  removed.tables.push(table.title);
27
28
  }
28
29
  continue;
29
30
  }
30
- var _f = table.range, startColumnIndex = _f.startColumnIndex, endColumnIndex = _f.endColumnIndex;
31
+ var _g = table.range, startColumnIndex = _g.startColumnIndex, endColumnIndex = _g.endColumnIndex;
31
32
  if (maxIndex < startColumnIndex || minIndex > endColumnIndex)
32
33
  continue;
33
34
  if (minIndex <= startColumnIndex && maxIndex >= endColumnIndex) {
@@ -157,8 +158,168 @@ export var breakStructuredRefsForRemovedTableParts = function (_a) {
157
158
  finally { if (e_2) throw e_2.error; }
158
159
  }
159
160
  };
161
+ /**
162
+ * Apply `rewrite` to the text of every formula cell across all sheets (from
163
+ * the dependency graph when available, else a draft sweep), writing back the
164
+ * ones it changed and re-entering them in the graph for recalculation. Cells
165
+ * keep their position — this is the in-place rewrite behind a table / table
166
+ * column rename.
167
+ */
168
+ var rewriteFormulasInDraft = function (_a, rewrite) {
169
+ var e_5, _b;
170
+ var _c, _d;
171
+ var draft = _a.draft, getGraphNodes = _a.getGraphNodes, enqueueCalculation = _a.enqueueCalculation, enqueueGraphOperation = _a.enqueueGraphOperation, recalcCells = _a.recalcCells, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
172
+ var sheetCell = new SheetCell();
173
+ try {
174
+ for (var _e = __values(collectFormulaPositions(draft, getGraphNodes)), _f = _e.next(); !_f.done; _f = _e.next()) {
175
+ var pos = _f.value;
176
+ var currentSheet = createSheetDraft(draft, pos.sheetId, pos.rowIndex);
177
+ var cellData = (_d = (_c = currentSheet[pos.rowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[pos.columnIndex];
178
+ var formula = getExtendedValueFormula(getCellUserEnteredValue(cellData));
179
+ if (!formula || !formula.includes("["))
180
+ continue;
181
+ var updated = rewrite(formula, pos);
182
+ if (updated === formula)
183
+ continue;
184
+ sheetCell.assign(pos.sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
185
+ sheetCell.setFormulaValue(updated, false);
186
+ currentSheet[pos.rowIndex].values[pos.columnIndex] =
187
+ sheetCell.getCellData();
188
+ var enqueueOperation = sheetCell.ephemeral()
189
+ ? enqueueCalculation
190
+ : enqueueGraphOperation;
191
+ enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "remove", position: pos });
192
+ enqueueOperation === null || enqueueOperation === void 0 ? void 0 : enqueueOperation({ type: "add", position: pos, force: true });
193
+ recalcCells.set(createSheetCellIdentifier(pos.sheetId, pos.rowIndex, pos.columnIndex), __assign(__assign({}, pos), { force: true }));
194
+ }
195
+ }
196
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
197
+ finally {
198
+ try {
199
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
200
+ }
201
+ finally { if (e_5) throw e_5.error; }
202
+ }
203
+ };
204
+ /**
205
+ * Column `oldName` of `table` was renamed `newName` (a header-cell edit):
206
+ * rewrite every structured reference to it across the workbook, including the
207
+ * bare `[@Old]` forms of the formulas that sit inside the table.
208
+ */
209
+ export var renameTableColumnInFormulas = function (_a) {
210
+ var table = _a.table, oldName = _a.oldName, newName = _a.newName, params = __rest(_a, ["table", "oldName", "newName"]);
211
+ if (!oldName || !newName || oldName === newName)
212
+ return;
213
+ renameTableColumnsInFormulas(__assign(__assign({}, params), { table: table, renames: new Map([[oldName.toLowerCase(), newName]]) }));
214
+ };
215
+ /**
216
+ * Several columns of `table` were renamed at once (a header row re-derived
217
+ * after a row delete, several header cells written by one paste /
218
+ * change-batch): `renames` maps each LOWER-CASED old name to its new name and
219
+ * every formula is rewritten in ONE pass, so `Name` → `Qty` and `Qty` → `Name`
220
+ * swap instead of chaining into the same column.
221
+ */
222
+ export var renameTableColumnsInFormulas = function (_a) {
223
+ var table = _a.table, renames = _a.renames, params = __rest(_a, ["table", "renames"]);
224
+ if (renames.size === 0)
225
+ return;
226
+ rewriteFormulasInDraft(params, function (formula, pos) {
227
+ var updated = table.title
228
+ ? renameTableColumnsInFormula(formula, table.title, renames)
229
+ : formula;
230
+ if (pos.sheetId === table.sheetId &&
231
+ isWithinRange(table.range, pos.rowIndex, pos.columnIndex)) {
232
+ updated = renameTableColumnsInFormula(updated, undefined, renames);
233
+ }
234
+ return updated;
235
+ });
236
+ };
237
+ /**
238
+ * The header cells one write renamed (`planHeaderCellRenames`), applied per
239
+ * table as a single multi-column rename.
240
+ */
241
+ export var renameHeaderCellsInFormulas = function (_a) {
242
+ var e_6, _b, e_7, _c;
243
+ var _d;
244
+ var headerRenames = _a.headerRenames, params = __rest(_a, ["headerRenames"]);
245
+ var byTable = new Map();
246
+ try {
247
+ for (var headerRenames_1 = __values(headerRenames), headerRenames_1_1 = headerRenames_1.next(); !headerRenames_1_1.done; headerRenames_1_1 = headerRenames_1.next()) {
248
+ var _e = headerRenames_1_1.value, table = _e.table, oldName = _e.oldName, newName = _e.newName;
249
+ if (!oldName || oldName === newName)
250
+ continue;
251
+ var entry = (_d = byTable.get(table.id)) !== null && _d !== void 0 ? _d : { table: table, renames: new Map() };
252
+ entry.renames.set(oldName.toLowerCase(), newName);
253
+ byTable.set(table.id, entry);
254
+ }
255
+ }
256
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
257
+ finally {
258
+ try {
259
+ if (headerRenames_1_1 && !headerRenames_1_1.done && (_b = headerRenames_1.return)) _b.call(headerRenames_1);
260
+ }
261
+ finally { if (e_6) throw e_6.error; }
262
+ }
263
+ try {
264
+ for (var _f = __values(byTable.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
265
+ var _h = _g.value, table = _h.table, renames = _h.renames;
266
+ renameTableColumnsInFormulas(__assign(__assign({}, params), { table: table, renames: renames }));
267
+ }
268
+ }
269
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
270
+ finally {
271
+ try {
272
+ if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
273
+ }
274
+ finally { if (e_7) throw e_7.error; }
275
+ }
276
+ };
277
+ /**
278
+ * `table` is being converted to a range (Excel's Convert to Range): rewrite
279
+ * every structured reference into it across the workbook to the A1 reference
280
+ * it resolves to — `T[Col]` → `$B$2:$B$9`, `[@Col]` → `B3`,
281
+ * `T[[#Headers],[Col]]` → `$B$1`, qualified with the table's sheet from another
282
+ * sheet — so the formulas keep their values once the table is gone. Runs
283
+ * BEFORE the table is removed; the bare `[@Col]` forms belong to the formulas
284
+ * that sit inside the table.
285
+ */
286
+ export var convertTableReferencesToA1InFormulas = function (_a) {
287
+ var _b;
288
+ var table = _a.table, getSheetName = _a.getSheetName, params = __rest(_a, ["table", "getSheetName"]);
289
+ if (!table.title)
290
+ return;
291
+ var target = {
292
+ title: table.title,
293
+ range: table.range,
294
+ headerRow: table.headerRow,
295
+ totalRow: table.totalRow,
296
+ columnNames: ((_b = table.columns) !== null && _b !== void 0 ? _b : []).map(function (column) { return column.name; }),
297
+ };
298
+ var tableSheetName = getSheetName(table.sheetId);
299
+ rewriteFormulasInDraft(params, function (formula, pos) {
300
+ return convertStructuredRefsToA1InFormula(formula, target, {
301
+ tableSheetName: tableSheetName,
302
+ formulaSheetName: getSheetName(pos.sheetId),
303
+ formulaRowIndex: pos.rowIndex,
304
+ inTable: pos.sheetId === table.sheetId &&
305
+ isWithinRange(table.range, pos.rowIndex, pos.columnIndex),
306
+ });
307
+ });
308
+ };
309
+ /**
310
+ * Table `oldName` was renamed `newName` (the Edit Table dialog / `updateTable`):
311
+ * rewrite `Old[…]` → `New[…]` in every formula across the workbook.
312
+ */
313
+ export var renameTableInFormulas = function (_a) {
314
+ var oldName = _a.oldName, newName = _a.newName, params = __rest(_a, ["oldName", "newName"]);
315
+ if (!oldName || !newName || oldName === newName)
316
+ return;
317
+ rewriteFormulasInDraft(params, function (formula) {
318
+ return renameTableInFormula(formula, oldName, newName);
319
+ });
320
+ };
160
321
  var collectFormulaPositions = function (draft, getGraphNodes) {
161
- var e_5, _a, e_6, _b;
322
+ var e_8, _a, e_9, _b;
162
323
  if (getGraphNodes) {
163
324
  var graphNodes = void 0;
164
325
  try {
@@ -179,12 +340,12 @@ var collectFormulaPositions = function (draft, getGraphNodes) {
179
340
  positions_1.push(__assign({}, node.position));
180
341
  }
181
342
  }
182
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
343
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
183
344
  finally {
184
345
  try {
185
346
  if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
186
347
  }
187
- finally { if (e_5) throw e_5.error; }
348
+ finally { if (e_8) throw e_8.error; }
188
349
  }
189
350
  if (sawNode)
190
351
  return positions_1;
@@ -212,17 +373,17 @@ var collectFormulaPositions = function (draft, getGraphNodes) {
212
373
  _loop_1(key);
213
374
  }
214
375
  }
215
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
376
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
216
377
  finally {
217
378
  try {
218
379
  if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
219
380
  }
220
- finally { if (e_6) throw e_6.error; }
381
+ finally { if (e_9) throw e_9.error; }
221
382
  }
222
383
  return positions;
223
384
  };
224
385
  export var removeSpillsOfDeletedAnchors = function (_a) {
225
- var e_7, _b;
386
+ var e_10, _b;
226
387
  var _c, _d, _e;
227
388
  var draft = _a.draft, sheetId = _a.sheetId, axis = _a.axis, minIndex = _a.minIndex, maxIndex = _a.maxIndex, getArrayRange = _a.getArrayRange, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
228
389
  var sheetRows = draft[sheetId];
@@ -287,12 +448,12 @@ export var removeSpillsOfDeletedAnchors = function (_a) {
287
448
  }
288
449
  }
289
450
  }
290
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
451
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
291
452
  finally {
292
453
  try {
293
454
  if (anchors_1_1 && !anchors_1_1.done && (_b = anchors_1.return)) _b.call(anchors_1);
294
455
  }
295
- finally { if (e_7) throw e_7.error; }
456
+ finally { if (e_10) throw e_10.error; }
296
457
  }
297
458
  };
298
459
  /** `C1:C3` (the anchor's persisted `af`) → its rectangle; `undefined` when absent/unparseable. */
@@ -30,22 +30,29 @@ export type SubtotalWrite = {
30
30
  values: (string | null)[];
31
31
  };
32
32
  /**
33
- * The plan applies in this order, every index already in FINAL coordinates
34
- * (the sheet after all removals and insertions):
33
+ * The plan applies in this order:
35
34
  * 1. `deleteRows` (descending original indexes — existing subtotal rows),
36
- * 2. `insertRows` ascending: inserting at final row `r` shifts the not-yet
35
+ * 2. `ungroupRows`: one `ungroup-rows` call per entry — the outline reset of
36
+ * "Replace current subtotals" — in the coordinates of the sheet AFTER the
37
+ * deletes and BEFORE the inserts (the surviving data rows, compacted).
38
+ * Group / ungroup are ±1 steps in both engines, so pass `k` lists the
39
+ * surviving data rows that were deeper than level `k`; after the passes
40
+ * every surviving row is back at level 0 (empty when nothing was outlined
41
+ * or when not replacing). The reset has to precede the inserts: an
42
+ * inserted row takes the row above's outline level in both engines
43
+ * (Excel's "Format Same As Above" — a row inserted inside a group joins
44
+ * it), so the total rows must be inserted next to level-0 rows — Excel's
45
+ * own order: remove the subtotals, rows and outline, then apply afresh.
46
+ * 3. `insertRows` ascending, in FINAL coordinates (the sheet after all
47
+ * removals and insertions): inserting at final row `r` shifts the not-yet
37
48
  * final rows below it, so ascending order lands each new row exactly
38
49
  * where the plan expects it,
39
- * 3. `writes` (labels + SUBTOTAL formulas),
40
- * 4. `ungroupRows`: one `ungroup-rows` call per entry — the outline reset of
41
- * "Replace current subtotals". Group / ungroup are ±1 steps in both
42
- * engines, so pass `k` lists the surviving data rows that were deeper
43
- * than level `k`; after the passes every row of the range is back at
44
- * level 0 (empty when nothing was outlined or when not replacing), then
45
- * 5. `outlineGroups`: one `group-rows` call per entry (Excel's levels — the
46
- * first spans every row above the grand total, the second the detail
47
- * rows of each group, so detail rows end at level 2 and subtotal rows
48
- * at level 1 — the same three-level outline on every re-apply).
50
+ * 4. `writes` (labels + SUBTOTAL formulas), final coordinates, then
51
+ * 5. `outlineGroups`: one `group-rows` call per entry, final coordinates
52
+ * (Excel's levels — the first spans every row above the grand total, the
53
+ * second the detail rows of each group, so detail rows end at level 2 and
54
+ * subtotal rows at level 1 — the same three-level outline on every
55
+ * re-apply).
49
56
  */
50
57
  export type SubtotalPlan = {
51
58
  deleteRows: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"subtotal.d.ts","sourceRoot":"","sources":["../../../api/subtotal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAYtE,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AACxD,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,WACP,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAClG,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1E,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5D,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAcF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,eAAe,EACxB,QAAQ,cAAc,KACrB,YAAY,GAAG,SAyHjB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KACxB,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7D,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,MAAM,YAAY,EAClB,UAAU,oBAAoB,SAwB/B,CAAC"}
1
+ {"version":3,"file":"subtotal.d.ts","sourceRoot":"","sources":["../../../api/subtotal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAYtE,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AACxD,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,WACP,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAClG,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1E,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5D,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAcF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,eAAe,EACxB,QAAQ,cAAc,KACrB,YAAY,GAAG,SA8HjB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KACxB,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7D,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,MAAM,YAAY,EAClB,UAAU,oBAAoB,SA0B/B,CAAC"}
@@ -127,9 +127,13 @@ export var planSubtotals = function (options, reader) {
127
127
  return values;
128
128
  };
129
129
  // "Replace current subtotals": the surviving data rows carry the previous
130
- // outline (detail rows at 2, or deeper after repeated applies) into their
131
- // final positions — the inserted total rows arrive at level 0 — so record
132
- // how many ungroup steps each needs before the fresh levels go on.
130
+ // outline (detail rows at 2, or deeper after repeated applies) past the
131
+ // deletes, and a total row inserted below one of them would inherit that
132
+ // level (both engines give an inserted row the row above's outline level).
133
+ // So the reset runs between the deletes and the inserts, addressed to the
134
+ // compacted survivors — the k-th surviving data row sits at
135
+ // `firstDataRow + k` once the old total rows are gone — and records how
136
+ // many ungroup steps each needs before the fresh levels go on.
133
137
  var ungroupRows = [];
134
138
  var dataRowCursor = 0;
135
139
  var cursor = firstDataRow;
@@ -138,10 +142,11 @@ export var planSubtotals = function (options, reader) {
138
142
  var group = groups_1_1.value;
139
143
  var groupStart = cursor;
140
144
  for (var i = 0; i < group.size; i++) {
145
+ var compactedRow = firstDataRow + dataRowCursor;
141
146
  var originalRow = dataRows[dataRowCursor++];
142
147
  var level = replaceCurrent ? ((_d = (_c = reader.getOutlineLevel) === null || _c === void 0 ? void 0 : _c.call(reader, originalRow)) !== null && _d !== void 0 ? _d : 0) : 0;
143
148
  for (var pass = 0; pass < level; pass++) {
144
- ((_e = ungroupRows[pass]) !== null && _e !== void 0 ? _e : (ungroupRows[pass] = [])).push(cursor);
149
+ ((_e = ungroupRows[pass]) !== null && _e !== void 0 ? _e : (ungroupRows[pass] = [])).push(compactedRow);
145
150
  }
146
151
  detailRows.push(cursor++);
147
152
  }
@@ -189,9 +194,12 @@ export var applySubtotalPlan = function (sheetId, plan, executor) {
189
194
  if (plan.deleteRows.length)
190
195
  executor.onDeleteRow(sheetId, plan.deleteRows);
191
196
  try {
192
- for (var _e = __values(plan.insertRows), _f = _e.next(); !_f.done; _f = _e.next()) {
193
- var rowIndex = _f.value;
194
- executor.onInsertRow(sheetId, rowIndex, 1);
197
+ // Outline reset before the inserts: the new total rows inherit the level of
198
+ // the row above them, which must already be 0 (see `SubtotalPlan`).
199
+ for (var _e = __values(plan.ungroupRows), _f = _e.next(); !_f.done; _f = _e.next()) {
200
+ var rows = _f.value;
201
+ if (rows.length)
202
+ executor.onUngroupRows(sheetId, rows);
195
203
  }
196
204
  }
197
205
  catch (e_3_1) { e_3 = { error: e_3_1 }; }
@@ -202,14 +210,9 @@ export var applySubtotalPlan = function (sheetId, plan, executor) {
202
210
  finally { if (e_3) throw e_3.error; }
203
211
  }
204
212
  try {
205
- for (var _g = __values(plan.writes), _h = _g.next(); !_h.done; _h = _g.next()) {
206
- var write = _h.value;
207
- executor.onChangeBatch(sheetId, {
208
- startRowIndex: write.rowIndex,
209
- endRowIndex: write.rowIndex,
210
- startColumnIndex: write.startColumnIndex,
211
- endColumnIndex: write.startColumnIndex + write.values.length - 1,
212
- }, [write.values]);
213
+ for (var _g = __values(plan.insertRows), _h = _g.next(); !_h.done; _h = _g.next()) {
214
+ var rowIndex = _h.value;
215
+ executor.onInsertRow(sheetId, rowIndex, 1);
213
216
  }
214
217
  }
215
218
  catch (e_4_1) { e_4 = { error: e_4_1 }; }
@@ -220,10 +223,14 @@ export var applySubtotalPlan = function (sheetId, plan, executor) {
220
223
  finally { if (e_4) throw e_4.error; }
221
224
  }
222
225
  try {
223
- for (var _j = __values(plan.ungroupRows), _k = _j.next(); !_k.done; _k = _j.next()) {
224
- var rows = _k.value;
225
- if (rows.length)
226
- executor.onUngroupRows(sheetId, rows);
226
+ for (var _j = __values(plan.writes), _k = _j.next(); !_k.done; _k = _j.next()) {
227
+ var write = _k.value;
228
+ executor.onChangeBatch(sheetId, {
229
+ startRowIndex: write.rowIndex,
230
+ endRowIndex: write.rowIndex,
231
+ startColumnIndex: write.startColumnIndex,
232
+ endColumnIndex: write.startColumnIndex + write.values.length - 1,
233
+ }, [write.values]);
227
234
  }
228
235
  }
229
236
  catch (e_5_1) { e_5 = { error: e_5_1 }; }
@@ -1,6 +1,17 @@
1
1
  import { type ParsedToken } from "@rowsncolumns/calculator";
2
- import type { CellInterface, GridRange } from "@rowsncolumns/common-types";
2
+ import type { CellInterface, ExtendedValue, GridRange } from "@rowsncolumns/common-types";
3
3
  import type { BandedRange, FilterView, TableView } from "@rowsncolumns/spreadsheet";
4
+ /**
5
+ * Excel's default for the Create Table dialog's "My table has headers": checked when the
6
+ * range's first row reads as a header row — it holds at least one value, every value in it is
7
+ * text (a number or boolean there means the data starts on the first row), and at least one row
8
+ * of data lies below it. A single-row range defaults to unchecked.
9
+ */
10
+ export declare const guessTableHasHeaders: ({ sheetId, range, getEffectiveExtendedValue, }: {
11
+ sheetId: number;
12
+ range: GridRange;
13
+ getEffectiveExtendedValue: (sheetId: number, rowIndex: number, columnIndex: number) => ExtendedValue | null | undefined;
14
+ }) => boolean;
4
15
  /**
5
16
  * Get table column index
6
17
  * @param sheetId
@@ -25,7 +36,20 @@ export declare const findAdjacentTable: (sheetId: number, cell: CellInterface, t
25
36
  * @returns
26
37
  */
27
38
  export declare const findAdjacentBandedRange: (sheetId: number, cell: CellInterface, bandedRanges: BandedRange[] | undefined, getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined) => readonly [BandedRange | undefined, boolean, boolean];
28
- export declare const isTableColumnCellsFillable: (sheetId: number, range: GridRange, excludeCell: CellInterface, existingColumnFormula: string | undefined, currentValue: string | boolean | undefined, activeSheetName: string, getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined) => boolean;
39
+ /**
40
+ * Excel's calculated-column fill decision, shared with the Rust engine's
41
+ * `auto_fill_calculated_column` (rowsncolumns/spreadsheet#681): a formula just
42
+ * written into a table body cell fills the whole column when every OTHER body
43
+ * cell of that column is either empty (a fresh column) or holds the same
44
+ * formula relative to its row (a consistent calculated column, which the new
45
+ * formula overwrites). A literal anywhere, or two rows that disagree, leave
46
+ * the edit a one-cell exception. The column's cells are the reference — not
47
+ * the formula recorded on `columns[].formula`, which has no row of its own —
48
+ * so the overwrite works from any row, not only the one the column was
49
+ * created from (#668 T-50). A consistent column is a calculated column
50
+ * whatever its formula references (`=TODAY()`, `=1`), like Excel (#668 T-29).
51
+ */
52
+ export declare const isTableColumnCellsFillable: (sheetId: number, range: GridRange, excludeCell: CellInterface, currentValue: string | boolean | undefined, activeSheetName: string, getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined) => boolean;
29
53
  export declare const addTableNameToTokens: (tokens: ParsedToken[], title: string) => string;
30
54
  export declare const removeTableName: (tokens: ParsedToken[], title: string) => string;
31
55
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../api/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACV,MAAM,2BAA2B,CAAC;AAkBnC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,uBAiBhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,GAAG,IAAI,0BAMvC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,EAC/B,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,uDAgDxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,cAAc,WAAW,EAAE,GAAG,SAAS,EACvC,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,yDA8CxB,CAAC;AAGF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,aAAa,aAAa,EAC1B,uBAAuB,MAAM,GAAG,SAAS,EACzC,cAAc,MAAM,GAAG,OAAO,GAAG,SAAS,EAC1C,iBAAiB,MAAM,EACvB,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,YAsExB,CAAC;AAiCF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WAyBxE,CAAC;AAcF,eAAO,MAAM,eAAe,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WA2BnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../api/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACV,MAAM,2BAA2B,CAAC;AAmBnC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,gDAIlC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,yBAAyB,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;CACvC,KAAG,OA8BH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,uBAiBhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,GAAG,IAAI,0BAMvC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,EAC/B,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,uDA8DxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,cAAc,WAAW,EAAE,GAAG,SAAS,EACvC,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,yDA8CxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,aAAa,aAAa,EAC1B,cAAc,MAAM,GAAG,OAAO,GAAG,SAAS,EAC1C,iBAAiB,MAAM,EACvB,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,YAuDxB,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WAyBxE,CAAC;AAcF,eAAO,MAAM,eAAe,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WA2BnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC"}
@@ -1,8 +1,7 @@
1
- var _a, _b, _c;
2
1
  import { __assign, __read, __spreadArray, __values } from "tslib";
3
- import { lexify, tokenVocabulary, } from "@rowsncolumns/calculator";
2
+ import { tokenVocabulary, } from "@rowsncolumns/calculator";
4
3
  import { Direction } from "@rowsncolumns/common-types";
5
- import { isAFormula, isCellWithinBounds, isNil, iterateCellsInRange, } from "@rowsncolumns/utils";
4
+ import { areaIntersects, isAFormula, isCellWithinBounds, isNil, iterateCellsInRange, } from "@rowsncolumns/utils";
6
5
  import { SheetCell } from "../sheet-cell";
7
6
  import { detokenize } from "./formula";
8
7
  import { moveFilterView, moveRange } from "./selection";
@@ -12,6 +11,35 @@ var isTableColumnToken = function (token) {
12
11
  var isTableNameToken = function (token) {
13
12
  return token.tokenType.name === tokenVocabulary.TableName.name;
14
13
  };
14
+ /**
15
+ * Excel's default for the Create Table dialog's "My table has headers": checked when the
16
+ * range's first row reads as a header row — it holds at least one value, every value in it is
17
+ * text (a number or boolean there means the data starts on the first row), and at least one row
18
+ * of data lies below it. A single-row range defaults to unchecked.
19
+ */
20
+ export var guessTableHasHeaders = function (_a) {
21
+ var _b, _c, _d;
22
+ var sheetId = _a.sheetId, range = _a.range, getEffectiveExtendedValue = _a.getEffectiveExtendedValue;
23
+ if (range.endRowIndex <= range.startRowIndex) {
24
+ return false;
25
+ }
26
+ var sawText = false;
27
+ for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
28
+ var value = getEffectiveExtendedValue(sheetId, range.startRowIndex, columnIndex);
29
+ if (!value) {
30
+ continue;
31
+ }
32
+ if (!isNil((_b = value.nv) !== null && _b !== void 0 ? _b : value.numberValue) ||
33
+ !isNil((_c = value.bv) !== null && _c !== void 0 ? _c : value.boolValue)) {
34
+ return false;
35
+ }
36
+ var text = (_d = value.sv) !== null && _d !== void 0 ? _d : value.stringValue;
37
+ if (!isNil(text) && text !== "") {
38
+ sawText = true;
39
+ }
40
+ }
41
+ return sawText;
42
+ };
15
43
  /**
16
44
  * Get table column index
17
45
  * @param sheetId
@@ -75,15 +103,25 @@ export var findAdjacentTable = function (sheetId, cell, tables, getUserEnteredVa
75
103
  startColumnIndex: cell.columnIndex,
76
104
  endColumnIndex: cell.columnIndex,
77
105
  }));
106
+ // Excel never merges tables: a line that belongs to another table is not free to grow over.
107
+ if (tables === null || tables === void 0 ? void 0 : tables.some(function (other) {
108
+ return other.id !== table.id &&
109
+ other.sheetId === sheetId &&
110
+ areaIntersects(other.range, lookupRange);
111
+ })) {
112
+ return false;
113
+ }
78
114
  return (isAdjacent &&
79
115
  __spreadArray([], __read(iterateCellsInRange(lookupRange)), false).every(function (_a) {
80
116
  var _b = __read(_a, 2), rowIndex = _b[0], columnIndex = _b[1];
81
117
  return isNil(getUserEnteredValue(sheetId, rowIndex, columnIndex));
82
118
  }));
83
119
  });
84
- var totalRowOffset = (adjacentTable === null || adjacentTable === void 0 ? void 0 : adjacentTable.totalRow) ? 1 : 0;
120
+ // A table with a totals row never grows by rows (Excel): the cell right of its totals row is
121
+ // a column expansion only.
85
122
  var isRowExpansion = adjacentTable
86
- ? adjacentTable.range.endRowIndex + 1 - totalRowOffset === cell.rowIndex
123
+ ? adjacentTable.range.endRowIndex + 1 === cell.rowIndex &&
124
+ !adjacentTable.totalRow
87
125
  : false;
88
126
  var isColumnExpansion = adjacentTable
89
127
  ? adjacentTable.range.endColumnIndex + 1 === cell.columnIndex
@@ -129,66 +167,61 @@ export var findAdjacentBandedRange = function (sheetId, cell, bandedRanges, getU
129
167
  : false;
130
168
  return [adjacentTable, isRowExpansion, isColumnExpansion];
131
169
  };
132
- // Check if table cells are fillable
133
- export var isTableColumnCellsFillable = function (sheetId, range, excludeCell, existingColumnFormula, currentValue, activeSheetName, getUserEnteredValue) {
134
- var _a;
135
- var normalizedExistingFormula = normalizeFormulaString(existingColumnFormula);
136
- var normalizedCurrentFormula = isAFormula(currentValue)
137
- ? normalizeFormulaString(currentValue)
138
- : undefined;
139
- var templateFormula = normalizedExistingFormula !== null && normalizedExistingFormula !== void 0 ? normalizedExistingFormula : normalizedCurrentFormula;
140
- if (!templateFormula) {
141
- return false;
142
- }
143
- var normalizedTemplate = (_a = SheetCell.getRelativeFormula(templateFormula, excludeCell, excludeCell, activeSheetName)) !== null && _a !== void 0 ? _a : templateFormula;
144
- var templateHasReferences = formulaHasCellReferences(templateFormula);
145
- var isAnchorCell = excludeCell.rowIndex === range.startRowIndex &&
146
- excludeCell.columnIndex === range.startColumnIndex;
147
- var normalizedCurrentLiteral = normalizeFormulaString(typeof currentValue === "string" ? currentValue : undefined);
148
- if (normalizedExistingFormula && !templateHasReferences) {
170
+ /**
171
+ * Excel's calculated-column fill decision, shared with the Rust engine's
172
+ * `auto_fill_calculated_column` (rowsncolumns/spreadsheet#681): a formula just
173
+ * written into a table body cell fills the whole column when every OTHER body
174
+ * cell of that column is either empty (a fresh column) or holds the same
175
+ * formula relative to its row (a consistent calculated column, which the new
176
+ * formula overwrites). A literal anywhere, or two rows that disagree, leave
177
+ * the edit a one-cell exception. The column's cells are the reference — not
178
+ * the formula recorded on `columns[].formula`, which has no row of its own —
179
+ * so the overwrite works from any row, not only the one the column was
180
+ * created from (#668 T-50). A consistent column is a calculated column
181
+ * whatever its formula references (`=TODAY()`, `=1`), like Excel (#668 T-29).
182
+ */
183
+ export var isTableColumnCellsFillable = function (sheetId, range, excludeCell, currentValue, activeSheetName, getUserEnteredValue) {
184
+ var e_2, _a;
185
+ var _b;
186
+ if (!isAFormula(currentValue)) {
149
187
  return false;
150
188
  }
151
- return __spreadArray([], __read(iterateCellsInRange(range)), false).every(function (_a) {
152
- var _b = __read(_a, 2), rowIndex = _b[0], columnIndex = _b[1];
153
- if (rowIndex === excludeCell.rowIndex &&
154
- columnIndex === excludeCell.columnIndex) {
155
- return true;
156
- }
157
- var userEnteredValue = getUserEnteredValue(sheetId, rowIndex, columnIndex);
158
- if (isNil(userEnteredValue) || userEnteredValue === "") {
159
- return true;
160
- }
161
- if (!isAFormula(userEnteredValue)) {
162
- return false;
189
+ // The column's existing formula, relativised to the edited cell — every
190
+ // non-empty body cell must agree on it.
191
+ var existingTemplate;
192
+ try {
193
+ for (var _c = __values(iterateCellsInRange(range)), _d = _c.next(); !_d.done; _d = _c.next()) {
194
+ var _e = __read(_d.value, 2), rowIndex = _e[0], columnIndex = _e[1];
195
+ if (rowIndex === excludeCell.rowIndex &&
196
+ columnIndex === excludeCell.columnIndex) {
197
+ continue;
198
+ }
199
+ var userEnteredValue = getUserEnteredValue(sheetId, rowIndex, columnIndex);
200
+ if (isNil(userEnteredValue) || userEnteredValue === "") {
201
+ continue;
202
+ }
203
+ if (!isAFormula(userEnteredValue)) {
204
+ return false;
205
+ }
206
+ // `$`-anchored references stay put from row to row (Excel), so they must
207
+ // not be shifted for the comparison.
208
+ var relativeFormula = (_b = SheetCell.getRelativeFormula(userEnteredValue, { rowIndex: rowIndex, columnIndex: columnIndex }, excludeCell, activeSheetName, undefined, false, undefined, undefined, true)) !== null && _b !== void 0 ? _b : userEnteredValue;
209
+ if (existingTemplate === undefined) {
210
+ existingTemplate = relativeFormula;
211
+ }
212
+ else if (existingTemplate !== relativeFormula) {
213
+ return false;
214
+ }
163
215
  }
164
- var relativeFormula = SheetCell.getRelativeFormula(userEnteredValue, { rowIndex: rowIndex, columnIndex: columnIndex }, excludeCell, activeSheetName);
165
- var comparable = relativeFormula !== null && relativeFormula !== void 0 ? relativeFormula : userEnteredValue;
166
- return normalizedTemplate === comparable;
167
- });
168
- };
169
- var formulaHasCellReferences = function (formula) {
170
- if (!formula || typeof formula !== "string" || !formula.startsWith("=")) {
171
- return false;
172
- }
173
- var tokens = lexify(formula).tokens;
174
- return tokens.some(function (token) {
175
- return CELL_REFERENCE_TOKEN_NAMES.has(token.tokenType.name);
176
- });
177
- };
178
- var CELL_REFERENCE_TOKEN_NAMES = new Set([
179
- (_a = tokenVocabulary.Cell) === null || _a === void 0 ? void 0 : _a.name,
180
- (_b = tokenVocabulary.Column) === null || _b === void 0 ? void 0 : _b.name,
181
- (_c = tokenVocabulary.TableColumnName) === null || _c === void 0 ? void 0 : _c.name,
182
- ].filter(function (tokenName) { return Boolean(tokenName); }));
183
- var normalizeFormulaString = function (value) {
184
- if (typeof value !== "string") {
185
- return undefined;
186
216
  }
187
- var trimmed = value.trim();
188
- if (!trimmed) {
189
- return undefined;
217
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
218
+ finally {
219
+ try {
220
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
221
+ }
222
+ finally { if (e_2) throw e_2.error; }
190
223
  }
191
- return trimmed.startsWith("=") ? trimmed : "=".concat(trimmed);
224
+ return true;
192
225
  };
193
226
  // Add table name to formula
194
227
  export var addTableNameToTokens = function (tokens, title) {