@rowsncolumns/spreadsheet-state 29.0.0 → 29.1.1

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 +131 -7
  2. package/dist/cjs/api/anchored-objects.d.ts.map +1 -1
  3. package/dist/cjs/api/anchored-objects.js +488 -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 +10 -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 +19 -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 +323 -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 +17 -2
  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 +17 -2
  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 +106 -44
  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 +16 -3
  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 +230 -19
  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 +149 -2
  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 +11 -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 +11 -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 +68 -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 +10 -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 +131 -7
  303. package/dist/esm/api/anchored-objects.d.ts.map +1 -1
  304. package/dist/esm/api/anchored-objects.js +399 -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 +10 -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 +19 -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 +260 -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 +17 -2
  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 +17 -2
  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 +69 -30
  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 +16 -3
  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 +180 -16
  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 +132 -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 +11 -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 +11 -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 +49 -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 +10 -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,10 +1,24 @@
1
- import type { ColorFilterCriteria, ConditionType, ConditionValue, FilterSpec, IconFilterCriteria } from "@rowsncolumns/spreadsheet";
1
+ import type { BooleanCondition, ColorFilterCriteria, ConditionType, ConditionValue, FilterConditionJoin, FilterCriteria, FilterSpec, IconFilterCriteria } from "@rowsncolumns/spreadsheet";
2
2
  export type CreateFilterSpecsExtras = {
3
3
  /** Pass `null` to clear an existing color filter on this column. */
4
4
  colorFilter?: ColorFilterCriteria | null;
5
5
  /** Pass `null` to clear an existing icon filter on this column. */
6
6
  iconFilter?: IconFilterCriteria | null;
7
+ /**
8
+ * Custom AutoFilter second clause + join (Excel's And / Or). Pass `null`
9
+ * to drop an existing second clause; omit to preserve it.
10
+ */
11
+ condition2?: BooleanCondition | null;
12
+ conditionJoin?: FilterConditionJoin | null;
7
13
  };
14
+ /**
15
+ * Whether a column's criteria still filter anything. An entry with no
16
+ * condition, no value whitelist and no color / icon criterion is inert, so
17
+ * `createFilterSpecs` drops it — Excel's "Clear Filter From <column>" —
18
+ * instead of leaving a stale spec behind (the rnc engine's
19
+ * `upsert_filter_spec` removes such entries the same way).
20
+ */
21
+ export declare const isFilterCriteriaActive: (criteria: FilterCriteria) => boolean;
8
22
  /**
9
23
  * Create a new filterspec
10
24
  * @param filterSpecs
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../api/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,mEAAmE;IACnE,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,UAAU,EAAE,GAAG,SAAS,EACrC,aAAa,MAAM,EACnB,eAAe,aAAa,GAAG,SAAS,EACxC,iBAAiB,cAAc,EAAE,GAAG,SAAS,EAC7C,eAAe,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,EAC1C,SAAQ,uBAA4B,KACnC,UAAU,EAuCZ,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GACzC,cAAa,UAAU,EAAO,+BAO/B,CAAC"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../api/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,mEAAmE;IACnE,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAAI,UAAU,cAAc,KAAG,OAO/D,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,UAAU,EAAE,GAAG,SAAS,EACrC,aAAa,MAAM,EACnB,eAAe,aAAa,GAAG,SAAS,EACxC,iBAAiB,cAAc,EAAE,GAAG,SAAS,EAC7C,eAAe,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,EAC1C,SAAQ,uBAA4B,KACnC,UAAU,EAuDZ,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GACzC,cAAa,UAAU,EAAO,+BAO/B,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import { __assign, __read, __spreadArray, __values } from "tslib";
2
+ /**
3
+ * Whether a column's criteria still filter anything. An entry with no
4
+ * condition, no value whitelist and no color / icon criterion is inert, so
5
+ * `createFilterSpecs` drops it — Excel's "Clear Filter From <column>" —
6
+ * instead of leaving a stale spec behind (the rnc engine's
7
+ * `upsert_filter_spec` removes such entries the same way).
8
+ */
9
+ export var isFilterCriteriaActive = function (criteria) {
10
+ var _a, _b, _c;
11
+ return Boolean(((_a = criteria.condition) === null || _a === void 0 ? void 0 : _a.type) ||
12
+ ((_b = criteria.condition2) === null || _b === void 0 ? void 0 : _b.type) ||
13
+ ((_c = criteria.visibleValues) === null || _c === void 0 ? void 0 : _c.length) ||
14
+ criteria.colorFilter ||
15
+ criteria.iconFilter);
16
+ };
2
17
  /**
3
18
  * Create a new filterspec
4
19
  * @param filterSpecs
@@ -9,13 +24,13 @@ import { __assign, __read, __spreadArray, __values } from "tslib";
9
24
  * @param extras Optional colorFilter / iconFilter criteria.
10
25
  */
