@rowsncolumns/spreadsheet 10.3.1 → 10.4.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 (450) hide show
  1. package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
  2. package/dist/cjs/api/banded-ranges.js +40 -14
  3. package/dist/cjs/api/calculated-column-fill.d.ts +43 -0
  4. package/dist/cjs/api/calculated-column-fill.d.ts.map +1 -0
  5. package/dist/cjs/api/calculated-column-fill.js +16 -0
  6. package/dist/cjs/api/chart-sheet.d.ts +8 -0
  7. package/dist/cjs/api/chart-sheet.d.ts.map +1 -0
  8. package/dist/cjs/api/chart-sheet.js +20 -0
  9. package/dist/cjs/api/chart-source-ranges.d.ts +64 -0
  10. package/dist/cjs/api/chart-source-ranges.d.ts.map +1 -0
  11. package/dist/cjs/api/chart-source-ranges.js +175 -0
  12. package/dist/cjs/api/selections.d.ts +3 -3
  13. package/dist/cjs/api/selections.d.ts.map +1 -1
  14. package/dist/cjs/api/selections.js +28 -2
  15. package/dist/cjs/api/spreadsheet-api.d.ts +16 -3
  16. package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
  17. package/dist/cjs/api/spreadsheet-api.js +22 -2
  18. package/dist/cjs/api/table-auto-expansion.d.ts +37 -0
  19. package/dist/cjs/api/table-auto-expansion.d.ts.map +1 -0
  20. package/dist/cjs/api/table-auto-expansion.js +16 -0
  21. package/dist/cjs/api/table.d.ts +49 -1
  22. package/dist/cjs/api/table.d.ts.map +1 -1
  23. package/dist/cjs/api/table.js +145 -1
  24. package/dist/cjs/api/validation.d.ts +26 -1
  25. package/dist/cjs/api/validation.d.ts.map +1 -1
  26. package/dist/cjs/api/validation.js +127 -9
  27. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts +15 -0
  28. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  29. package/dist/cjs/atoms/calculated-column-fill.atom.js +18 -0
  30. package/dist/cjs/atoms/chart-actions.atom.d.ts +40 -0
  31. package/dist/cjs/atoms/chart-actions.atom.d.ts.map +1 -0
  32. package/dist/cjs/atoms/chart-actions.atom.js +66 -0
  33. package/dist/cjs/atoms/index.d.ts +5 -0
  34. package/dist/cjs/atoms/index.d.ts.map +1 -1
  35. package/dist/cjs/atoms/index.js +5 -0
  36. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts +28 -0
  37. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  38. package/dist/cjs/atoms/move-chart-dialog.atom.js +34 -0
  39. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +9 -1
  40. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  41. package/dist/cjs/atoms/selected-chart-embed.atom.js +18 -1
  42. package/dist/cjs/atoms/selected-chart-series.atom.d.ts +24 -0
  43. package/dist/cjs/atoms/selected-chart-series.atom.d.ts.map +1 -0
  44. package/dist/cjs/atoms/selected-chart-series.atom.js +11 -0
  45. package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
  46. package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
  47. package/dist/cjs/atoms/sheet-context.atom.js +5 -2
  48. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts +34 -0
  49. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  50. package/dist/cjs/atoms/sparkline-dialog.atom.js +30 -0
  51. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts +14 -0
  52. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  53. package/dist/cjs/atoms/table-auto-expansion.atom.js +17 -0
  54. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts +25 -0
  55. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  56. package/dist/cjs/components/calculated-column-smart-tag/index.js +31 -0
  57. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  58. package/dist/cjs/components/canvas-grid/index.js +393 -72
  59. package/dist/cjs/components/canvas-grid/typings.d.ts +127 -14
  60. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  61. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  62. package/dist/cjs/components/cell/index.js +3 -3
  63. package/dist/cjs/components/cell/typings.d.ts +13 -0
  64. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  65. package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
  66. package/dist/cjs/components/cell-filter/index.js +13 -2
  67. package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  68. package/dist/cjs/components/cell-input/formula-bar-cell-input.js +4 -1
  69. package/dist/cjs/components/cell-structured/sparkline-math.d.ts +28 -5
  70. package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
  71. package/dist/cjs/components/cell-structured/sparkline-math.js +93 -5
  72. package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
  73. package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
  74. package/dist/cjs/components/cell-structured/sparkline.js +3 -3
  75. package/dist/cjs/components/cell-structured/types.d.ts +1 -1
  76. package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
  77. package/dist/cjs/components/chart-sheet-view/index.d.ts +27 -0
  78. package/dist/cjs/components/chart-sheet-view/index.d.ts.map +1 -0
  79. package/dist/cjs/components/chart-sheet-view/index.js +35 -0
  80. package/dist/cjs/components/context-menu/embed-context-menu.d.ts +48 -0
  81. package/dist/cjs/components/context-menu/embed-context-menu.d.ts.map +1 -0
  82. package/dist/cjs/components/context-menu/embed-context-menu.js +123 -0
  83. package/dist/cjs/components/context-menu/index.d.ts +23 -2
  84. package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
  85. package/dist/cjs/components/context-menu/index.js +217 -39
  86. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts +33 -0
  87. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  88. package/dist/cjs/components/context-menu/total-row-function-menu.js +58 -0
  89. package/dist/cjs/components/context-menu/total-row-functions.d.ts +12 -12
  90. package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -1
  91. package/dist/cjs/components/context-menu/total-row-functions.js +39 -39
  92. package/dist/cjs/components/embeds/chart-component.d.ts +17 -0
  93. package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -1
  94. package/dist/cjs/components/embeds/embed-draggable.d.ts +61 -4
  95. package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
  96. package/dist/cjs/components/embeds/embed-draggable.js +214 -39
  97. package/dist/cjs/components/filter-box/date-tree.d.ts +28 -0
  98. package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -0
  99. package/dist/cjs/components/filter-box/date-tree.js +147 -0
  100. package/dist/cjs/components/filter-box/filter-by-condition.d.ts +14 -2
  101. package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
  102. package/dist/cjs/components/filter-box/filter-by-condition.js +95 -19
  103. package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -1
  104. package/dist/cjs/components/filter-box/filter-by-value.js +126 -40
  105. package/dist/cjs/components/filter-box/index.d.ts +7 -1
  106. package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
  107. package/dist/cjs/components/filter-box/index.js +102 -11
  108. package/dist/cjs/components/move-chart-dialog/index.d.ts +34 -0
  109. package/dist/cjs/components/move-chart-dialog/index.d.ts.map +1 -0
  110. package/dist/cjs/components/move-chart-dialog/index.js +96 -0
  111. package/dist/cjs/components/print-preview/page-block.d.ts +9 -1
  112. package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -1
  113. package/dist/cjs/components/print-preview/page-block.js +28 -2
  114. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +8 -1
  115. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  116. package/dist/cjs/components/print-preview/print-preview-dialog.js +144 -3
  117. package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -1
  118. package/dist/cjs/components/print-preview/run-print.js +19 -7
  119. package/dist/cjs/components/print-preview/use-page-layout.d.ts +47 -0
  120. package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -1
  121. package/dist/cjs/components/print-preview/use-page-layout.js +81 -7
  122. package/dist/cjs/components/selection/index.d.ts +1 -1
  123. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  124. package/dist/cjs/components/selection/index.js +6 -2
  125. package/dist/cjs/components/selection/types.d.ts +15 -0
  126. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  127. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  128. package/dist/cjs/components/sheet-tabs/index.js +2 -2
  129. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
  130. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  131. package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
  132. package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
  133. package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
  134. package/dist/cjs/components/sparkline-dialog/index.js +127 -0
  135. package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
  136. package/dist/cjs/components/subtotal-dialog/index.js +10 -1
  137. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  138. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  139. package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
  140. package/dist/cjs/components/toolbar/index.d.ts +1 -0
  141. package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
  142. package/dist/cjs/components/toolbar/index.js +1 -0
  143. package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
  144. package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
  145. package/dist/cjs/components/toolbar/insert-menu.js +24 -1
  146. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
  147. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  148. package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
  149. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
  150. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
  151. package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
  152. package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
  153. package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
  154. package/dist/cjs/components/toolbar/table-actions.js +17 -7
  155. package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
  156. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  157. package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
  158. package/dist/cjs/config.d.ts +2 -0
  159. package/dist/cjs/config.d.ts.map +1 -1
  160. package/dist/cjs/config.js +31 -1
  161. package/dist/cjs/helpers.d.ts +1 -1
  162. package/dist/cjs/helpers.d.ts.map +1 -1
  163. package/dist/cjs/helpers.js +13 -2
  164. package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
  165. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  166. package/dist/cjs/hooks/use-cell-renderer.js +20 -8
  167. package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
  168. package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
  169. package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
  170. package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
  171. package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
  172. package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
  173. package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
  174. package/dist/cjs/hooks/use-context-setter.js +3 -1
  175. package/dist/cjs/hooks/use-editable.d.ts +9 -1
  176. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  177. package/dist/cjs/hooks/use-editable.js +25 -1
  178. package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
  179. package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-embeds-charts.js +412 -41
  181. package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
  182. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  183. package/dist/cjs/hooks/use-grid-children.js +12 -6
  184. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  185. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
  187. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  188. package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
  189. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
  190. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  191. package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
  192. package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
  193. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  194. package/dist/cjs/hooks/use-selection-renderer.js +37 -7
  195. package/dist/cjs/hooks/use-selection.d.ts +9 -1
  196. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  197. package/dist/cjs/hooks/use-selection.js +118 -30
  198. package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
  199. package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
  200. package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
  201. package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
  202. package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
  203. package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
  204. package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
  205. package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
  206. package/dist/cjs/hooks/use-table-resizer.js +22 -10
  207. package/dist/cjs/index.d.ts +13 -0
  208. package/dist/cjs/index.d.ts.map +1 -1
  209. package/dist/cjs/index.js +17 -1
  210. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  211. package/dist/cjs/types.d.ts +289 -4
  212. package/dist/cjs/types.d.ts.map +1 -1
  213. package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
  214. package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
  215. package/dist/cjs/utils/copy-as-picture.js +70 -0
  216. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
  217. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  218. package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
  219. package/dist/cjs/utils/z-order.d.ts +47 -0
  220. package/dist/cjs/utils/z-order.d.ts.map +1 -0
  221. package/dist/cjs/utils/z-order.js +124 -0
  222. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  223. package/dist/esm/api/banded-ranges.js +39 -12
  224. package/dist/esm/api/calculated-column-fill.d.ts +43 -0
  225. package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
  226. package/dist/esm/api/calculated-column-fill.js +10 -0
  227. package/dist/esm/api/chart-sheet.d.ts +8 -0
  228. package/dist/esm/api/chart-sheet.d.ts.map +1 -0
  229. package/dist/esm/api/chart-sheet.js +15 -0
  230. package/dist/esm/api/chart-source-ranges.d.ts +64 -0
  231. package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
  232. package/dist/esm/api/chart-source-ranges.js +168 -0
  233. package/dist/esm/api/selections.d.ts +3 -3
  234. package/dist/esm/api/selections.d.ts.map +1 -1
  235. package/dist/esm/api/selections.js +26 -2
  236. package/dist/esm/api/spreadsheet-api.d.ts +16 -3
  237. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  238. package/dist/esm/api/spreadsheet-api.js +18 -2
  239. package/dist/esm/api/table-auto-expansion.d.ts +37 -0
  240. package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
  241. package/dist/esm/api/table-auto-expansion.js +10 -0
  242. package/dist/esm/api/table.d.ts +49 -1
  243. package/dist/esm/api/table.d.ts.map +1 -1
  244. package/dist/esm/api/table.js +138 -1
  245. package/dist/esm/api/validation.d.ts +26 -1
  246. package/dist/esm/api/validation.d.ts.map +1 -1
  247. package/dist/esm/api/validation.js +119 -9
  248. package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
  249. package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  250. package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
  251. package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
  252. package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
  253. package/dist/esm/atoms/chart-actions.atom.js +58 -0
  254. package/dist/esm/atoms/index.d.ts +5 -0
  255. package/dist/esm/atoms/index.d.ts.map +1 -1
  256. package/dist/esm/atoms/index.js +5 -0
  257. package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
  258. package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  259. package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
  260. package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
  261. package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  262. package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
  263. package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
  264. package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
  265. package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
  266. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  267. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  268. package/dist/esm/atoms/sheet-context.atom.js +2 -0
  269. package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
  270. package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  271. package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
  272. package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
  273. package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  274. package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
  275. package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
  276. package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  277. package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
  278. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  279. package/dist/esm/components/canvas-grid/index.js +332 -21
  280. package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
  281. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  282. package/dist/esm/components/cell/index.d.ts.map +1 -1
  283. package/dist/esm/components/cell/index.js +3 -3
  284. package/dist/esm/components/cell/typings.d.ts +13 -0
  285. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  286. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  287. package/dist/esm/components/cell-filter/index.js +14 -3
  288. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  289. package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
  290. package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
  291. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  292. package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
  293. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  294. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  295. package/dist/esm/components/cell-structured/sparkline.js +3 -3
  296. package/dist/esm/components/cell-structured/types.d.ts +1 -1
  297. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  298. package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
  299. package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
  300. package/dist/esm/components/chart-sheet-view/index.js +30 -0
  301. package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
  302. package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
  303. package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
  304. package/dist/esm/components/context-menu/index.d.ts +23 -2
  305. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  306. package/dist/esm/components/context-menu/index.js +174 -38
  307. package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
  308. package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  309. package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
  310. package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
  311. package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
  312. package/dist/esm/components/context-menu/total-row-functions.js +29 -31
  313. package/dist/esm/components/embeds/chart-component.d.ts +17 -0
  314. package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
  315. package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
  316. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  317. package/dist/esm/components/embeds/embed-draggable.js +204 -45
  318. package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
  319. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
  320. package/dist/esm/components/filter-box/date-tree.js +107 -0
  321. package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
  322. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  323. package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
  324. package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
  325. package/dist/esm/components/filter-box/filter-by-value.js +110 -39
  326. package/dist/esm/components/filter-box/index.d.ts +7 -1
  327. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  328. package/dist/esm/components/filter-box/index.js +88 -2
  329. package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
  330. package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
  331. package/dist/esm/components/move-chart-dialog/index.js +88 -0
  332. package/dist/esm/components/print-preview/page-block.d.ts +9 -1
  333. package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
  334. package/dist/esm/components/print-preview/page-block.js +27 -2
  335. package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
  336. package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  337. package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
  338. package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
  339. package/dist/esm/components/print-preview/run-print.js +17 -7
  340. package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
  341. package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
  342. package/dist/esm/components/print-preview/use-page-layout.js +55 -0
  343. package/dist/esm/components/selection/index.d.ts +1 -1
  344. package/dist/esm/components/selection/index.d.ts.map +1 -1
  345. package/dist/esm/components/selection/index.js +6 -2
  346. package/dist/esm/components/selection/types.d.ts +15 -0
  347. package/dist/esm/components/selection/types.d.ts.map +1 -1
  348. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  349. package/dist/esm/components/sheet-tabs/index.js +2 -2
  350. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
  351. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  352. package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
  353. package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
  354. package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
  355. package/dist/esm/components/sparkline-dialog/index.js +123 -0
  356. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
  357. package/dist/esm/components/subtotal-dialog/index.js +10 -1
  358. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  359. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  360. package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
  361. package/dist/esm/components/toolbar/index.d.ts +1 -0
  362. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  363. package/dist/esm/components/toolbar/index.js +1 -0
  364. package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
  365. package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
  366. package/dist/esm/components/toolbar/insert-menu.js +24 -1
  367. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
  368. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  369. package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
  370. package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
  371. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
  372. package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
  373. package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
  374. package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
  375. package/dist/esm/components/toolbar/table-actions.js +15 -7
  376. package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
  377. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  378. package/dist/esm/components/toolbar/table-style-selector.js +210 -399
  379. package/dist/esm/config.d.ts +2 -0
  380. package/dist/esm/config.d.ts.map +1 -1
  381. package/dist/esm/config.js +30 -0
  382. package/dist/esm/helpers.d.ts +1 -1
  383. package/dist/esm/helpers.d.ts.map +1 -1
  384. package/dist/esm/helpers.js +12 -1
  385. package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
  386. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  387. package/dist/esm/hooks/use-cell-renderer.js +14 -4
  388. package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
  389. package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
  390. package/dist/esm/hooks/use-chart-clipboard.js +213 -0
  391. package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
  392. package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
  393. package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
  394. package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
  395. package/dist/esm/hooks/use-context-setter.js +3 -1
  396. package/dist/esm/hooks/use-editable.d.ts +9 -1
  397. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  398. package/dist/esm/hooks/use-editable.js +25 -1
  399. package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
  400. package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
  401. package/dist/esm/hooks/use-embeds-charts.js +394 -39
  402. package/dist/esm/hooks/use-grid-children.d.ts +2 -2
  403. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  404. package/dist/esm/hooks/use-grid-children.js +8 -2
  405. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  406. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  407. package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
  408. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  409. package/dist/esm/hooks/use-keyboard-handler.js +8 -2
  410. package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
  411. package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  412. package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
  413. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
  414. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  415. package/dist/esm/hooks/use-selection-renderer.js +35 -6
  416. package/dist/esm/hooks/use-selection.d.ts +9 -1
  417. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  418. package/dist/esm/hooks/use-selection.js +122 -30
  419. package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
  420. package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
  421. package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
  422. package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
  423. package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
  424. package/dist/esm/hooks/use-table-hit-zones.js +146 -0
  425. package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
  426. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  427. package/dist/esm/hooks/use-table-resizer.js +21 -10
  428. package/dist/esm/index.d.ts +13 -0
  429. package/dist/esm/index.d.ts.map +1 -1
  430. package/dist/esm/index.js +13 -0
  431. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  432. package/dist/esm/types.d.ts +289 -4
  433. package/dist/esm/types.d.ts.map +1 -1
  434. package/dist/esm/utils/copy-as-picture.d.ts +13 -0
  435. package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
  436. package/dist/esm/utils/copy-as-picture.js +45 -0
  437. package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
  438. package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  439. package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
  440. package/dist/esm/utils/z-order.d.ts +47 -0
  441. package/dist/esm/utils/z-order.d.ts.map +1 -0
  442. package/dist/esm/utils/z-order.js +111 -0
  443. package/dist/spreadsheet.min.css +1 -1
  444. package/package.json +8 -6
  445. package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
  446. package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
  447. package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
  448. package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
  449. package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
  450. package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
