@rowsncolumns/spreadsheet 10.3.0 → 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 (484) 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 +407 -77
  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 +218 -42
  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/resizer/index.d.ts.map +1 -1
  123. package/dist/cjs/components/resizer/index.js +10 -5
  124. package/dist/cjs/components/selection/index.d.ts +1 -1
  125. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  126. package/dist/cjs/components/selection/index.js +6 -2
  127. package/dist/cjs/components/selection/types.d.ts +15 -0
  128. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  129. package/dist/cjs/components/sheet-search/index.d.ts.map +1 -1
  130. package/dist/cjs/components/sheet-search/index.js +6 -2
  131. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  132. package/dist/cjs/components/sheet-tabs/index.js +2 -2
  133. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
  134. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  135. package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
  136. package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
  137. package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
  138. package/dist/cjs/components/sparkline-dialog/index.js +127 -0
  139. package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
  140. package/dist/cjs/components/subtotal-dialog/index.js +10 -1
  141. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  142. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  143. package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
  144. package/dist/cjs/components/toolbar/index.d.ts +1 -0
  145. package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
  146. package/dist/cjs/components/toolbar/index.js +1 -0
  147. package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
  148. package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
  149. package/dist/cjs/components/toolbar/insert-menu.js +24 -1
  150. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
  151. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  152. package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
  153. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
  154. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
  155. package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
  156. package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
  157. package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
  158. package/dist/cjs/components/toolbar/table-actions.js +17 -7
  159. package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
  160. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  161. package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
  162. package/dist/cjs/config.d.ts +2 -0
  163. package/dist/cjs/config.d.ts.map +1 -1
  164. package/dist/cjs/config.js +31 -1
  165. package/dist/cjs/helpers.d.ts +1 -1
  166. package/dist/cjs/helpers.d.ts.map +1 -1
  167. package/dist/cjs/helpers.js +13 -2
  168. package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
  169. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  170. package/dist/cjs/hooks/use-cell-renderer.js +20 -8
  171. package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
  172. package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
  173. package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
  174. package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
  175. package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
  176. package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
  177. package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
  178. package/dist/cjs/hooks/use-context-setter.js +3 -1
  179. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-copy-paste-cut.js +6 -3
  181. package/dist/cjs/hooks/use-editable.d.ts +9 -1
  182. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  183. package/dist/cjs/hooks/use-editable.js +25 -1
  184. package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
  185. package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-embeds-charts.js +412 -41
  187. package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
  188. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  189. package/dist/cjs/hooks/use-grid-children.js +12 -6
  190. package/dist/cjs/hooks/use-header-actions.d.ts.map +1 -1
  191. package/dist/cjs/hooks/use-header-actions.js +17 -10
  192. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  193. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  194. package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
  195. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  196. package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
  197. package/dist/cjs/hooks/use-move-columns-rows.d.ts.map +1 -1
  198. package/dist/cjs/hooks/use-move-columns-rows.js +21 -15
  199. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
  200. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  201. package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
  202. package/dist/cjs/hooks/use-selection-move.d.ts.map +1 -1
  203. package/dist/cjs/hooks/use-selection-move.js +14 -6
  204. package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
  205. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  206. package/dist/cjs/hooks/use-selection-renderer.js +37 -7
  207. package/dist/cjs/hooks/use-selection-resize.d.ts.map +1 -1
  208. package/dist/cjs/hooks/use-selection-resize.js +13 -6
  209. package/dist/cjs/hooks/use-selection.d.ts +9 -1
  210. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  211. package/dist/cjs/hooks/use-selection.js +177 -55
  212. package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
  213. package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
  214. package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
  215. package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
  216. package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
  217. package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
  218. package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
  219. package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
  220. package/dist/cjs/hooks/use-table-resizer.js +38 -18
  221. package/dist/cjs/hooks/use-touch.d.ts.map +1 -1
  222. package/dist/cjs/hooks/use-touch.js +16 -8
  223. package/dist/cjs/index.d.ts +13 -0
  224. package/dist/cjs/index.d.ts.map +1 -1
  225. package/dist/cjs/index.js +17 -1
  226. package/dist/cjs/release-date.js +1 -1
  227. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  228. package/dist/cjs/types.d.ts +289 -4
  229. package/dist/cjs/types.d.ts.map +1 -1
  230. package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
  231. package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
  232. package/dist/cjs/utils/copy-as-picture.js +70 -0
  233. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
  234. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  235. package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
  236. package/dist/cjs/utils/z-order.d.ts +47 -0
  237. package/dist/cjs/utils/z-order.d.ts.map +1 -0
  238. package/dist/cjs/utils/z-order.js +124 -0
  239. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  240. package/dist/esm/api/banded-ranges.js +39 -12
  241. package/dist/esm/api/calculated-column-fill.d.ts +43 -0
  242. package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
  243. package/dist/esm/api/calculated-column-fill.js +10 -0
  244. package/dist/esm/api/chart-sheet.d.ts +8 -0
  245. package/dist/esm/api/chart-sheet.d.ts.map +1 -0
  246. package/dist/esm/api/chart-sheet.js +15 -0
  247. package/dist/esm/api/chart-source-ranges.d.ts +64 -0
  248. package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
  249. package/dist/esm/api/chart-source-ranges.js +168 -0
  250. package/dist/esm/api/selections.d.ts +3 -3
  251. package/dist/esm/api/selections.d.ts.map +1 -1
  252. package/dist/esm/api/selections.js +26 -2
  253. package/dist/esm/api/spreadsheet-api.d.ts +16 -3
  254. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  255. package/dist/esm/api/spreadsheet-api.js +18 -2
  256. package/dist/esm/api/table-auto-expansion.d.ts +37 -0
  257. package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
  258. package/dist/esm/api/table-auto-expansion.js +10 -0
  259. package/dist/esm/api/table.d.ts +49 -1
  260. package/dist/esm/api/table.d.ts.map +1 -1
  261. package/dist/esm/api/table.js +138 -1
  262. package/dist/esm/api/validation.d.ts +26 -1
  263. package/dist/esm/api/validation.d.ts.map +1 -1
  264. package/dist/esm/api/validation.js +119 -9
  265. package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
  266. package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  267. package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
  268. package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
  269. package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
  270. package/dist/esm/atoms/chart-actions.atom.js +58 -0
  271. package/dist/esm/atoms/index.d.ts +5 -0
  272. package/dist/esm/atoms/index.d.ts.map +1 -1
  273. package/dist/esm/atoms/index.js +5 -0
  274. package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
  275. package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  276. package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
  277. package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
  278. package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  279. package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
  280. package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
  281. package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
  282. package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
  283. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  284. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  285. package/dist/esm/atoms/sheet-context.atom.js +2 -0
  286. package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
  287. package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  288. package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
  289. package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
  290. package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  291. package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
  292. package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
  293. package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  294. package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
  295. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  296. package/dist/esm/components/canvas-grid/index.js +346 -26
  297. package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
  298. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  299. package/dist/esm/components/cell/index.d.ts.map +1 -1
  300. package/dist/esm/components/cell/index.js +3 -3
  301. package/dist/esm/components/cell/typings.d.ts +13 -0
  302. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  303. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  304. package/dist/esm/components/cell-filter/index.js +14 -3
  305. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  306. package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
  307. package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
  308. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  309. package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
  310. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  311. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  312. package/dist/esm/components/cell-structured/sparkline.js +3 -3
  313. package/dist/esm/components/cell-structured/types.d.ts +1 -1
  314. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  315. package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
  316. package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
  317. package/dist/esm/components/chart-sheet-view/index.js +30 -0
  318. package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
  319. package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
  320. package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
  321. package/dist/esm/components/context-menu/index.d.ts +23 -2
  322. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  323. package/dist/esm/components/context-menu/index.js +174 -38
  324. package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
  325. package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  326. package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
  327. package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
  328. package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
  329. package/dist/esm/components/context-menu/total-row-functions.js +29 -31
  330. package/dist/esm/components/embeds/chart-component.d.ts +17 -0
  331. package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
  332. package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
  333. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  334. package/dist/esm/components/embeds/embed-draggable.js +207 -47
  335. package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
  336. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
  337. package/dist/esm/components/filter-box/date-tree.js +107 -0
  338. package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
  339. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  340. package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
  341. package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
  342. package/dist/esm/components/filter-box/filter-by-value.js +110 -39
  343. package/dist/esm/components/filter-box/index.d.ts +7 -1
  344. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  345. package/dist/esm/components/filter-box/index.js +88 -2
  346. package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
  347. package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
  348. package/dist/esm/components/move-chart-dialog/index.js +88 -0
  349. package/dist/esm/components/print-preview/page-block.d.ts +9 -1
  350. package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
  351. package/dist/esm/components/print-preview/page-block.js +27 -2
  352. package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
  353. package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  354. package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
  355. package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
  356. package/dist/esm/components/print-preview/run-print.js +17 -7
  357. package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
  358. package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
  359. package/dist/esm/components/print-preview/use-page-layout.js +55 -0
  360. package/dist/esm/components/resizer/index.d.ts.map +1 -1
  361. package/dist/esm/components/resizer/index.js +8 -4
  362. package/dist/esm/components/selection/index.d.ts +1 -1
  363. package/dist/esm/components/selection/index.d.ts.map +1 -1
  364. package/dist/esm/components/selection/index.js +6 -2
  365. package/dist/esm/components/selection/types.d.ts +15 -0
  366. package/dist/esm/components/selection/types.d.ts.map +1 -1
  367. package/dist/esm/components/sheet-search/index.d.ts.map +1 -1
  368. package/dist/esm/components/sheet-search/index.js +5 -2
  369. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  370. package/dist/esm/components/sheet-tabs/index.js +2 -2
  371. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
  372. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  373. package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
  374. package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
  375. package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
  376. package/dist/esm/components/sparkline-dialog/index.js +123 -0
  377. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
  378. package/dist/esm/components/subtotal-dialog/index.js +10 -1
  379. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  380. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  381. package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
  382. package/dist/esm/components/toolbar/index.d.ts +1 -0
  383. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  384. package/dist/esm/components/toolbar/index.js +1 -0
  385. package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
  386. package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
  387. package/dist/esm/components/toolbar/insert-menu.js +24 -1
  388. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
  389. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  390. package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
  391. package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
  392. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
  393. package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
  394. package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
  395. package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
  396. package/dist/esm/components/toolbar/table-actions.js +15 -7
  397. package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
  398. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  399. package/dist/esm/components/toolbar/table-style-selector.js +210 -399
  400. package/dist/esm/config.d.ts +2 -0
  401. package/dist/esm/config.d.ts.map +1 -1
  402. package/dist/esm/config.js +30 -0
  403. package/dist/esm/helpers.d.ts +1 -1
  404. package/dist/esm/helpers.d.ts.map +1 -1
  405. package/dist/esm/helpers.js +12 -1
  406. package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
  407. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  408. package/dist/esm/hooks/use-cell-renderer.js +14 -4
  409. package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
  410. package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
  411. package/dist/esm/hooks/use-chart-clipboard.js +213 -0
  412. package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
  413. package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
  414. package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
  415. package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
  416. package/dist/esm/hooks/use-context-setter.js +3 -1
  417. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  418. package/dist/esm/hooks/use-copy-paste-cut.js +6 -4
  419. package/dist/esm/hooks/use-editable.d.ts +9 -1
  420. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  421. package/dist/esm/hooks/use-editable.js +25 -1
  422. package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
  423. package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
  424. package/dist/esm/hooks/use-embeds-charts.js +394 -39
  425. package/dist/esm/hooks/use-grid-children.d.ts +2 -2
  426. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  427. package/dist/esm/hooks/use-grid-children.js +8 -2
  428. package/dist/esm/hooks/use-header-actions.d.ts.map +1 -1
  429. package/dist/esm/hooks/use-header-actions.js +11 -4
  430. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  431. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  432. package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
  433. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  434. package/dist/esm/hooks/use-keyboard-handler.js +8 -2
  435. package/dist/esm/hooks/use-move-columns-rows.d.ts.map +1 -1
  436. package/dist/esm/hooks/use-move-columns-rows.js +12 -6
  437. package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
  438. package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  439. package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
  440. package/dist/esm/hooks/use-selection-move.d.ts.map +1 -1
  441. package/dist/esm/hooks/use-selection-move.js +11 -4
  442. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
  443. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  444. package/dist/esm/hooks/use-selection-renderer.js +35 -6
  445. package/dist/esm/hooks/use-selection-resize.d.ts.map +1 -1
  446. package/dist/esm/hooks/use-selection-resize.js +11 -5
  447. package/dist/esm/hooks/use-selection.d.ts +9 -1
  448. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  449. package/dist/esm/hooks/use-selection.js +172 -54
  450. package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
  451. package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
  452. package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
  453. package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
  454. package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
  455. package/dist/esm/hooks/use-table-hit-zones.js +146 -0
  456. package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
  457. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  458. package/dist/esm/hooks/use-table-resizer.js +36 -19
  459. package/dist/esm/hooks/use-touch.d.ts.map +1 -1
  460. package/dist/esm/hooks/use-touch.js +15 -7
  461. package/dist/esm/index.d.ts +13 -0
  462. package/dist/esm/index.d.ts.map +1 -1
  463. package/dist/esm/index.js +13 -0
  464. package/dist/esm/release-date.js +1 -1
  465. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  466. package/dist/esm/types.d.ts +289 -4
  467. package/dist/esm/types.d.ts.map +1 -1
  468. package/dist/esm/utils/copy-as-picture.d.ts +13 -0
  469. package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
  470. package/dist/esm/utils/copy-as-picture.js +45 -0
  471. package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
  472. package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  473. package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
  474. package/dist/esm/utils/z-order.d.ts +47 -0
  475. package/dist/esm/utils/z-order.d.ts.map +1 -0
  476. package/dist/esm/utils/z-order.js +111 -0
  477. package/dist/spreadsheet.min.css +1 -1
  478. package/package.json +8 -6
  479. package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
  480. package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
  481. package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
  482. package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
  483. package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
  484. package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