11
26
  export var createFilterSpecs = function (filterSpecs, columnIndex, conditionType, conditionValues, visibleValues, extras) {
12
- var _a, _b;
27
+ var _a, _b, _c, _d;
13
28
  if (extras === void 0) { extras = {}; }
14
29
  var exists = filterSpecs === null || filterSpecs === void 0 ? void 0 : filterSpecs.find(function (spec) { return spec.columnIndex === columnIndex; });
15
30
  // Spec
16
31
  var filterSpec = {
17
32
  columnIndex: columnIndex,
18
- filterCriteria: __assign(__assign({ condition: {
33
+ filterCriteria: __assign(__assign(__assign({ condition: {
19
34
  type: conditionType,
20
35
  values: conditionValues,
21
36
  }, visibleValues: visibleValues }, (extras.colorFilter !== undefined
@@ -26,8 +41,23 @@ export var createFilterSpecs = function (filterSpecs, columnIndex, conditionType
26
41
  ? { iconFilter: (_b = extras.iconFilter) !== null && _b !== void 0 ? _b : undefined }
27
42
  : (exists === null || exists === void 0 ? void 0 : exists.filterCriteria.iconFilter)
28
43
  ? { iconFilter: exists.filterCriteria.iconFilter }
44
+ : {})), (extras.condition2 !== undefined
45
+ ? extras.condition2
46
+ ? {
47
+ condition2: extras.condition2,
48
+ conditionJoin: (_c = extras.conditionJoin) !== null && _c !== void 0 ? _c : "AND",
49
+ }
50
+ : {}
51
+ : (exists === null || exists === void 0 ? void 0 : exists.filterCriteria.condition2)
52
+ ? {
53
+ condition2: exists.filterCriteria.condition2,
54
+ conditionJoin: (_d = exists.filterCriteria.conditionJoin) !== null && _d !== void 0 ? _d : "AND",
55
+ }
29
56
  : {})),
30
57
  };
58
+ if (!isFilterCriteriaActive(filterSpec.filterCriteria)) {
59
+ return (filterSpecs !== null && filterSpecs !== void 0 ? filterSpecs : []).filter(function (spec) { return spec.columnIndex !== columnIndex; });
60
+ }
31
61
  if (exists && filterSpecs) {
32
62
  return filterSpecs.map(function (spec) {
33
63
  if (spec.columnIndex === columnIndex) {
@@ -1,3 +1,4 @@
1
+ import type { GridRange } from "@rowsncolumns/common-types";
1
2
  import type { ParsedToken } from "@rowsncolumns/spreadsheet";
2
3
  export { ERROR_CIRCULAR_DEPENDENCY, ERROR_REFERENCE, formulaToRelativeReference, } from "@rowsncolumns/calculator";
3
4
  export type { FormulaToRelativeReferenceOptions } from "@rowsncolumns/calculator";
@@ -39,6 +40,68 @@ export declare const breakTableReferencesInFormula: (formulaValue: string, table
39
40
  * `=Table1[@#REF!]*2`). Keeps every other character of the reference as typed.
40
41
  */
41
42
  export declare const breakTableColumnsInFormula: (formulaValue: string, tableName: string | undefined, columnNames: string[]) => string;
43
+ /**
44
+ * Rename the column `oldName` → `newName` inside the structured references to
45
+ * `tableName` (or, when `tableName` is undefined, the bare this-row form
46
+ * `[@Col]` whose table is implied by the formula's own cell): `Table1[Qty]`,
47
+ * `[@Qty]`, `Table1[[#Headers],[Qty]]` and `Table1[[Qty]:[Price]]` all follow
48
+ * a header-cell edit in Excel. Column names compare case-insensitively; every
49
+ * other character of the reference is kept as typed.
50
+ */
51
+ export declare const renameTableColumnInFormula: (formulaValue: string, tableName: string | undefined, oldName: string, newName: string) => string;
52
+ /**
53
+ * Rename several columns of `tableName` at once — `renames` maps each
54
+ * LOWER-CASED old name to its new name. One pass over the formula, so
55
+ * `Name` → `Qty` and `Qty` → `Name` swap instead of chaining into the same
56
+ * column (a header row re-derived after a row delete, or several header cells
57
+ * written by one paste / change-batch).
58
+ */
59
+ export declare const renameTableColumnsInFormula: (formulaValue: string, tableName: string | undefined, renames: ReadonlyMap<string, string>) => string;
60
+ /**
61
+ * Rename the table `oldName` → `newName` in every structured reference
62
+ * (`Old[Col]`, `Old[@Col]`, `Old[[#Headers],[Col]]`, `Old[#All]`) — Excel
63
+ * rewrites them all when a table is renamed. Table names compare
64
+ * case-insensitively; the bare `[@Col]` form names no table and is left alone.
65
+ */
66
+ export declare const renameTableInFormula: (formulaValue: string, oldName: string, newName: string) => string;
67
+ /**
68
+ * Rename several tables at once — `renames` maps each LOWER-CASED old name to
69
+ * its new name. One pass, so `Sales` → `Sales2` and `Sales2` → `Sales3` never
70
+ * chain (a sheet duplicated with both tables re-points each reference exactly
71
+ * once).
72
+ */
73
+ export declare const renameTablesInFormula: (formulaValue: string, renames: ReadonlyMap<string, string>) => string;
74
+ /** The table geometry a structured reference resolves against — the `TableView` fields that matter. */
75
+ export type StructuredRefTable = {
76
+ title: string;
77
+ range: GridRange;
78
+ headerRow?: boolean | null;
79
+ totalRow?: boolean | null;
80
+ /** Column names in header order. */
81
+ columnNames: string[];
82
+ };
83
+ export type ConvertStructuredRefsOptions = {
84
+ /** Name of the sheet the table lives on. */
85
+ tableSheetName: string;
86
+ /** Name of the sheet the formula cell lives on — the reference is sheet-qualified when it differs. */
87
+ formulaSheetName: string;
88
+ /** Row of the formula cell: what a this-row item (`[@Col]`) resolves to. */
89
+ formulaRowIndex: number;
90
+ /** Whether the formula cell sits inside the table, which the bare `[@Col]` / `[Col]` forms name. */
91
+ inTable: boolean;
92
+ };
93
+ /**
94
+ * Rewrite every structured reference into `table` — `T[Col]`, `T[[#Headers],[Col]]`, `T[#All]`,
95
+ * `T[[A]:[B]]`, `T[@Col]`, `T[[#This Row],[Col]]` and, inside the table, the bare `[@Col]` /
96
+ * `[Col]` forms — to the plain A1 reference it resolves to, the way Excel's Convert to Range
97
+ * rewrites formulas so their values keep working once the table is gone. Column, header, totals
98
+ * and whole-table items become absolute (`$B$2:$B$9`, `$B$1`), this-row items the relative
99
+ * same-row reference (`B3`), and the reference is qualified with the table's sheet when the
100
+ * formula lives on another one. A reference that cannot resolve (an unknown column, `#Headers`
101
+ * on a headerless table, `@` outside the table's data rows) becomes the `#REF!` it would have
102
+ * evaluated to. Returns the input unchanged when the formula never references the table.
103
+ */
104
+ export declare const convertStructuredRefsToA1InFormula: (formulaValue: string, table: StructuredRefTable, options: ConvertStructuredRefsOptions) => string;
42
105
  /**
43
106
  * Converts tokens to string
44
107
  * @param tokens
@@ -1 +1 @@
1
- {"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../api/formula.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,2BAA2B,CAAC;AAUpE,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAElF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WA4BhB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAehB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAYhB,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAgDxC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,GACxC,cAAc,MAAM,EACpB,WAAW,MAAM,KAChB,MA4BF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,aAAa,MAAM,EAAE,KACpB,MA+BF,CAAC;AAaF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,WAU/C,CAAC;AAiBF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,WAGpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGjE,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBrE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,GAAG,SAAS,EAC3B,gBAAgB,MAAM,EACtB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAyKX,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,GAAG,SAAS,EAC3B,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAkPX,CAAC"}
1
+ {"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../api/formula.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,2BAA2B,CAAC;AAUpE,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAElF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WA4BhB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAehB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAYhB,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAgDxC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,GACxC,cAAc,MAAM,EACpB,WAAW,MAAM,KAChB,MA4BF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,aAAa,MAAM,EAAE,KACpB,MAMA,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,SAAS,MAAM,EACf,SAAS,MAAM,KACd,MAOe,CAAC;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAGA,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,KACd,MAQF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,EACpB,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAiBF,CAAC;AA6EF,uGAAuG;AACvG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,oGAAoG;IACpG,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC,GAC7C,cAAc,MAAM,EACpB,OAAO,kBAAkB,EACzB,SAAS,4BAA4B,KACpC,MAkDF,CAAC;AA2HF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,WAU/C,CAAC;AAiBF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,WAGpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGjE,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBrE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,GAAG,SAAS,EAC3B,gBAAgB,MAAM,EACtB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAyKX,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,GAAG,SAAS,EAC3B,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAkPX,CAAC"}
@@ -1,5 +1,5 @@
1
- import { __assign, __read, __values } from "tslib";
2
- import { cleanupColumnName, cleanupTableName, isRangeToken, lexify, stripPropertyFromCellRef, tokenVocabulary, } from "@rowsncolumns/calculator";
1
+ import { __assign, __read, __spreadArray, __values } from "tslib";
2
+ import { cleanupColumnName, cleanupSpecialItem, cleanupTableName, detectCurrentRow, isRangeToken, lexify, stripPropertyFromCellRef, tokenVocabulary, } from "@rowsncolumns/calculator";
3
3
  import { addressToCell, alpha2number, cellToAddress, desanitizeSheetName, number2Alpha, sanitizeSheetName, } from "@rowsncolumns/utils";
4
4
  export { ERROR_CIRCULAR_DEPENDENCY, ERROR_REFERENCE, formulaToRelativeReference, } from "@rowsncolumns/calculator";
5
5
  /**
@@ -193,10 +193,99 @@ export var breakTableReferencesInFormula = function (formulaValue, tableName) {
193
193
  * `=Table1[@#REF!]*2`). Keeps every other character of the reference as typed.
194
194
  */
195
195
  export var breakTableColumnsInFormula = function (formulaValue, tableName, columnNames) {
196
- if (!formulaValue.includes("[") || columnNames.length === 0) {
196
+ return replaceTableColumnsInFormula(formulaValue, tableName, columnNames, REF_ERROR_COLUMN);
197
+ };
198
+ /**
199
+ * Rename the column `oldName` → `newName` inside the structured references to
200
+ * `tableName` (or, when `tableName` is undefined, the bare this-row form
201
+ * `[@Col]` whose table is implied by the formula's own cell): `Table1[Qty]`,
202
+ * `[@Qty]`, `Table1[[#Headers],[Qty]]` and `Table1[[Qty]:[Price]]` all follow
203
+ * a header-cell edit in Excel. Column names compare case-insensitively; every
204
+ * other character of the reference is kept as typed.
205
+ */
206
+ export var renameTableColumnInFormula = function (formulaValue, tableName, oldName, newName) {
207
+ return oldName && newName && oldName !== newName
208
+ ? renameTableColumnsInFormula(formulaValue, tableName, new Map([[oldName.toLowerCase(), newName]]))
209
+ : formulaValue;
210
+ };
211
+ /**
212
+ * Rename several columns of `tableName` at once — `renames` maps each
213
+ * LOWER-CASED old name to its new name. One pass over the formula, so
214
+ * `Name` → `Qty` and `Qty` → `Name` swap instead of chaining into the same
215
+ * column (a header row re-derived after a row delete, or several header cells
216
+ * written by one paste / change-batch).
217
+ */
218
+ export var renameTableColumnsInFormula = function (formulaValue, tableName, renames) {
219
+ return rewriteTableColumnsInFormula(formulaValue, tableName, function (name) {
220
+ return renames.get(name);
221
+ });
222
+ };
223
+ /**
224
+ * Rename the table `oldName` → `newName` in every structured reference
225
+ * (`Old[Col]`, `Old[@Col]`, `Old[[#Headers],[Col]]`, `Old[#All]`) — Excel
226
+ * rewrites them all when a table is renamed. Table names compare
227
+ * case-insensitively; the bare `[@Col]` form names no table and is left alone.
228
+ */
229
+ export var renameTableInFormula = function (formulaValue, oldName, newName) {
230
+ if (!oldName || !newName || oldName === newName) {
231
+ return formulaValue;
232
+ }
233
+ return renameTablesInFormula(formulaValue, new Map([[oldName.toLowerCase(), newName]]));
234
+ };
235
+ /**
236
+ * Rename several tables at once — `renames` maps each LOWER-CASED old name to
237
+ * its new name. One pass, so `Sales` → `Sales2` and `Sales2` → `Sales3` never
238
+ * chain (a sheet duplicated with both tables re-points each reference exactly
239
+ * once).
240
+ */
241
+ export var renameTablesInFormula = function (formulaValue, renames) {
242
+ var e_5, _a;
243
+ if (!formulaValue.includes("[") || renames.size === 0) {
244
+ return formulaValue;
245
+ }
246
+ var tokens = cloneTokens(lexify(formulaValue).tokens);
247
+ var hasChanges = false;
248
+ try {
249
+ for (var tokens_4 = __values(tokens), tokens_4_1 = tokens_4.next(); !tokens_4_1.done; tokens_4_1 = tokens_4.next()) {
250
+ var token = tokens_4_1.value;
251
+ if (!isTableNameToken(token))
252
+ continue;
253
+ var newName = renames.get(cleanupTableName(token.image).trim().toLowerCase());
254
+ if (newName === undefined)
255
+ continue;
256
+ // The image is the name as typed plus its opening bracket.
257
+ token.image = newName + token.image.slice(token.image.indexOf("["));
258
+ hasChanges = true;
259
+ }
260
+ }
261
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
262
+ finally {
263
+ try {
264
+ if (tokens_4_1 && !tokens_4_1.done && (_a = tokens_4.return)) _a.call(tokens_4);
265
+ }
266
+ finally { if (e_5) throw e_5.error; }
267
+ }
268
+ return hasChanges ? detokenize(tokens) : formulaValue;
269
+ };
270
+ var replaceTableColumnsInFormula = function (formulaValue, tableName, columnNames, replacement) {
271
+ if (columnNames.length === 0) {
197
272
  return formulaValue;
198
273
  }
199
274
  var targets = new Set(columnNames.map(function (name) { return name.toLowerCase(); }));
275
+ return rewriteTableColumnsInFormula(formulaValue, tableName, function (name) {
276
+ return targets.has(name) ? replacement : undefined;
277
+ });
278
+ };
279
+ /**
280
+ * Rewrite the column items of every structured reference into `tableName`
281
+ * (or, when undefined, the bare `[@Col]` forms) through `resolve`, which maps
282
+ * a LOWER-CASED column name to its replacement or `undefined` to leave it.
283
+ * Each item is resolved once, so a set of renames applies in a single pass.
284
+ */
285
+ var rewriteTableColumnsInFormula = function (formulaValue, tableName, resolve) {
286
+ if (!formulaValue.includes("[")) {
287
+ return formulaValue;
288
+ }
200
289
  var target = tableName === null || tableName === void 0 ? void 0 : tableName.toLowerCase();
201
290
  var tokens = cloneTokens(lexify(formulaValue).tokens);
202
291
  var hasChanges = false;
@@ -209,8 +298,9 @@ export var breakTableColumnsInFormula = function (formulaValue, tableName, colum
209
298
  cleanupTableName(token.image).trim().toLowerCase() === target;
210
299
  if (matches) {
211
300
  for (var j = i + 1; j < end; j++) {
212
- if (breakColumnToken(tokens[j], targets))
301
+ if (replaceColumnToken(tokens[j], resolve)) {
213
302
  hasChanges = true;
303
+ }
214
304
  }
215
305
  }
216
306
  i = end;
@@ -218,26 +308,206 @@ export var breakTableColumnsInFormula = function (formulaValue, tableName, colum
218
308
  }
219
309
  // A bare `[@Col]` / `[Col]` names the table the formula cell sits in.
220
310
  if (target === undefined && isTableColumnToken(token)) {
221
- if (breakColumnToken(token, targets))
311
+ if (replaceColumnToken(token, resolve))
222
312
  hasChanges = true;
223
313
  }
224
314
  i++;
225
315
  }
226
316
  return hasChanges ? detokenize(tokens) : formulaValue;
227
317
  };
228
- var breakColumnToken = function (token, targets) {
318
+ var replaceColumnToken = function (token, resolve) {
229
319
  if (!token || !isTableColumnToken(token))
230
320
  return false;
231
321
  var name = cleanupColumnName(token.image);
232
- if (!name || !targets.has(name.toLowerCase()))
322
+ if (!name)
323
+ return false;
324
+ var replacement = resolve(name.toLowerCase());
325
+ if (replacement === undefined)
233
326
  return false;
234
327
  var at = token.image.indexOf(name);
235
328
  if (at === -1)
236
329
  return false;
237
330
  token.image =
238
- token.image.slice(0, at) + REF_ERROR_COLUMN + token.image.slice(at + name.length);
331
+ token.image.slice(0, at) + replacement + token.image.slice(at + name.length);
239
332
  return true;
240
333
  };
334
+ /**
335
+ * Rewrite every structured reference into `table` — `T[Col]`, `T[[#Headers],[Col]]`, `T[#All]`,
336
+ * `T[[A]:[B]]`, `T[@Col]`, `T[[#This Row],[Col]]` and, inside the table, the bare `[@Col]` /
337
+ * `[Col]` forms — to the plain A1 reference it resolves to, the way Excel's Convert to Range
338
+ * rewrites formulas so their values keep working once the table is gone. Column, header, totals
339
+ * and whole-table items become absolute (`$B$2:$B$9`, `$B$1`), this-row items the relative
340
+ * same-row reference (`B3`), and the reference is qualified with the table's sheet when the
341
+ * formula lives on another one. A reference that cannot resolve (an unknown column, `#Headers`
342
+ * on a headerless table, `@` outside the table's data rows) becomes the `#REF!` it would have
343
+ * evaluated to. Returns the input unchanged when the formula never references the table.
344
+ */
345
+ export var convertStructuredRefsToA1InFormula = function (formulaValue, table, options) {
346
+ if (!formulaValue.includes("["))
347
+ return formulaValue;
348
+ var target = table.title.toLowerCase();
349
+ var tokens = cloneTokens(lexify(formulaValue).tokens);
350
+ var newTokens = [];
351
+ var hasChanges = false;
352
+ var i = 0;
353
+ while (i < tokens.length) {
354
+ var token = tokens[i];
355
+ if (isTableNameToken(token)) {
356
+ var end = structuredReferenceEnd(tokens, i);
357
+ if (cleanupTableName(token.image).trim().toLowerCase() !== target) {
358
+ // Another table's reference: keep it whole (its `@Col` items are not bare forms).
359
+ newTokens.push.apply(newTokens, __spreadArray([], __read(tokens.slice(i, end)), false));
360
+ i = end;
361
+ continue;
362
+ }
363
+ newTokens.push(collapseToReference(token, tokens[end - 1], resolveStructuredReference(table, tokens.slice(i + 1, end), options)));
364
+ hasChanges = true;
365
+ i = end;
366
+ continue;
367
+ }
368
+ // A bare `[@Col]` / `[Col]` names the table the formula cell sits in.
369
+ if (options.inTable &&
370
+ isTableColumnToken(token) &&
371
+ token.image.startsWith("[")) {
372
+ var end = structuredReferenceEnd(tokens, i);
373
+ newTokens.push(collapseToReference(token, tokens[end - 1], resolveStructuredReference(table, tokens.slice(i, end), options)));
374
+ hasChanges = true;
375
+ i = end;
376
+ continue;
377
+ }
378
+ newTokens.push(token);
379
+ i++;
380
+ }
381
+ return hasChanges ? detokenize(newTokens) : formulaValue;
382
+ };
383
+ /** One reference token (or `#REF!`) standing in for the run `start … end` (see `collapseToRefError`). */
384
+ var collapseToReference = function (start, end, image) {
385
+ var _a, _b;
386
+ return (__assign(__assign({}, start), { image: image, tokenType: image === REF_ERROR_TOKEN
387
+ ? tokenVocabulary.RefError
388
+ : tokenVocabulary.Cell, endOffset: (_a = end === null || end === void 0 ? void 0 : end.endOffset) !== null && _a !== void 0 ? _a : start.endOffset, endColumn: (_b = end === null || end === void 0 ? void 0 : end.endColumn) !== null && _b !== void 0 ? _b : start.endColumn }));
389
+ };
390
+ /**
391
+ * The A1 text the structured-reference `specifier` tokens (everything after the table name up to
392
+ * the closing bracket, or the bare column form) resolve to against `table`, or `#REF!`.
393
+ */
394
+ var resolveStructuredReference = function (table, specifier, _a) {
395
+ var e_6, _b, _c, e_7, _d;
396
+ var _e, _f;
397
+ var tableSheetName = _a.tableSheetName, formulaSheetName = _a.formulaSheetName, formulaRowIndex = _a.formulaRowIndex;
398
+ var thisRow = false;
399
+ var items = new Set();
400
+ var columns = [];
401
+ try {
402
+ for (var specifier_1 = __values(specifier), specifier_1_1 = specifier_1.next(); !specifier_1_1.done; specifier_1_1 = specifier_1.next()) {
403
+ var token = specifier_1_1.value;
404
+ var name_1 = token.tokenType.name;
405
+ if (name_1 === tokenVocabulary.SpecialItem.name) {
406
+ var item = cleanupSpecialItem(token.image).trim().toLowerCase();
407
+ if (item === "#this row")
408
+ thisRow = true;
409
+ else
410
+ items.add(item);
411
+ }
412
+ else if (name_1 === tokenVocabulary.TableColumnName.name) {
413
+ if (detectCurrentRow(token.image))
414
+ thisRow = true;
415
+ var column = cleanupColumnName(token.image).trim();
416
+ if (column)
417
+ columns.push(column);
418
+ }
419
+ else if (name_1 === tokenVocabulary.At.name) {
420
+ thisRow = true;
421
+ }
422
+ }
423
+ }
424
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
425
+ finally {
426
+ try {
427
+ if (specifier_1_1 && !specifier_1_1.done && (_b = specifier_1.return)) _b.call(specifier_1);
428
+ }
429
+ finally { if (e_6) throw e_6.error; }
430
+ }
431
+ var range = table.range;
432
+ var headerRow = (_e = table.headerRow) !== null && _e !== void 0 ? _e : true;
433
+ var totalRow = (_f = table.totalRow) !== null && _f !== void 0 ? _f : false;
434
+ var dataStartRowIndex = range.startRowIndex + (headerRow ? 1 : 0);
435
+ var dataEndRowIndex = range.endRowIndex - (totalRow ? 1 : 0);
436
+ // Column span: the named column, or the `[A]:[B]` pair (either order); none → every column.
437
+ var startColumnIndex = range.startColumnIndex;
438
+ var endColumnIndex = range.endColumnIndex;
439
+ if (columns.length) {
440
+ if (columns.length > 2)
441
+ return REF_ERROR_TOKEN;
442
+ var offsets = columns.map(function (column) {
443
+ return table.columnNames.findIndex(function (candidate) { return candidate.toLowerCase() === column.toLowerCase(); });
444
+ });
445
+ if (offsets.some(function (offset) { return offset === -1; }))
446
+ return REF_ERROR_TOKEN;
447
+ startColumnIndex = range.startColumnIndex + Math.min.apply(Math, __spreadArray([], __read(offsets), false));
448
+ endColumnIndex = range.startColumnIndex + Math.max.apply(Math, __spreadArray([], __read(offsets), false));
449
+ }
450
+ // Row band.
451
+ var startRowIndex;
452
+ var endRowIndex;
453
+ if (thisRow) {
454
+ if (items.size ||
455
+ formulaRowIndex < dataStartRowIndex ||
456
+ formulaRowIndex > range.endRowIndex) {
457
+ return REF_ERROR_TOKEN;
458
+ }
459
+ startRowIndex = endRowIndex = formulaRowIndex;
460
+ }
461
+ else if (items.has("#all")) {
462
+ startRowIndex = range.startRowIndex;
463
+ endRowIndex = range.endRowIndex;
464
+ }
465
+ else {
466
+ var bands = [];
467
+ if (items.has("#headers")) {
468
+ if (!headerRow)
469
+ return REF_ERROR_TOKEN;
470
+ bands.push([range.startRowIndex, range.startRowIndex]);
471
+ }
472
+ if (items.has("#data") || (!items.has("#headers") && !items.has("#totals"))) {
473
+ if (dataStartRowIndex > dataEndRowIndex)
474
+ return REF_ERROR_TOKEN;
475
+ bands.push([dataStartRowIndex, dataEndRowIndex]);
476
+ }
477
+ if (items.has("#totals")) {
478
+ if (!totalRow)
479
+ return REF_ERROR_TOKEN;
480
+ bands.push([range.endRowIndex, range.endRowIndex]);
481
+ }
482
+ bands.sort(function (a, b) { return a[0] - b[0]; });
483
+ _c = __read(bands[0], 2), startRowIndex = _c[0], endRowIndex = _c[1];
484
+ try {
485
+ for (var _g = __values(bands.slice(1)), _h = _g.next(); !_h.done; _h = _g.next()) {
486
+ var _j = __read(_h.value, 2), bandStart = _j[0], bandEnd = _j[1];
487
+ // `[#Headers],[#Totals]` skips the data rows: not one rectangle.
488
+ if (bandStart > endRowIndex + 1)
489
+ return REF_ERROR_TOKEN;
490
+ endRowIndex = Math.max(endRowIndex, bandEnd);
491
+ }
492
+ }
493
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
494
+ finally {
495
+ try {
496
+ if (_h && !_h.done && (_d = _g.return)) _d.call(_g);
497
+ }
498
+ finally { if (e_7) throw e_7.error; }
499
+ }
500
+ }
501
+ var absolute = !thisRow;
502
+ var start = cellToAddress({ rowIndex: startRowIndex, columnIndex: startColumnIndex }, absolute, absolute);
503
+ var end = cellToAddress({ rowIndex: endRowIndex, columnIndex: endColumnIndex }, absolute, absolute);
504
+ if (!start || !end)
505
+ return REF_ERROR_TOKEN;
506
+ var prefix = tableSheetName.toLowerCase() !== formulaSheetName.toLowerCase()
507
+ ? "".concat(sanitizeSheetName(tableSheetName), "!")
508
+ : "";
509
+ return start === end ? "".concat(prefix).concat(start) : "".concat(prefix).concat(start, ":").concat(end);
510
+ };
241
511
  /**
242
512
  * Converts tokens to string
243
513
  * @param tokens
@@ -1,4 +1,9 @@
1
1
  import type { CellFormat, CellInterface, GridRange } from "@rowsncolumns/common-types";
2
+ import type { CellData } from "@rowsncolumns/spreadsheet";
3
+ import type { Draft } from "immer";
4
+ import type { CellXfsRegistry } from "../hooks/use-cellxfs-registry";
5
+ import type { SheetData } from "../hooks/use-spreadsheet-state";
6
+ import type { SharedStringRegistry } from "../hooks/use-ss-registry";
2
7
  /**
3
8
  * Format-painter pattern shared by both engines: the captured 2-D format grid plus the
4
9
  * source block's merge configuration, re-based to the block's top-left so it can be tiled
@@ -49,7 +54,23 @@ export declare const getBandedCellFormat: (bandedCells: Map<string, CellFormat>
49
54
  * Layer a cell's explicit format over the banded format the grid would paint beneath it, so the
50
55
  * captured pattern carries the VISIBLE look (Sheets copies the alternating colours as static cell
51
56
  * fills — it does not create a table or banding at the target). Explicit keys win; an explicit
52
- * `undefined` never clobbers a banded value.
57
+ * `undefined` never clobbers a banded value. `textFormat` merges key-wise: an explicitly bold
58
+ * header keeps the contrast text colour the band paints it with.
53
59
  */
54
60
  export declare const layerBandedFormat: (explicit: CellFormat | null | undefined, banded: CellFormat | undefined) => CellFormat | null | undefined;
61
+ /**
62
+ * Write the banded (table stripe) formats the grid paints under `range` into the cells as
63
+ * static formats — Excel's Convert to Range bakes the table style into the cell formats — each
64
+ * cell's explicit format layered on top exactly as the format painter captures it. Runs inside
65
+ * the caller's sheet-data draft; cells without a band are untouched.
66
+ */
67
+ export declare const bakeBandedFormats: <T extends CellData>({ draft, sheetId, range, bandedCells, locale, cellXfsRegistry, sharedStringRegistry, }: {
68
+ draft: Draft<SheetData<T>>;
69
+ sheetId: number;
70
+ range: GridRange;
71
+ bandedCells: Map<string, CellFormat> | undefined | null;
72
+ locale?: string;
73
+ cellXfsRegistry?: CellXfsRegistry;
74
+ sharedStringRegistry?: SharedStringRegistry;
75
+ }) => void;
55
76
  //# sourceMappingURL=paint-format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paint-format.d.ts","sourceRoot":"","sources":["../../../api/paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;AAGpC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC;IAC7C,kFAAkF;IAClF,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,SAAS,KAChB,SAAS,EAaX,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,YAAY,aAAa,KACxB,SAkBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC5C,gBAAgB,SAAS,EAAE,KAC1B,IAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,gBAAgB,SAAS,EAAE,EAC3B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,QAAQ,SAAS,KAChB,SAAS,EAqBX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,IAAI,EACvD,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,UAAU,GAAG,SACyC,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,QAAQ,UAAU,GAAG,SAAS,KAC7B,UAAU,GAAG,IAAI,GAAG,SAWtB,CAAC"}
1
+ {"version":3,"file":"paint-format.d.ts","sourceRoot":"","sources":["../../../api/paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIrE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC;IAC7C,kFAAkF;IAClF,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,SAAS,KAChB,SAAS,EAaX,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,YAAY,aAAa,KACxB,SAkBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC5C,gBAAgB,SAAS,EAAE,KAC1B,IAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,gBAAgB,SAAS,EAAE,EAC3B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,QAAQ,SAAS,KAChB,SAAS,EAqBX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,IAAI,EACvD,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,UAAU,GAAG,SACyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,QAAQ,UAAU,GAAG,SAAS,KAC7B,UAAU,GAAG,IAAI,GAAG,SActB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,wFAQnD;IACD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,SA6CA,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { __assign, __read, __values } from "tslib";
2
2
  import { cellIdentifier, isCellWithinBounds } from "@rowsncolumns/grid";
3
+ import { SheetCell } from "../sheet-cell";
4
+ import { createSheetDraft } from "./immer-utils";
3
5
  var rangeContains = function (outer, inner) {
4
6
  return inner.startRowIndex >= outer.startRowIndex &&
5
7
  inner.endRowIndex <= outer.endRowIndex &&
@@ -146,7 +148,8 @@ export var getBandedCellFormat = function (bandedCells, rowIndex, columnIndex) {
146
148
  * Layer a cell's explicit format over the banded format the grid would paint beneath it, so the
147
149
  * captured pattern carries the VISIBLE look (Sheets copies the alternating colours as static cell
148
150
  * fills — it does not create a table or banding at the target). Explicit keys win; an explicit
149
- * `undefined` never clobbers a banded value.
151
+ * `undefined` never clobbers a banded value. `textFormat` merges key-wise: an explicitly bold
152
+ * header keeps the contrast text colour the band paints it with.
150
153
  */
151
154
  export var layerBandedFormat = function (explicit, banded) {
152
155
  var e_4, _a;
@@ -169,6 +172,59 @@ export var layerBandedFormat = function (explicit, banded) {
169
172
  }
170
173
  finally { if (e_4) throw e_4.error; }
171
174
  }
175
+ if (explicit.textFormat && banded.textFormat) {
176
+ merged.textFormat = __assign(__assign({}, banded.textFormat), explicit.textFormat);
177
+ }
172
178
  }
173
179
  return merged;
174
180
  };
181
+ /**
182
+ * Write the banded (table stripe) formats the grid paints under `range` into the cells as
183
+ * static formats — Excel's Convert to Range bakes the table style into the cell formats — each
184
+ * cell's explicit format layered on top exactly as the format painter captures it. Runs inside
185
+ * the caller's sheet-data draft; cells without a band are untouched.
186
+ */
187
+ export var bakeBandedFormats = function (_a) {
188
+ var e_5, _b;
189
+ var _c, _d;
190
+ var draft = _a.draft, sheetId = _a.sheetId, range = _a.range, bandedCells = _a.bandedCells, locale = _a.locale, cellXfsRegistry = _a.cellXfsRegistry, sharedStringRegistry = _a.sharedStringRegistry;
191
+ if (!(bandedCells === null || bandedCells === void 0 ? void 0 : bandedCells.size))
192
+ return;
193
+ var sheetCell = new SheetCell();
194
+ for (var rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
195
+ for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
196
+ var banded = getBandedCellFormat(bandedCells, rowIndex, columnIndex);
197
+ if (!banded)
198
+ continue;
199
+ var currentSheet = createSheetDraft(draft, sheetId, rowIndex);
200
+ sheetCell.assign(sheetId, { rowIndex: rowIndex, columnIndex: columnIndex }, (_d = (_c = currentSheet[rowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[columnIndex], { locale: locale, cellXfsRegistry: cellXfsRegistry, sharedStringRegistry: sharedStringRegistry });
201
+ var baked = layerBandedFormat(sheetCell.userEnteredFormat, banded);
202
+ sheetCell.clearUserEnteredFormat();
203
+ try {
204
+ for (var _e = (e_5 = void 0, __values(Object.entries(baked !== null && baked !== void 0 ? baked : {}))), _f = _e.next(); !_f.done; _f = _e.next()) {
205
+ var _g = __read(_f.value, 2), key = _g[0], value = _g[1];
206
+ // A band carries `undefined` for the parts it does not paint (no border, no text
207
+ // colour) — those must not land as empty `{}` formats on the cell.
208
+ if (value === undefined)
209
+ continue;
210
+ if (typeof value === "object" &&
211
+ value !== null &&
212
+ Object.values(value).every(function (part) { return part === undefined; })) {
213
+ continue;
214
+ }
215
+ sheetCell.setUserEnteredFormat(key, value);
216
+ }
217
+ }
218
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
219
+ finally {
220
+ try {
221
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
222
+ }
223
+ finally { if (e_5) throw e_5.error; }
224
+ }
225
+ currentSheet[rowIndex].values[columnIndex] =
226
+ sheetCell.getCellData();
227
+ cellXfsRegistry === null || cellXfsRegistry === void 0 ? void 0 : cellXfsRegistry.registerCellXfs(sheetCell);
228
+ }
229
+ }
230
+ };
@@ -1,3 +1,25 @@
1
1
  import type { SortOrder } from "@rowsncolumns/spreadsheet";
2
- export declare const cellValueSorter: (left: string | number | boolean | undefined | null, right: string | number | boolean | undefined | null, sortOrder: SortOrder) => number;
2
+ /**
3
+ * A cell whose effective value is an error (`#DIV/0!`, `#N/A`, …). Errors
4
+ * form the last value tier and keep their relative order, as in Excel.
5
+ */
6
+ export type SortErrorValue = {
7
+ readonly sortError: string;
8
+ };
9
+ export type SortCellValue = string | number | boolean | SortErrorValue | undefined | null;
10
+ export declare const isSortErrorValue: (value: unknown) => value is SortErrorValue;
11
+ /**
12
+ * The value a sort compares for a cell: its error when it has one, else the
13
+ * effective value, else the display text.
14
+ */
15
+ export declare const getCellSortValue: (cell: {
16
+ readonly error: unknown;
17
+ getEffectiveValue(): string | number | boolean | undefined;
18
+ readonly formattedValue: string | undefined | null;
19
+ }) => SortCellValue;
20
+ /**
21
+ * Excel's sort order: numbers < text < logicals < errors, blanks last in
22
+ * BOTH directions, text compared case-insensitively through the collator.
23
+ */
24
+ export declare const cellValueSorter: (left: SortCellValue, right: SortCellValue, sortOrder: SortOrder) => number;
3
25
  //# sourceMappingURL=sort.d.ts.map