@@ -1,395 +1,93 @@
1
1
  import { isCellWithinBounds } from "@rowsncolumns/grid";
2
- import { MdOutlineArrowDropDown, TableIcon } from "@rowsncolumns/icons";
3
- import { cn, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuTrigger, IconButton, Separator, } from "@rowsncolumns/ui";
4
- import { getContrastColor, findMatchingBandProperty, } from "@rowsncolumns/utils";
5
- import React, { memo, useCallback, useMemo, useRef } from "react";
2
+ import { CheckIcon, MdOutlineArrowDropDown, TableIcon } from "@rowsncolumns/icons";
3
+ import { Button, cn, ColorPicker, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuItemIndicator, DropdownMenuPortal, DropdownMenuTrigger, IconButton, Input, Separator, } from "@rowsncolumns/ui";
4
+ import { findMatchingBandProperty, getContrastColor, getTableBorderStyles as getSharedTableStyles, } from "@rowsncolumns/utils";
5
+ import React, { memo, useCallback, useMemo, useRef, useState } from "react";
6
6
  // Re-export the shared function for backwards compatibility
7
7
  export { findMatchingBandProperty };
8
8
  import { parseTintedColor } from "../../api/banded-ranges";
9
9
  import { useFocusSheet } from "../../atoms/sheet-context.atom";