@@ -8,21 +8,23 @@ var ui_1 = require("@rowsncolumns/ui");
8
8
  var utils_1 = require("@rowsncolumns/utils");
9
9
  var react_1 = tslib_1.__importStar(require("react"));
10
10
  var multi_selection_1 = require("../../api/multi-selection");
11
+ var table_1 = require("../../api/table");
11
12
  var validation_1 = require("../../api/validation");
12
13
  var atoms_1 = require("../../atoms");
13
14
  var advanced_filter_dialog_atom_1 = require("../../atoms/advanced-filter-dialog.atom");
14
15
  var goal_seek_dialog_atom_1 = require("../../atoms/goal-seek-dialog.atom");
15
16
  var insert_cells_dialog_atom_1 = require("../../atoms/insert-cells-dialog.atom");
16
17
  var remove_duplicates_dialog_atom_1 = require("../../atoms/remove-duplicates-dialog.atom");
18
+ var sparkline_dialog_atom_1 = require("../../atoms/sparkline-dialog.atom");
17
19
  var subtotal_dialog_atom_1 = require("../../atoms/subtotal-dialog.atom");
18
20
  var text_to_columns_dialog_atom_1 = require("../../atoms/text-to-columns-dialog.atom");
19
21
  var validation_alert_atom_1 = require("../../atoms/validation-alert.atom");