10
10
  import { getStringifiedColor } from "../../themes";
11
- const stripeTint = 0.8;
12
- const colorIndexes = [1, 4, 5, 6, 7, 8, 9];
11
+ /** Excel's Table Style Options (Table Design tab), in ribbon order. */
12
+ const STYLE_OPTIONS = [
13
+ { key: "headerRow", label: "Header Row", defaultValue: true },
14
+ { key: "totalRow", label: "Total Row", defaultValue: false },
15
+ { key: "showRowStripes", label: "Banded Rows", defaultValue: true },
16
+ { key: "showColumnStripes", label: "Banded Columns", defaultValue: false },
17
+ { key: "showFirstColumn", label: "First Column", defaultValue: false },
18
+ { key: "showLastColumn", label: "Last Column", defaultValue: false },
19
+ { key: "filterButton", label: "Filter Button", defaultValue: true },
20
+ ];
21
+ const isBuiltInTheme = (theme) => !!theme && /^TableStyle(Light|Medium|Dark)\d+$/.test(theme);
22
+ /**
23
+ * The table update a Style Options toggle produces. Flipping Banded Rows / Banded Columns on a
24
+ * built-in style re-resolves the banding for the new stripe toggles (what the Edit Table dialog
25
+ * does); a custom style has no palette to re-resolve from and keeps its banding.
26
+ */
27
+ export const getStyleOptionUpdate = (table, key, checked) => {
28
+ const update = { [key]: checked };
29
+ if ((key === "showRowStripes" || key === "showColumnStripes") &&
30
+ isBuiltInTheme(table.theme)) {
31
+ const showRowStripes = key === "showRowStripes" ? checked : table.showRowStripes !== false;
32
+ const showColumnStripes = key === "showColumnStripes" ? checked : table.showColumnStripes === true;
33
+ const bandedRange = findMatchingBandProperty(table.theme, showRowStripes, showColumnStripes);
34
+ if (bandedRange && !showColumnStripes) {
35
+ delete bandedRange.columnProperties;
36
+ }
37
+ update.bandedRange = bandedRange;
38
+ }
39
+ return update;
40
+ };
41
+ /** The colours "New Table Style…" offers for each element (the workbook palette's accents). */
42
+ const NEW_STYLE_COLORS = [
43
+ "#000000",
44
+ "#595959",
45
+ "#a6a6a6",
46
+ "#d9d9d9",
47
+ "#ffffff",
48
+ "#4472c4",
49
+ "#b4c6e7",
50
+ "#ed7d31",
51
+ "#f8cbad",
52
+ "#a5a5a5",
53
+ "#ffc000",
54
+ "#ffe699",
55
+ "#5b9bd5",
56
+ "#bdd7ee",
57
+ "#70ad47",
58
+ "#c6e0b4",
59
+ ];
60
+ /** The banding a New Table Style paints from its three colours (unset elements stay unpainted). */
61
+ export const buildCustomTableStyle = (name, colors) => ({
62
+ name,
63
+ bandedRange: {
64
+ rowProperties: {
65
+ headerColor: colors.header,
66
+ firstBandColor: colors.firstBand,
67
+ secondBandColor: colors.secondBand,
68
+ },
69
+ },
70
+ });
71
+ /** Gallery groups whose swatch is outlined in the style's accent colour (filled-header styles). */
72
+ const OUTLINED_SWATCH_THEMES = /^TableStyle(?:Light(?:[89]|1[0-4])|Medium(?:1[5-9]|2[01]))$/;
73
+ /**
74
+ * The gallery's table styles: the shared palette (`@rowsncolumns/utils` — the same banding the
75
+ * importers and both engines resolve a theme name into) plus a per-swatch preview style.
76
+ */
13
77
  export const getTableBorderStyles = (showRowStripes, showColumnStripes, theme) => {
14
- let runningLightIndex = 1;
15
- let runningMediumIndex = 1;
16
- let runningDarkIndex = 1;
17
- return new Map([
18
- [
19
- "Light",
20
- [
21
- ["None", 0, 0, undefined],
22
- ...colorIndexes.map((value) => {
23
- return [
24
- "TableStyleLight" + runningLightIndex++,
25
- stripeTint,
26
- 1,
27
- {
28
- rowProperties: {
29
- firstBandColor: {
30
- theme: value,
31
- tint: showRowStripes ? stripeTint : 1,
32
- },
33
- secondBandColor: showRowStripes
34
- ? {
35
- theme: 0,
36
- }
37
- : undefined,
38
- headerBorder: {
39
- top: {
40
- width: 1,
41
- style: "solid",
42
- color: {
43
- theme: value,
44
- },
45
- },
46
- bottom: {
47
- width: 1,
48
- style: "solid",
49
- color: {
50
- theme: value,
51
- },
52
- },
53
- },
54
- footerBorder: {
55
- bottom: {
56
- width: 1,
57
- style: "solid",
58
- color: {
59
- theme: value,
60
- },
61
- },
62
- },
63
- },
64
- columnProperties: showColumnStripes
65
- ? {
66
- firstBandColor: {
67
- theme: value,
68
- tint: showColumnStripes ? stripeTint : 1,
69
- },
70
- }
71
- : undefined,
72
- },
73
- ];
74
- }),
75
- ...colorIndexes.map((value) => {
76
- return [
77
- "TableStyleLight" + runningLightIndex++,
78
- undefined,
79
- undefined,
80
- {
81
- rowProperties: {
82
- headerColor: {
83
- theme: value,
84
- },
85
- },
86
- },
87
- {
88
- border: theme
89
- ? `1px solid ${getStringifiedColor({ theme: value }, theme)}`
90
- : undefined,
91
- },
92
- ];
93
- }),
94
- ...colorIndexes.map((value) => {
95
- const border = {
96
- width: 1,
97
- style: "solid",
98
- color: {
99
- theme: value,
100
- },
101
- };
102
- return [
103
- "TableStyleLight" + runningLightIndex++,
104
- stripeTint,
105
- 1,
106
- {
107
- rowProperties: {
108
- firstBandColor: {
109
- theme: value,
110
- tint: showRowStripes ? stripeTint : 1,
111
- },
112
- secondBandColor: showRowStripes
113
- ? {
114
- theme: 0,
115
- }
116
- : undefined,
117
- firstBandBorder: {
118
- top: border,
119
- left: border,
120
- right: border,
121
- bottom: border,
122
- },
123
- headerBorder: {
124
- top: border,
125
- left: border,
126
- right: border,
127
- bottom: border,
128
- },
129
- },
130
- columnProperties: showColumnStripes
131
- ? {
132
- firstBandColor: {
133
- theme: value,
134
- tint: showColumnStripes ? stripeTint : 1,
135
- },
136
- }
137
- : undefined,
138
- },
139
- ];
140
- }),
141
- ],
142
- ],
143
- [
144
- "Medium",
145
- [
146
- ...colorIndexes.map((value) => {
147
- return [
148
- "TableStyleMedium" + runningMediumIndex++,
149
- stripeTint,
150
- 1,
151
- {
152
- rowProperties: {
153
- headerColor: {
154
- theme: value,
155
- },
156
- firstBandColor: {
157
- theme: value,
158
- tint: showRowStripes ? stripeTint : 1,
159
- },
160
- secondBandColor: showRowStripes
161
- ? {
162
- theme: 0,
163
- }
164
- : undefined,
165
- firstBandBorder: {
166
- bottom: {
167
- width: 1,
168
- style: "solid",
169
- color: {
170
- theme: value,
171
- },
172
- },
173
- },
174
- },
175
- columnProperties: showColumnStripes
176
- ? {
177
- firstBandColor: {
178
- theme: value,
179
- tint: showColumnStripes ? stripeTint : 1,
180
- },
181
- }
182
- : undefined,
183
- },
184
- ];
185
- }),
186
- ...colorIndexes.map((value) => {
187
- return [
188
- "TableStyleMedium" + runningMediumIndex++,
189
- 0.6,
190
- 0.8,
191
- {
192
- rowProperties: {
193
- headerColor: {
194
- theme: value,
195
- },
196
- firstBandColor: {
197
- theme: value,
198
- tint: showRowStripes ? 0.6 : 0.8,
199
- },
200
- secondBandColor: {
201
- theme: value,
202
- tint: 0.8,
203
- },
204
- },
205
- columnProperties: showColumnStripes
206
- ? {
207
- firstBandColor: {
208
- theme: value,
209
- tint: showColumnStripes ? 0.6 : 0.8,
210
- },
211
- // secondBandColor: {
212
- // theme: value,
213
- // tint: 0.8,
214
- // },
215
- }
216
- : undefined,
217
- },
218
- ];
219
- }),
220
- ...colorIndexes.map((value) => {
221
- const border = {
222
- width: 2,
223
- style: "solid",
224
- color: {
225
- theme: 1,
226
- },
227
- };
228
- return [
229
- "TableStyleMedium" + runningMediumIndex++,
230
- -0.15,
231
- 1,
232
- {
233
- rowProperties: {
234
- headerColor: {
235
- theme: value,
236
- },
237
- firstBandColor: {
238
- theme: 0,
239
- tint: showRowStripes ? -0.15 : 1,
240
- },
241
- secondBandColor: showRowStripes
242
- ? {
243
- theme: 0,
244
- }
245
- : undefined,
246
- headerBorder: {
247
- top: border,
248
- },
249
- footerBorder: {
250
- bottom: border,
251
- },
252
- },
253
- columnProperties: showColumnStripes
254
- ? {
255
- firstBandColor: {
256
- theme: 0,
257
- tint: showColumnStripes ? -0.15 : 1,
258
- },
259
- }
260
- : undefined,
261
- },
262
- ];
263
- }),
264
- ...colorIndexes.map((value) => {
265
- const border = {
266
- width: 1,
267
- style: "solid",
268
- color: {
269
- theme: value,
270
- },
271
- };
272
- return [
273
- "TableStyleMedium" + runningMediumIndex++,
274
- stripeTint,
275
- 0.9,
276
- {
277
- rowProperties: {
278
- headerColor: {
279
- theme: value,
280
- tint: 0.9,
281
- },
282
- firstBandColor: {
283
- theme: value,
284
- tint: showRowStripes ? stripeTint : 0.9,
285
- },
286
- secondBandColor: {
287
- theme: value,
288
- tint: 0.9,
289
- },
290
- firstBandBorder: {
291
- top: border,
292
- left: border,
293
- right: border,
294
- bottom: border,
295
- },
296
- headerBorder: {
297
- top: border,
298
- left: border,
299
- right: border,
300
- bottom: border,
301
- },
302
- },
303
- columnProperties: showColumnStripes
304
- ? {
305
- firstBandColor: {
306
- theme: value,
307
- tint: showColumnStripes ? stripeTint : 0.9,
308
- },
309
- }
310
- : undefined,
311
- },
312
- {
313
- border: theme
314
- ? `1px solid ${getStringifiedColor({ theme: value }, theme)}`
315
- : undefined,
316
- },
317
- ];
318
- }),
319
- ],
320
- ],
321
- [
322
- "Dark",
323
- [
324
- ...colorIndexes.map((value) => {
325
- const firstTint = value - 1 === 0 ? 0.25 : -0.25;
326
- const secondTint = value - 1 === 0 ? 0.5 : 0;
327
- return [
328
- "TableStyleDark" + runningDarkIndex++,
329
- firstTint,
330
- secondTint,
331
- {
332
- rowProperties: {
333
- headerColor: {
334
- theme: 1,
335
- },
336
- firstBandColor: {
337
- theme: value,
338
- tint: showRowStripes ? firstTint : secondTint,
339
- },
340
- secondBandColor: {
341
- theme: value,
342
- tint: secondTint,
343
- },
344
- },
345
- columnProperties: showColumnStripes
346
- ? {
347
- firstBandColor: {
348
- theme: value,
349
- tint: showColumnStripes ? firstTint : secondTint,
350
- },
351
- }
352
- : undefined,
353
- },
354
- ];
355
- }),
356
- ...[1, 5, 7, 9].map((value) => {
357
- const firstTint = value - 1 === 0 ? -0.35 : 0.6;
358
- const secondTint = value - 1 === 0 ? -0.15 : 0.8;
359
- return [
360
- "TableStyleDark" + runningDarkIndex++,
361
- firstTint,
362
- secondTint,
363
- {
364
- rowProperties: {
365
- headerColor: {
366
- theme: value,
367
- },
368
- firstBandColor: {
369
- theme: value - 1,
370
- tint: showRowStripes ? firstTint : secondTint,
371
- },
372
- secondBandColor: {
373
- theme: value - 1,
374
- tint: secondTint,
375
- },
376
- },
377
- columnProperties: showColumnStripes
378
- ? {
379
- firstBandColor: {
380
- theme: value - 1,
381
- tint: showColumnStripes ? firstTint : secondTint,
382
- },
383
- }
384
- : undefined,
385
- },
386
- ];
387
- }),
388
- ],
389
- ],
390
- ]);
78
+ const entries = new Map();
79
+ for (const [category, styles] of getSharedTableStyles(showRowStripes, showColumnStripes)) {
80
+ entries.set(category, styles.map(([tableTheme, firstBandTint, secondBandTint, definition]) => {
81
+ const accent = definition?.rowProperties?.headerColor;
82
+ const style = theme && accent && OUTLINED_SWATCH_THEMES.test(tableTheme)
83
+ ? { border: `1px solid ${getStringifiedColor(accent, theme)}` }
84
+ : undefined;
85
+ return [tableTheme, firstBandTint, secondBandTint, definition, style];
86
+ }));
87
+ }
88
+ return entries;
391
89
  };
392
- export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, selections, onUpdateTable, onCreateTable, }) => {
90
+ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, selections, onUpdateTable, onCreateTable, onRequestCreateTable, onPreviewTableStyle, customTableStyles, onCreateCustomTableStyle, }) => {
393
91
  const shouldFocusSheetRef = useRef(true);
394
92
  const focusSheet = useFocusSheet();
395
93
  const table = useMemo(() => {
@@ -397,17 +95,39 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
397
95
  isCellWithinBounds(activeCell, table.range));
398
96
  }, [tables, sheetId, activeCell]);
399
97
  // Default showstripes is always true
400
- const showRowStripes = table ? Boolean(table.showRowStripes) : true;
98
+ const showRowStripes = table ? table.showRowStripes !== false : true;
401
99
  // Default showColumnStripes
402
100
  const showColumnStripes = table ? Boolean(table.showColumnStripes) : false;
101
+ // Styles created here when the host does not keep them.
102
+ const [sessionCustomStyles, setSessionCustomStyles] = useState([]);
103
+ const allCustomStyles = useMemo(() => [...(customTableStyles ?? []), ...sessionCustomStyles], [customTableStyles, sessionCustomStyles]);
104
+ const [isCreatingStyle, setIsCreatingStyle] = useState(false);
403
105
  // Classes