20
22
  var config_1 = require("../../config");
21
23
  var helpers_1 = require("../../helpers");
22
- var total_row_functions_1 = require("./total-row-functions");
24
+ var total_row_function_menu_1 = require("./total-row-function-menu");
23
25
  var ContextMenu = function (_a) {
24
26
  var _b, _c, _d;
25
- var isRowHeader = _a.isRowHeader, isColumnHeader = _a.isColumnHeader, activeCell = _a.activeCell, selections = _a.selections, basicFilter = _a.basicFilter, isTableHeader = _a.isTableHeader, onClearContents = _a.onClearContents, onHideColumn = _a.onHideColumn, onHideRow = _a.onHideRow, onGroupRows = _a.onGroupRows, onUngroupRows = _a.onUngroupRows, onGroupColumns = _a.onGroupColumns, onUngroupColumns = _a.onUngroupColumns, onDeleteRow = _a.onDeleteRow, onDeleteColumn = _a.onDeleteColumn, onInsertColumn = _a.onInsertColumn, onInsertRow = _a.onInsertRow, onInsertCellsShiftDown = _a.onInsertCellsShiftDown, onInsertCellsShiftRight = _a.onInsertCellsShiftRight, onDeleteCellsShiftLeft = _a.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = _a.onDeleteCellsShiftUp, onFreezeRow = _a.onFreezeRow, onFreezeColumn = _a.onFreezeColumn, onCopy = _a.onCopy, onCut = _a.onCut, hasCutSelection = _a.hasCutSelection, onInsertCutCells = _a.onInsertCutCells, onPaste = _a.onPaste, onRequestPasteSpecial = _a.onRequestPasteSpecial, onRequestEvaluateFormula = _a.onRequestEvaluateFormula, onRequestAddWatch = _a.onRequestAddWatch, isActiveCellFormula = _a.isActiveCellFormula, onInsertNote = _a.onInsertNote, onProtectRange = _a.onProtectRange, onUnProtectRange = _a.onUnProtectRange, onSortRange = _a.onSortRange, onSortColumn = _a.onSortColumn, onRequestDefineNamedRange = _a.onRequestDefineNamedRange, onRequestResize = _a.onRequestResize, onRequestEditTable = _a.onRequestEditTable, onRequestEditPivotTable = _a.onRequestEditPivotTable, onRequestDeletePivotTable = _a.onRequestDeletePivotTable, onPivotDrillDown = _a.onPivotDrillDown, onRequestFormatCells = _a.onRequestFormatCells, onRequestConditionalFormat = _a.onRequestConditionalFormat, onRequestDataValidation = _a.onRequestDataValidation, onRemoveTable = _a.onRemoveTable, onClearFormatting = _a.onClearFormatting, onCreateTable = _a.onCreateTable, onCreateBasicFilter = _a.onCreateBasicFilter, onFilterTable = _a.onFilterTable, onSortTable = _a.onSortTable, getFormattedValuesFromRange = _a.getFormattedValuesFromRange, focusSheet = _a.focusSheet, isSheetFocused = _a.isSheetFocused, getFormattedValue = _a.getFormattedValue, onInsertTableColumn = _a.onInsertTableColumn, onDeleteTableColumn = _a.onDeleteTableColumn, onInsertTableRow = _a.onInsertTableRow, onDeleteTableRow = _a.onDeleteTableRow, onSplitTextToColumns = _a.onSplitTextToColumns, onRemoveDuplicates = _a.onRemoveDuplicates, onGoalSeek = _a.onGoalSeek, onSubtotal = _a.onSubtotal, onAdvancedFilter = _a.onAdvancedFilter, onChange = _a.onChange, getCellData = _a.getCellData, isHiddenColumn = _a.isHiddenColumn, isHiddenRow = _a.isHiddenRow, onShowColumn = _a.onShowColumn, onShowRow = _a.onShowRow, tables = _a.tables, pivotTables = _a.pivotTables, protectedRanges = _a.protectedRanges, sheetId = _a.sheetId, frozenRows = _a.frozenRows, frozenColumns = _a.frozenColumns, selectedRowHeadersIds = _a.selectedRowHeadersIds, selectedColumnHeadersIds = _a.selectedColumnHeadersIds, rowCount = _a.rowCount, columnCount = _a.columnCount, _e = _a.readonly, readonly = _e === void 0 ? false : _e, onAddQuickEdit = _a.onAddQuickEdit, enableMagicFill = _a.enableMagicFill;
27
+ var isRowHeader = _a.isRowHeader, isColumnHeader = _a.isColumnHeader, activeCell = _a.activeCell, selections = _a.selections, basicFilter = _a.basicFilter, isTableHeader = _a.isTableHeader, onClearContents = _a.onClearContents, onHideColumn = _a.onHideColumn, onHideRow = _a.onHideRow, onGroupRows = _a.onGroupRows, onUngroupRows = _a.onUngroupRows, onGroupColumns = _a.onGroupColumns, onUngroupColumns = _a.onUngroupColumns, onDeleteRow = _a.onDeleteRow, onDeleteColumn = _a.onDeleteColumn, onInsertColumn = _a.onInsertColumn, onInsertRow = _a.onInsertRow, onInsertCellsShiftDown = _a.onInsertCellsShiftDown, onInsertCellsShiftRight = _a.onInsertCellsShiftRight, onDeleteCellsShiftLeft = _a.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = _a.onDeleteCellsShiftUp, onFreezeRow = _a.onFreezeRow, onFreezeColumn = _a.onFreezeColumn, onCopy = _a.onCopy, onCut = _a.onCut, hasCutSelection = _a.hasCutSelection, onInsertCutCells = _a.onInsertCutCells, onPaste = _a.onPaste, onRequestPasteSpecial = _a.onRequestPasteSpecial, onRequestEvaluateFormula = _a.onRequestEvaluateFormula, onRequestAddWatch = _a.onRequestAddWatch, isActiveCellFormula = _a.isActiveCellFormula, onInsertNote = _a.onInsertNote, onProtectRange = _a.onProtectRange, onUnProtectRange = _a.onUnProtectRange, onSortRange = _a.onSortRange, onSortColumn = _a.onSortColumn, onRequestDefineNamedRange = _a.onRequestDefineNamedRange, onRequestResize = _a.onRequestResize, onRequestEditTable = _a.onRequestEditTable, onRequestResizeTable = _a.onRequestResizeTable, onRequestInsertSlicer = _a.onRequestInsertSlicer, onRequestEditPivotTable = _a.onRequestEditPivotTable, onRequestDeletePivotTable = _a.onRequestDeletePivotTable, onRequestCreatePivotChart = _a.onRequestCreatePivotChart, onPivotDrillDown = _a.onPivotDrillDown, onRequestFormatCells = _a.onRequestFormatCells, onRequestConditionalFormat = _a.onRequestConditionalFormat, onRequestDataValidation = _a.onRequestDataValidation, onRemoveTable = _a.onRemoveTable, onClearFormatting = _a.onClearFormatting, onCreateTable = _a.onCreateTable, onRequestCreateTable = _a.onRequestCreateTable, onCreateBasicFilter = _a.onCreateBasicFilter, onFilterTable = _a.onFilterTable, onSortTable = _a.onSortTable, getFormattedValuesFromRange = _a.getFormattedValuesFromRange, focusSheet = _a.focusSheet, isSheetFocused = _a.isSheetFocused, getFormattedValue = _a.getFormattedValue, onInsertTableColumn = _a.onInsertTableColumn, onDeleteTableColumn = _a.onDeleteTableColumn, onInsertTableRow = _a.onInsertTableRow, onDeleteTableRow = _a.onDeleteTableRow, onSplitTextToColumns = _a.onSplitTextToColumns, onRemoveDuplicates = _a.onRemoveDuplicates, onGoalSeek = _a.onGoalSeek, onSubtotal = _a.onSubtotal, onAdvancedFilter = _a.onAdvancedFilter, onChange = _a.onChange, onUpdateTable = _a.onUpdateTable, onRequestEditCell = _a.onRequestEditCell, onSelectRange = _a.onSelectRange, getCellData = _a.getCellData, isHiddenColumn = _a.isHiddenColumn, isHiddenRow = _a.isHiddenRow, onShowColumn = _a.onShowColumn, onShowRow = _a.onShowRow, tables = _a.tables, pivotTables = _a.pivotTables, protectedRanges = _a.protectedRanges, sheetId = _a.sheetId, frozenRows = _a.frozenRows, frozenColumns = _a.frozenColumns, selectedRowHeadersIds = _a.selectedRowHeadersIds, selectedColumnHeadersIds = _a.selectedColumnHeadersIds, rowCount = _a.rowCount, columnCount = _a.columnCount, _e = _a.readonly, readonly = _e === void 0 ? false : _e, onAddQuickEdit = _a.onAddQuickEdit, enableMagicFill = _a.enableMagicFill;
26
28
  var isHeader = isColumnHeader || isRowHeader;
27
29
  var shouldFocusSheetRef = (0, react_1.useRef)(true);
28
30
  var multiColumnTitle = (0, helpers_1.generateMultiDimTitle)(selectedColumnHeadersIds, "y");
@@ -255,6 +257,40 @@ var ContextMenu = function (_a) {
255
257
  var range = _a.range;
256
258
  return (0, grid_1.isCellWithinBounds)(activeCell, range);
257
259
  }); }, [tables, activeCell]);