404
106
  const hoverClass = "rounded-none hover:outline-solid hover:outline-1 hover:outline hover:outline-offset-1 hover:outline-rnc-primary focus:outline focus:outline-offset-1 focus:outline-rnc-primary hover:bg-transparent focus:bg-transparent text-rnc-foreground p-1";
405
107
  const headingClass = "text-xs font-system pt-2 pb-1 text-rnc-foreground";
406
108
  const gridClass = "grid grid-cols-3 md:grid-cols-7 gap-1 pb-1";
109
+ const optionClass = "pl-6 pr-2 py-1 text-xs";
110
+ /**
111
+ * Live preview of the hovered swatch on the active table (a plain range has nothing to paint).
112
+ */
113
+ const previewStyle = useCallback((theme, bandedRange) => {
114
+ if (table) {
115
+ onPreviewTableStyle?.({
116
+ sheetId,
117
+ tableId: table.id,
118
+ theme,
119
+ bandedRange,
120
+ });
121
+ }
122
+ }, [table, sheetId, onPreviewTableStyle]);
123
+ const clearPreview = useCallback(() => {
124
+ onPreviewTableStyle?.(null);
125
+ }, [onPreviewTableStyle]);
407
126
  /**
408
127
  * On Select style
409
128
  */
410
129
  const onSelectStyle = useCallback((theme, bandedRange) => {
130
+ clearPreview();
411
131
  if (table) {
412
132
  onUpdateTable?.(sheetId, table.id, {
413
133
  ...table,
@@ -415,17 +135,53 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
415
135
  bandedRange,
416
136
  });
417
137
  }
138
+ else if (onRequestCreateTable) {
139
+ onRequestCreateTable(sheetId, activeCell, selections, theme, bandedRange);
140
+ }
418
141
  else {
419
142
  onCreateTable?.(sheetId, activeCell, selections, undefined, theme, bandedRange);
420
143
  }
421
- }, [table, sheetId, activeCell, selections, onCreateTable, onUpdateTable]);
144
+ }, [
145
+ table,
146
+ sheetId,
147
+ activeCell,
148
+ selections,
149
+ onCreateTable,
150
+ onRequestCreateTable,
151
+ onUpdateTable,
152
+ clearPreview,
153
+ ]);
154
+ /** A Style Options toggle → the table update (banding re-resolved for stripe toggles). */
155
+ const onToggleStyleOption = useCallback((key, checked) => {
156
+ if (table) {
157
+ onUpdateTable?.(sheetId, table.id, getStyleOptionUpdate(table, key, checked));
158
+ }
159
+ }, [table, sheetId, onUpdateTable]);
160
+ /** "New Table Style…" created a style: keep it and apply it like a picked swatch. */
161
+ const onCreateStyle = useCallback((style) => {
162
+ if (onCreateCustomTableStyle) {
163
+ onCreateCustomTableStyle(style);
164
+ }
165
+ else {
166
+ setSessionCustomStyles((prev) => [...prev, style]);
167
+ }
168
+ setIsCreatingStyle(false);
169
+ onSelectStyle(style.name, style.bandedRange);
170
+ }, [onCreateCustomTableStyle, onSelectStyle]);
422
171
  /**
423
172
  * Get all table border styles
424
173
  */
425
174
  const tableBorderstyles = useMemo(() => [
426
175
  ...getTableBorderStyles(showRowStripes, showColumnStripes, theme).entries(),
427
176
  ], [showRowStripes, showColumnStripes, theme]);
428
- return (React.createElement(DropdownMenu, { modal: false },
177
+ const swatch = (key, tableTheme, bandProperties, style) => (React.createElement(DropdownMenuItem, { key: key, onClick: () => onSelectStyle(tableTheme, bandProperties), onPointerEnter: () => previewStyle(tableTheme, bandProperties), onPointerLeave: clearPreview, onFocus: () => previewStyle(tableTheme, bandProperties), onBlur: clearPreview, className: hoverClass, title: tableTheme },
178
+ React.createElement(TableSkeleton, { rowProperties: bandProperties?.rowProperties, columnProperties: bandProperties?.columnProperties, theme: theme, style: style })));
179
+ return (React.createElement(DropdownMenu, { modal: false, onOpenChange: (open) => {
180
+ if (!open) {
181
+ clearPreview();
182
+ setIsCreatingStyle(false);
183
+ }
184
+ } },
429
185
  React.createElement(DropdownMenuTrigger, { asChild: true },
430
186
  React.createElement(IconButton, { size: "xl", tooltip: "Format as Table", className: "gap-1" },
431
187
  React.createElement(TableIcon, null),
@@ -440,20 +196,75 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
440
196
  }, onInteractOutside: () => {
441
197
  shouldFocusSheetRef.current = false;
442
198
  } },
443
- React.createElement("div", { className: "max-w-dropdown md:min-w-[400px] p-2 pt-0" }, tableBorderstyles.map(([category, tableStyles]) => {
444
- return (React.createElement("div", { key: category },
445
- React.createElement("div", { className: headingClass }, category),
199
+ React.createElement("div", { className: "max-w-dropdown md:min-w-[400px] p-2 pt-0" },
200
+ table ? (React.createElement("div", { "data-testid": "table-style-options" },
201
+ React.createElement("div", { className: headingClass }, "Style Options"),
202
+ React.createElement(Separator, { className: "mb-1" }),
203
+ React.createElement("div", { className: "grid grid-cols-2 md:grid-cols-4 pb-1" }, STYLE_OPTIONS.map(({ key, label, defaultValue }) => (React.createElement(DropdownMenuCheckboxItem, { key: key, className: optionClass, checked: table[key] ?? defaultValue, disabled: key === "filterButton" && table.headerRow === false,
204
+ // Keep the gallery open across toggles (a checkbox item closes the menu on
205
+ // select by default).
206
+ onSelect: (event) => event.preventDefault(), onCheckedChange: (checked) => onToggleStyleOption(key, checked === true) },
207
+ React.createElement(DropdownMenuItemIndicator, null,
208
+ React.createElement(CheckIcon, null)),
209
+ label)))))) : null,
210
+ allCustomStyles.length ? (React.createElement("div", null,
211
+ React.createElement("div", { className: headingClass }, "Custom"),
446
212
  React.createElement(Separator, { className: "mb-2" }),
447
- React.createElement("div", { className: gridClass }, tableStyles.map(([tableTheme,
448
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
449
- firstBandTint,
450
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
451
- secondBandTint, bandProperties, style,], index) => {
452
- return (React.createElement(DropdownMenuItem, { key: index, onClick: () => onSelectStyle(tableTheme, bandProperties), className: hoverClass, title: tableTheme },
453
- React.createElement(TableSkeleton, { rowProperties: bandProperties?.rowProperties, columnProperties: bandProperties?.columnProperties, theme: theme, style: style })));
454
- }))));
455
- }))))));
213
+ React.createElement("div", { className: gridClass }, allCustomStyles.map((style, index) => swatch(`custom-${index}`, style.name, style.bandedRange))))) : null,
214
+ tableBorderstyles.map(([category, tableStyles]) => {
215
+ return (React.createElement("div", { key: category },
216
+ React.createElement("div", { className: headingClass }, category),
217
+ React.createElement(Separator, { className: "mb-2" }),
218
+ React.createElement("div", { className: gridClass }, tableStyles.map(([tableTheme,
219
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
220
+ firstBandTint,
221
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
222
+ secondBandTint, bandProperties, style,], index) => swatch(index, tableTheme, bandProperties, style)))));
223
+ }),
224
+ React.createElement(Separator, { className: "my-1" }),
225
+ isCreatingStyle ? (React.createElement(NewTableStyleForm, { defaultName: `Table Style ${allCustomStyles.length + 1}`, theme: theme, onCreate: onCreateStyle, onCancel: () => setIsCreatingStyle(false) })) : (React.createElement(DropdownMenuItem, { className: "text-xs",
226
+ // Keep the menu open: the form replaces this item in place.
227
+ onSelect: (event) => {
228
+ event.preventDefault();
229
+ setIsCreatingStyle(true);
230
+ } }, "New Table Style\u2026")),
231
+ React.createElement(DropdownMenuItem, { className: "text-xs", onClick: () => onSelectStyle("None", undefined), onPointerEnter: () => previewStyle("None", undefined), onPointerLeave: clearPreview, onFocus: () => previewStyle("None", undefined), onBlur: clearPreview }, "Clear"))))));
456
232
  });