260
+ // Excel sparkline group under the active cell (a run of same-option =SPARKLINE() cells). Only
261
+ // offered while a `SparklineDialogHost` is mounted — the Edit entry has nowhere to go without one.
262
+ var isSparklineDialogMounted = (0, sparkline_dialog_atom_1.useIsSparklineDialogMounted)();
263
+ var openSparklineDialog = (0, sparkline_dialog_atom_1.useOpenSparklineDialog)();
264
+ var getSparklineFormula = (0, react_1.useCallback)(function (targetSheetId, rowIndex, columnIndex) {
265
+ var _a;
266
+ var formula = (_a = (0, utils_1.getCellUserEnteredValue)(getCellData === null || getCellData === void 0 ? void 0 : getCellData(targetSheetId, rowIndex, columnIndex))) === null || _a === void 0 ? void 0 : _a.fv;
267
+ return (0, utils_1.isSparklineFormula)(formula) ? formula : undefined;
268
+ }, [getCellData]);
269
+ var activeSparklineGroup = (0, react_1.useMemo)(function () {
270
+ return isSparklineDialogMounted && getCellData
271
+ ? (0, utils_1.resolveSparklineGroup)({
272
+ sheetId: sheetId,
273
+ cell: activeCell,
274
+ getFormula: getSparklineFormula,
275
+ })
276
+ : undefined;
277
+ }, [isSparklineDialogMounted, getCellData, sheetId, activeCell, getSparklineFormula]);
278
+ // Clear Selected Sparklines: the SPARKLINE cells inside the selection (Excel leaves the rest alone).
279
+ var clearSparklineCells = (0, react_1.useCallback)(function (cells) {
280
+ var targets = cells.filter(function (cell) {
281
+ return getSparklineFormula(sheetId, cell.rowIndex, cell.columnIndex);
282
+ });
283
+ if (!targets.length)
284
+ return;
285
+ onClearContents === null || onClearContents === void 0 ? void 0 : onClearContents(sheetId, targets[0], targets.map(function (cell) { return ({
286
+ range: {
287
+ startRowIndex: cell.rowIndex,
288
+ endRowIndex: cell.rowIndex,
289
+ startColumnIndex: cell.columnIndex,
290
+ endColumnIndex: cell.columnIndex,
291
+ },
292
+ }); }));
293
+ }, [getSparklineFormula, onClearContents, sheetId]);
258
294
  // Check for active pivot table