233
+ /**
234
+ * "New Table Style…" — Excel's dialog reduced to the three elements the gallery swatches show:
235
+ * header, first banded row, second banded row. Inline in the gallery so the picked colours
236
+ * preview in the same place they will be offered.
237
+ */
238
+ const NewTableStyleForm = ({ defaultName, theme, onCreate, onCancel, }) => {
239
+ const [name, setName] = useState(defaultName);
240
+ const [header, setHeader] = useState("#4472c4");
241
+ const [firstBand, setFirstBand] = useState("#b4c6e7");
242
+ const [secondBand, setSecondBand] = useState("#ffffff");
243
+ const preview = useMemo(() => buildCustomTableStyle(name, { header, firstBand, secondBand }), [name, header, firstBand, secondBand]);
244
+ const rows = [
245
+ ["Header Row", header, setHeader],
246
+ ["First Row Stripe", firstBand, setFirstBand],
247
+ ["Second Row Stripe", secondBand, setSecondBand],
248
+ ];
249
+ return (React.createElement("form", { "data-testid": "new-table-style-form", className: "m-0 p-1 flex flex-col gap-2",
250
+ // The gallery is a Radix menu: keep typing in the fields from driving its typeahead.
251
+ onKeyDown: (event) => event.stopPropagation(), onSubmit: (event) => {
252
+ event.preventDefault();
253
+ if (name.trim()) {
254
+ onCreate(buildCustomTableStyle(name.trim(), { header, firstBand, secondBand }));
255
+ }
256
+ } },
257
+ React.createElement("div", { className: "flex items-center gap-2" },
258
+ React.createElement("label", { className: "font-system text-xs w-24", htmlFor: "rnc-new-table-style-name" }, "Name"),
259
+ React.createElement(Input, { id: "rnc-new-table-style-name", value: name, onChange: (event) => setName(event.target.value), required: true }),
260
+ React.createElement(TableSkeleton, { rowProperties: preview.bandedRange.rowProperties, theme: theme })),
261
+ rows.map(([label, value, setValue]) => (React.createElement("div", { className: "flex items-center gap-2", key: label },
262
+ React.createElement("span", { className: "font-system text-xs w-24" }, label),
263
+ React.createElement(ColorPicker, { colors: NEW_STYLE_COLORS, value: value, onChange: setValue, size: 14, className: "flex-wrap", direction: "horizontal" })))),
264
+ React.createElement("div", { className: "flex gap-1" },
265
+ React.createElement(Button, { type: "submit", variant: "primary", size: "xs", disabled: !name.trim() }, "Create"),
266
+ React.createElement(Button, { size: "xs", type: "button", onClick: onCancel }, "Cancel"))));
267
+ };
457
268
  /**
458
269
  * Table skeleton
459
270
  * @param param0
@@ -75,6 +75,8 @@ export declare const CALCULATED_ICON_HEIGHT = 16;
75
75
  export declare const FITLER_ICON_PATH = "M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z";
76
76
  export declare const FUNNEL_ICON_PATH = "M19 6h-14c-1.1 0-1.4.6-.6 1.4l4.2 4.2c.8.8 1.4 2.3 1.4 3.4v5l4-2v-3.5c0-.8.6-2.1 1.4-2.9l4.2-4.2c.8-.8.5-1.4-.6-1.4z";
77
77
  export declare const FILTER_ICON_WIDTH = 15;
78
+ export declare const SORT_ASCENDING_ICON_PATH = "M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z";
79
+ export declare const SORT_DESCENDING_ICON_PATH = "M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z";
78
80
  export declare const CHECKBOX_ICON_PATH = "M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z";
79
81
  export declare const CHECKBOX_CHECKED_ICON_PATH = "M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z";
80
82
  export declare const CHECKBOX_ICON_COLOR = "#808080";