259
295
  var activePivotTable = (0, react_1.useMemo)(function () {
260
296
  return pivotTables === null || pivotTables === void 0 ? void 0 : pivotTables.find(function (_a) {
@@ -264,6 +300,11 @@ var ContextMenu = function (_a) {
264
300
  }, [pivotTables, activeCell]);
265
301
  // Check if the active cell is table header
266
302
  var isActiveCellTableHeader = isTableHeader(activeCell.rowIndex, activeCell.columnIndex);
303
+ // Excel's "Delete table rows" only ever removes body rows: the header and totals rows are
304
+ // dropped from the selection, and the item is hidden when nothing else is selected.
305
+ var deletableTableRowIndexes = activeTable
306
+ ? (0, table_1.getDeletableTableRowIndexes)(activeTable, selectedRowIndexes)
307
+ : selectedRowIndexes;
267
308
  // Basic filter
268
309
  var activeBasicFilter = basicFilter && (0, grid_1.isCellWithinBounds)(activeCell, basicFilter.range)
269
310
  ? basicFilter
@@ -453,15 +494,50 @@ var ContextMenu = function (_a) {
453
494
  // Totals-row function picker: the active cell sits on a table's totals row.
454
495
  var isActiveCellTableTotal = !!(activeTable === null || activeTable === void 0 ? void 0 : activeTable.totalRow) &&
455
496
  activeCell.rowIndex === activeTable.range.endRowIndex;
456
- var activeTotalRowFunction = (0, react_1.useMemo)(function () {
457
- var _a, _b;
458
- if (!isActiveCellTableTotal) {
459
- return "none";
497
+ /**
498
+ * The selection clipped to the active table, in table terms (Excel's table
499
+ * Insert / Select items): the selected data-body rows (none when only the
500
+ * header / totals row is selected), the selected rows including header and
501
+ * totals, and the selected columns. Counts follow the selection — N
502
+ * selected rows insert N table rows.
503
+ */
504
+ var tableSelection = (0, react_1.useMemo)(function () {
505
+ var _a, _b, _c;
506
+ if (!activeTable) {
507
+ return undefined;
460
508
  }
461
- var cellData = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, activeCell.rowIndex, activeCell.columnIndex);
462
- var ue = (_a = cellData === null || cellData === void 0 ? void 0 : cellData.ue) !== null && _a !== void 0 ? _a : cellData === null || cellData === void 0 ? void 0 : cellData.userEnteredValue;
463
- return (0, total_row_functions_1.getTotalRowFunctionFromFormula)((_b = ue === null || ue === void 0 ? void 0 : ue.fv) !== null && _b !== void 0 ? _b : ue === null || ue === void 0 ? void 0 : ue.formulaValue);
464
- }, [isActiveCellTableTotal, getCellData, sheetId, activeCell]);
509
+ var range = activeTable.range;
510
+ var firstBodyRow = range.startRowIndex + (((_a = activeTable.headerRow) !== null && _a !== void 0 ? _a : true) ? 1 : 0);
511
+ var lastDataRow = range.endRowIndex - (activeTable.totalRow ? 1 : 0);
512
+ var sel = selection.range;
513
+ var clip = function (start, end, lo, hi) {
514
+ var s = Math.max(start, lo);
515
+ var e = Math.min(end, hi);
516
+ return e >= s ? { start: s, end: e, count: e - s + 1 } : undefined;
517
+ };
518
+ var activeColumn = {
519
+ start: activeCell.columnIndex,
520
+ end: activeCell.columnIndex,
521
+ count: 1,
522
+ };
523
+ var bodyRows = clip(sel.startRowIndex, sel.endRowIndex, firstBodyRow, lastDataRow);
524
+ return {
525
+ firstBodyRow: firstBodyRow,
526
+ lastDataRow: lastDataRow,
527
+ bodyRows: bodyRows,
528
+ rows: (_b = clip(sel.startRowIndex, sel.endRowIndex, range.startRowIndex, range.endRowIndex)) !== null && _b !== void 0 ? _b : {
529
+ start: activeCell.rowIndex,
530
+ end: activeCell.rowIndex,
531
+ count: 1,
532
+ },
533
+ columns: (_c = clip(sel.startColumnIndex, sel.endColumnIndex, range.startColumnIndex, range.endColumnIndex)) !== null && _c !== void 0 ? _c : activeColumn,
534
+ touchesLastDataRow: !!bodyRows && bodyRows.end === lastDataRow && lastDataRow >= firstBodyRow,
535
+ };
536
+ }, [activeTable, selection.range, activeCell]);
537
+ /** `rowData` for `onInsertTableRow`: one blank record per row to insert. */
538
+ var blankTableRows = function (count) {
539
+ return Array.from({ length: count }, function () { return ({}); });
540
+ };
465
541
  // Sort table or filter
466
542
  var onSortTableOrFilterView = (0, react_1.useCallback)(function (direction) {
467
543
  // Found a table
@@ -777,28 +853,40 @@ var ContextMenu = function (_a) {
777
853
  "Insert",
778
854
  react_1.default.createElement(ui_1.DropdownRightSlot, null,
779
855
  react_1.default.createElement(icons_1.ChevronRightIcon, null))),
780
- react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 }, activeTable ? (react_1.default.createElement(react_1.default.Fragment, null,
856
+ react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 }, activeTable && tableSelection ? (react_1.default.createElement(react_1.default.Fragment, null,
781
857
  isActiveCellTableHeader ? null : (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
782
- onInsertTableRow === null || onInsertTableRow === void 0 ? void 0 : onInsertTableRow(activeTable, activeCell.rowIndex -
783
- activeTable.range.startRowIndex);
858
+ var _a, _b;
859
+ // Above the selected body rows; from the totals
860
+ // row, above the totals row (Excel).
861
+ var bodyRows = tableSelection.bodyRows, lastDataRow = tableSelection.lastDataRow;
862
+ onInsertTableRow === null || onInsertTableRow === void 0 ? void 0 : onInsertTableRow(activeTable, ((_a = bodyRows === null || bodyRows === void 0 ? void 0 : bodyRows.start) !== null && _a !== void 0 ? _a : lastDataRow + 1) -
863
+ activeTable.range.startRowIndex, blankTableRows((_b = bodyRows === null || bodyRows === void 0 ? void 0 : bodyRows.count) !== null && _b !== void 0 ? _b : 1));
864
+ }, disabled: readonly },
865
+ react_1.default.createElement(ui_1.DropdownLeftSlot, null,
866
+ react_1.default.createElement(icons_1.PlusIcon, null)),
867
+ "Table Rows Above")),
868
+ tableSelection.touchesLastDataRow ? (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
869
+ var _a;
870
+ var bodyRows = tableSelection.bodyRows, lastDataRow = tableSelection.lastDataRow;
871
+ onInsertTableRow === null || onInsertTableRow === void 0 ? void 0 : onInsertTableRow(activeTable, lastDataRow + 1 - activeTable.range.startRowIndex, blankTableRows((_a = bodyRows === null || bodyRows === void 0 ? void 0 : bodyRows.count) !== null && _a !== void 0 ? _a : 1));
784
872
  }, disabled: readonly },
785
873
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
786
874
  react_1.default.createElement(icons_1.PlusIcon, null)),
787
- "Insert table row")),
875
+ "Table Row Below")) : null,
788
876
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
789
- onInsertTableColumn === null || onInsertTableColumn === void 0 ? void 0 : onInsertTableColumn(activeTable, activeCell.columnIndex -
790
- activeTable.range.startColumnIndex, grid_1.Direction.Left);
877
+ var columns = tableSelection.columns;
878
+ onInsertTableColumn === null || onInsertTableColumn === void 0 ? void 0 : onInsertTableColumn(activeTable, columns.start - activeTable.range.startColumnIndex, grid_1.Direction.Left, columns.count);
791
879
  }, disabled: readonly },
792
880
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
793
881
  react_1.default.createElement(icons_1.ArrowLeftIcon, null)),
794
- "Insert table column to the left"),
882
+ "Table Columns to the Left"),
795
883
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
796
- onInsertTableColumn === null || onInsertTableColumn === void 0 ? void 0 : onInsertTableColumn(activeTable, activeCell.columnIndex -
797
- activeTable.range.startColumnIndex, grid_1.Direction.Right);
884
+ var columns = tableSelection.columns;
885
+ onInsertTableColumn === null || onInsertTableColumn === void 0 ? void 0 : onInsertTableColumn(activeTable, columns.end - activeTable.range.startColumnIndex, grid_1.Direction.Right, columns.count);
798
886
  }, disabled: readonly },
799
887
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
800
888
  react_1.default.createElement(icons_1.ArrowRightIcon, null)),
801
- "Insert table column to the right"))) : (react_1.default.createElement(react_1.default.Fragment, null,
889
+ "Table Columns to the Right"))) : (react_1.default.createElement(react_1.default.Fragment, null,
802
890
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
803
891
  return onInsertRow === null || onInsertRow === void 0 ? void 0 : onInsertRow(sheetId, activeCell.rowIndex, selectedRowIndexes.length);
804
892
  }, disabled: readonly },
@@ -838,8 +926,8 @@ var ContextMenu = function (_a) {
838
926
  react_1.default.createElement(ui_1.DropdownRightSlot, null,
839
927
  react_1.default.createElement(icons_1.ChevronRightIcon, null))),
840
928
  react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 }, activeTable ? (react_1.default.createElement(react_1.default.Fragment, null,
841
- isActiveCellTableHeader ? null : (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
842
- return onDeleteTableRow === null || onDeleteTableRow === void 0 ? void 0 : onDeleteTableRow(activeTable, selectedRowIndexes);
929
+ deletableTableRowIndexes.length === 0 ? null : (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
930
+ return onDeleteTableRow === null || onDeleteTableRow === void 0 ? void 0 : onDeleteTableRow(activeTable, deletableTableRowIndexes);
843
931
  }, disabled: readonly },
844
932
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
845
933
  react_1.default.createElement(icons_1.TrashIcon, null)),
@@ -880,6 +968,38 @@ var ContextMenu = function (_a) {
880
968
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
881
969
  react_1.default.createElement(icons_1.TrashIcon, null)),
882
970
  deleteCellsLabel)),
971
+ activeTable && tableSelection && onSelectRange ? (react_1.default.createElement(ui_1.DropdownMenuSub, null,
972
+ react_1.default.createElement(ui_1.DropdownMenuSubTrigger, null,
973
+ react_1.default.createElement(ui_1.DropdownLeftSlot, null,
974
+ react_1.default.createElement(icons_1.ViewGridIcon, null)),
975
+ "Select",
976
+ react_1.default.createElement(ui_1.DropdownRightSlot, null,
977
+ react_1.default.createElement(icons_1.ChevronRightIcon, null))),
978
+ react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 },
979
+ react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
980
+ return onSelectRange(sheetId, {
981
+ startRowIndex: tableSelection.firstBodyRow,
982
+ endRowIndex: Math.max(tableSelection.firstBodyRow, tableSelection.lastDataRow),
983
+ startColumnIndex: tableSelection.columns.start,
984
+ endColumnIndex: tableSelection.columns.end,
985
+ });
986
+ } }, "Table Column Data"),
987
+ react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
988
+ return onSelectRange(sheetId, {
989
+ startRowIndex: activeTable.range.startRowIndex,
990
+ endRowIndex: activeTable.range.endRowIndex,
991
+ startColumnIndex: tableSelection.columns.start,
992
+ endColumnIndex: tableSelection.columns.end,
993
+ });
994
+ } }, "Entire Table Column"),
995
+ react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
996
+ return onSelectRange(sheetId, {
997
+ startRowIndex: tableSelection.rows.start,
998
+ endRowIndex: tableSelection.rows.end,
999
+ startColumnIndex: activeTable.range.startColumnIndex,
1000
+ endColumnIndex: activeTable.range.endColumnIndex,
1001
+ });
1002
+ } }, "Table Row")))) : null,
883
1003
  react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
884
1004
  react_1.default.createElement(ui_1.DropdownMenuSub, null,
885
1005
  react_1.default.createElement(ui_1.DropdownMenuSubTrigger, { disabled: readonly },
@@ -920,27 +1040,31 @@ var ContextMenu = function (_a) {
920
1040
  react_1.default.createElement(ui_1.DropdownRightSlot, null,
921
1041
  react_1.default.createElement(icons_1.ChevronRightIcon, null))),
922
1042
  react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 },
1043
+ onUpdateTable ? (react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: !!activeTable.totalRow, disabled: readonly, onSelect: function () {
1044
+ return onUpdateTable(sheetId, activeTable.id, {
1045
+ totalRow: !activeTable.totalRow,
1046
+ });
1047
+ } },
1048
+ react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
1049
+ react_1.default.createElement(icons_1.CheckIcon, null)),
1050
+ "Totals Row")) : null,
923
1051
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () { return onRemoveTable === null || onRemoveTable === void 0 ? void 0 : onRemoveTable(activeTable); }, disabled: readonly }, "Convert to range"),
924
1052
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () { return onRequestEditTable === null || onRequestEditTable === void 0 ? void 0 : onRequestEditTable(activeTable); }, disabled: readonly }, "Edit table"),
1053
+ onRequestResizeTable ? (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
1054
+ shouldFocusSheetRef.current = false;
1055
+ onRequestResizeTable(activeTable);
1056
+ }, disabled: readonly }, "Resize Table\u2026")) : null,
1057
+ onRequestInsertSlicer ? (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
1058
+ shouldFocusSheetRef.current = false;
1059
+ onRequestInsertSlicer(activeTable);
1060
+ }, disabled: readonly }, "Insert Slicer\u2026")) : null,
925
1061
  isActiveCellTableTotal ? (react_1.default.createElement(ui_1.DropdownMenuSub, null,
926
1062
  react_1.default.createElement(ui_1.DropdownMenuSubTrigger, { disabled: readonly },
927
1063
  "Total row function",
928
1064
  react_1.default.createElement(ui_1.DropdownRightSlot, null,
929
1065
  react_1.default.createElement(icons_1.ChevronRightIcon, null))),
930
- react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 }, total_row_functions_1.TOTAL_ROW_FUNCTIONS.map(function (option) { return (react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { key: option.id, checked: activeTotalRowFunction === option.id, disabled: readonly, onSelect: function () {
931
- var formula = (0, total_row_functions_1.getTotalRowFunctionFormula)(option.id, activeTable, activeCell.columnIndex);
932
- if (formula === undefined) {
933
- return;
934
- }
935
- if (formula === "") {
936
- onClearContents === null || onClearContents === void 0 ? void 0 : onClearContents(sheetId, activeCell, (0, grid_1.selectionFromActiveCell)(activeCell));
937
- return;
938
- }
939
- onChange === null || onChange === void 0 ? void 0 : onChange(sheetId, activeCell, formula, null);
940
- } },
941
- react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
942
- react_1.default.createElement(icons_1.CheckIcon, null)),
943
- option.label)); })))) : null))) : null,
1066
+ react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 },
1067
+ react_1.default.createElement(total_row_function_menu_1.TotalRowFunctionMenuItems, { sheetId: sheetId, table: activeTable, cell: activeCell, readonly: readonly, getCellData: getCellData, onChange: onChange, onClearContents: onClearContents, onUpdateTable: onUpdateTable, onRequestEditCell: onRequestEditCell })))) : null))) : null,
944
1068
  activePivotTable ? (react_1.default.createElement(ui_1.DropdownMenuSub, null,
945
1069
  react_1.default.createElement(ui_1.DropdownMenuSubTrigger, { disabled: readonly },
946
1070
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
@@ -955,13 +1079,61 @@ var ContextMenu = function (_a) {
955
1079
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () { return onRequestEditPivotTable === null || onRequestEditPivotTable === void 0 ? void 0 : onRequestEditPivotTable(activePivotTable); }, disabled: readonly }, "Edit PivotTable"),
956
1080
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
957
1081
  return onRequestDeletePivotTable === null || onRequestDeletePivotTable === void 0 ? void 0 : onRequestDeletePivotTable(activePivotTable.pivotId);
958
- }, disabled: readonly }, "Delete PivotTable")))) : null,
1082
+ }, disabled: readonly }, "Delete PivotTable"),
1083
+ onRequestCreatePivotChart ? (react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
1084
+ return onRequestCreatePivotChart(sheetId, activeCell, selections, activePivotTable.pivotId);
1085
+ }, disabled: readonly }, "PivotChart")) : null))) : null,
1086
+ activeSparklineGroup ? (react_1.default.createElement(ui_1.DropdownMenuSub, null,
1087
+ react_1.default.createElement(ui_1.DropdownMenuSubTrigger, { disabled: readonly },
1088
+ "Sparklines",
1089
+ react_1.default.createElement(ui_1.DropdownRightSlot, null,
1090
+ react_1.default.createElement(icons_1.ChevronRightIcon, null))),
1091
+ react_1.default.createElement(ui_1.DropdownMenuSubContent, { sideOffset: 2, alignOffset: -5 },
1092
+ react_1.default.createElement(ui_1.DropdownMenuItem, { disabled: readonly, onClick: function () {
1093
+ shouldFocusSheetRef.current = false;
1094
+ openSparklineDialog({ mode: "edit", group: activeSparklineGroup });
1095
+ } }, "Edit Group Location & Data\u2026"),
1096
+ react_1.default.createElement(ui_1.DropdownMenuItem, { disabled: readonly, onClick: function () {
1097
+ var e_5, _a, e_6, _b;
1098
+ var cells = [];
1099
+ try {
1100
+ for (var _c = tslib_1.__values(selections.length
1101
+ ? selections
1102
+ : (0, grid_1.selectionFromActiveCell)(activeCell)), _d = _c.next(); !_d.done; _d = _c.next()) {
1103
+ var range = _d.value.range;
1104
+ try {
1105
+ for (var _e = (e_6 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(range))), _f = _e.next(); !_f.done; _f = _e.next()) {
1106
+ var _g = tslib_1.__read(_f.value, 2), rowIndex = _g[0], columnIndex = _g[1];
1107
+ cells.push({ rowIndex: rowIndex, columnIndex: columnIndex });
1108
+ }
1109
+ }
1110
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1111
+ finally {
1112
+ try {
1113
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
1114
+ }
1115
+ finally { if (e_6) throw e_6.error; }
1116
+ }
1117
+ }
1118
+ }
1119
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1120
+ finally {
1121
+ try {
1122
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
1123
+ }
1124
+ finally { if (e_5) throw e_5.error; }
1125
+ }
1126
+ clearSparklineCells(cells);
1127
+ } }, "Clear Selected Sparklines"),
1128
+ react_1.default.createElement(ui_1.DropdownMenuItem, { disabled: readonly, onClick: function () {
1129
+ return clearSparklineCells(activeSparklineGroup.members.map(function (m) { return m.cell; }));
1130
+ } }, "Clear Selected Sparkline Groups")))) : null,
959
1131
  react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
960
1132
  activeTable ? null : (react_1.default.createElement(react_1.default.Fragment, null,
961
1133
  react_1.default.createElement(ui_1.DropdownMenuItem, { onClick: function () {
962
1134
  // We have to shift the focus to note editor
963
1135
  shouldFocusSheetRef.current = false;
964
- onCreateTable === null || onCreateTable === void 0 ? void 0 : onCreateTable(sheetId, activeCell, selections, undefined, "TableStyleLight1", {
1136
+ var bandedRange = {
965
1137
  rowProperties: {
966
1138
  firstBandColor: {
967
1139
  theme: 1,
@@ -996,7 +1168,13 @@ var ContextMenu = function (_a) {
996
1168
  },
997
1169
  },
998
1170
  },
999
- });
1171
+ };
1172
+ if (onRequestCreateTable) {
1173
+ onRequestCreateTable(sheetId, activeCell, selections, "TableStyleLight1", bandedRange);
1174
+ }
1175
+ else {
1176
+ onCreateTable === null || onCreateTable === void 0 ? void 0 : onCreateTable(sheetId, activeCell, selections, undefined, "TableStyleLight1", bandedRange);
1177
+ }
1000
1178
  }, disabled: readonly },
1001
1179
  react_1.default.createElement(ui_1.DropdownLeftSlot, null,
1002
1180
  react_1.default.createElement(icons_1.TableIcon, null)),
@@ -0,0 +1,33 @@
1
+ import type { CellInterface } from "@rowsncolumns/grid";
2
+ import React from "react";
3
+ import type { TableView } from "../../types";
4
+ import type { CanvasGridProps } from "../canvas-grid/typings";
5
+ export type TotalRowFunctionMenuItemsProps = {
6
+ sheetId: number;
7
+ table: TableView;
8
+ /** The totals-row cell the picker acts on. */
9
+ cell: CellInterface;
10
+ readonly?: boolean;
11
+ /** Reads the cell's formula to highlight its current function when the column records none. */
12
+ getCellData?: CanvasGridProps["getCellData"];
13
+ /** Writes the chosen aggregation formula into the cell (fallback without `onUpdateTable`). */
14
+ onChange?: CanvasGridProps["onChange"];
15
+ /** Clears the cell for "None" (fallback without `onUpdateTable`). */
16
+ onClearContents?: CanvasGridProps["onClearContents"];
17
+ /**
18
+ * Records the choice as the column's `totalsRowFunction`: both engines derive
19
+ * the totals cell from it and regenerate it when the totals row is toggled off
20
+ * and on. Without it the picker writes the formula with `onChange`.
21
+ */
22
+ onUpdateTable?: CanvasGridProps["onUpdateTable"];
23
+ /** Opens the cell editor pre-filled, for "More Functions…" (omitted when absent). */
24
+ onRequestEditCell?: (sheetId: number, cell: CellInterface, initialValue?: string) => void;
25
+ };
26
+ /**
27
+ * Excel's totals-row function list (None / Average / Count / … / Var, then
28
+ * "More Functions…") for one totals cell — the items of the context menu's
29
+ * "Total row function" submenu and of the dropdown the totals cell's in-cell
30
+ * arrow opens.
31
+ */
32
+ export declare const TotalRowFunctionMenuItems: ({ sheetId, table, cell, readonly, getCellData, onChange, onClearContents, onUpdateTable, onRequestEditCell, }: TotalRowFunctionMenuItemsProps) => React.JSX.Element;
33
+ //# sourceMappingURL=total-row-function-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"total-row-function-menu.d.ts","sourceRoot":"","sources":["../../../../components/context-menu/total-row-function-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASxD,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,8CAA8C;IAC9C,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7C,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC,qEAAqE;IACrE,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACrD;;;;OAIG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACjD,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,YAAY,CAAC,EAAE,MAAM,KAClB,IAAI,CAAC;CACX,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,+GAUvC,8BAA8B,sBAiEhC,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TotalRowFunctionMenuItems = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var grid_1 = require("@rowsncolumns/grid");
6
+ var icons_1 = require("@rowsncolumns/icons");
7
+ var ui_1 = require("@rowsncolumns/ui");
8
+ var react_1 = tslib_1.__importStar(require("react"));
9
+ var total_row_functions_1 = require("./total-row-functions");
10
+ /**
11
+ * Excel's totals-row function list (None / Average / Count / … / Var, then
12
+ * "More Functions…") for one totals cell — the items of the context menu's
13
+ * "Total row function" submenu and of the dropdown the totals cell's in-cell
14
+ * arrow opens.
15
+ */
16
+ var TotalRowFunctionMenuItems = function (_a) {
17
+ var sheetId = _a.sheetId, table = _a.table, cell = _a.cell, readonly = _a.readonly, getCellData = _a.getCellData, onChange = _a.onChange, onClearContents = _a.onClearContents, onUpdateTable = _a.onUpdateTable, onRequestEditCell = _a.onRequestEditCell;
18
+ var activeFunction = (0, react_1.useMemo)(function () {
19
+ var _a, _b, _c, _d;
20
+ // The column's recorded function is the source of truth; a totals cell
21
+ // without one (typed by hand, or from a file) is read off its formula.
22
+ var recorded = (_b = (_a = table.columns) === null || _a === void 0 ? void 0 : _a[cell.columnIndex - table.range.startColumnIndex]) === null || _b === void 0 ? void 0 : _b.totalsRowFunction;
23
+ if (recorded && recorded !== "custom") {
24
+ return recorded;
25
+ }
26
+ var cellData = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, cell.rowIndex, cell.columnIndex);
27
+ var ue = (_c = cellData === null || cellData === void 0 ? void 0 : cellData.ue) !== null && _c !== void 0 ? _c : cellData === null || cellData === void 0 ? void 0 : cellData.userEnteredValue;
28
+ return (0, total_row_functions_1.getTotalRowFunctionFromFormula)((_d = ue === null || ue === void 0 ? void 0 : ue.fv) !== null && _d !== void 0 ? _d : ue === null || ue === void 0 ? void 0 : ue.formulaValue);
29
+ }, [table, getCellData, sheetId, cell]);
30
+ return (react_1.default.createElement(react_1.default.Fragment, null,
31
+ total_row_functions_1.TOTAL_ROW_FUNCTIONS.map(function (option) { return (react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { key: option.id, checked: activeFunction === option.id, disabled: readonly, onSelect: function () {
32
+ var columns = onUpdateTable
33
+ ? (0, total_row_functions_1.withTotalRowFunction)(table, cell.columnIndex, option.id)
34
+ : undefined;
35
+ if (columns) {
36
+ onUpdateTable === null || onUpdateTable === void 0 ? void 0 : onUpdateTable(sheetId, table.id, { columns: columns });
37
+ return;
38
+ }
39
+ var formula = (0, total_row_functions_1.getTotalRowFunctionFormula)(option.id, table, cell.columnIndex);
40
+ if (formula === undefined) {
41
+ return;
42
+ }
43
+ if (formula === "") {
44
+ onClearContents === null || onClearContents === void 0 ? void 0 : onClearContents(sheetId, cell, (0, grid_1.selectionFromActiveCell)(cell));
45
+ return;
46
+ }
47
+ onChange === null || onChange === void 0 ? void 0 : onChange(sheetId, cell, formula, null);
48
+ } },
49
+ react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
50
+ react_1.default.createElement(icons_1.CheckIcon, null)),
51
+ option.label)); }),
52
+ onRequestEditCell ? (react_1.default.createElement(react_1.default.Fragment, null,
53
+ react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
54
+ react_1.default.createElement(ui_1.DropdownMenuItem, { disabled: readonly, onSelect: function () {
55
+ return onRequestEditCell(sheetId, cell, total_row_functions_1.MORE_FUNCTIONS_INITIAL_VALUE);
56
+ } }, "More Functions\u2026"))) : null));
57
+ };
58
+ exports.TotalRowFunctionMenuItems = TotalRowFunctionMenuItems;
@@ -1,9 +1,11 @@
1
+ import { escapeStructuredColumnName, getTotalsRowFunctionFromFormula, type TotalsRowFunction } from "@rowsncolumns/utils";
1
2
  import type { TableView } from "../../types";
2
3
  /**
3
- * The aggregations Excel offers in a table's totals-row dropdown, each backed
4
- * by the `SUBTOTAL` function number that ignores hidden (filtered) rows.
4
+ * The aggregations Excel offers in a table's totals-row dropdown — the
5
+ * `totalsRowFunction` values a column records (`custom` is what "More
6
+ * Functions…" produces and is not a picker entry).
5
7
  */
6
- export type TotalRowFunction = "none" | "average" | "count" | "countNumbers" | "max" | "min" | "sum" | "stdDev" | "var";
8
+ export type TotalRowFunction = Exclude<TotalsRowFunction, "custom">;
7
9
  export type TotalRowFunctionOption = {
8
10
  id: TotalRowFunction;
9
11
  label: string;
@@ -11,11 +13,9 @@ export type TotalRowFunctionOption = {
11
13
  subtotal?: number;
12
14
  };
13
15
  export declare const TOTAL_ROW_FUNCTIONS: TotalRowFunctionOption[];
14
- /**
15
- * Escape a column name for use inside a structured reference: `[`, `]`, `#`
16
- * and `'` are prefixed with `'`, as Excel does.
17
- */
18
- export declare const escapeStructuredColumnName: (name: string) => string;
16
+ /** What "More Functions…" pre-fills in the cell editor for a custom totals formula. */
17
+ export declare const MORE_FUNCTIONS_INITIAL_VALUE = "=SUBTOTAL(";
18
+ export { escapeStructuredColumnName, getTotalsRowFunctionFromFormula as getTotalRowFunctionFromFormula };
19
19
  /**
20
20
  * Formula for a totals-row cell, e.g. `=SUBTOTAL(109,Table1[Amount])`.
21
21
  * Qualified with the table name so it evaluates from any engine and matches
@@ -24,9 +24,9 @@ export declare const escapeStructuredColumnName: (name: string) => string;
24
24
  */
25
25
  export declare const getTotalRowFunctionFormula: (fn: TotalRowFunction, table: Pick<TableView, "title" | "columns" | "range">, columnIndex: number) => string | undefined;
26
26
  /**
27
- * Recognise the aggregation a totals-row formula uses, so the picker can show
28
- * the active choice. Both the hidden-row-aware (1xx) and plain (1–11)
29
- * `SUBTOTAL` numbers map to the same option; anything else is "none".
27
+ * The table's columns with `columnIndex`'s `totalsRowFunction` set to `fn` —
28
+ * the shape `onUpdateTable` persists so the choice survives toggling the totals
29
+ * row off and on. `undefined` when the column list does not cover the cell.
30
30
  */
31
- export declare const getTotalRowFunctionFromFormula: (formula: string | null | undefined) => TotalRowFunction;
31
+ export declare const withTotalRowFunction: (table: Pick<TableView, "columns" | "range">, columnIndex: number, fn: TotalRowFunction) => TableView["columns"] | undefined;
32
32
  //# sourceMappingURL=total-row-functions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"total-row-functions.d.ts","sourceRoot":"","sources":["../../../../components/context-menu/total-row-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,OAAO,GACP,cAAc,GACd,KAAK,GACL,KAAK,GACL,KAAK,GACL,QAAQ,GACR,KAAK,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,gBAAgB,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,sBAAsB,EAUvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,WACnB,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,IAAI,gBAAgB,EACpB,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,EACrD,aAAa,MAAM,KAClB,MAAM,GAAG,SAaX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,KACjC,gBAgBF,CAAC"}
1
+ {"version":3,"file":"total-row-functions.d.ts","sourceRoot":"","sources":["../../../../components/context-menu/total-row-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAE1B,+BAA+B,EAE/B,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAEpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,gBAAgB,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,sBAAsB,EAgBrD,CAAC;AAEJ,uFAAuF;AACvF,eAAO,MAAM,4BAA4B,eAAe,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,IAAI,8BAA8B,EAAE,CAAC;AAEzG;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,IAAI,gBAAgB,EACpB,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,EACrD,aAAa,MAAM,KAClB,MAAM,GAAG,SAUX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,EAC3C,aAAa,MAAM,EACnB,IAAI,gBAAgB,KACnB,SAAS,CAAC,SAAS,CAAC,GAAG,SASzB,CAAC"}