@rowsncolumns/spreadsheet 10.3.1 → 10.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) 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/release-date.js +1 -1
  211. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  212. package/dist/cjs/types.d.ts +289 -4
  213. package/dist/cjs/types.d.ts.map +1 -1
  214. package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
  215. package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
  216. package/dist/cjs/utils/copy-as-picture.js +70 -0
  217. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
  218. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  219. package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
  220. package/dist/cjs/utils/z-order.d.ts +47 -0
  221. package/dist/cjs/utils/z-order.d.ts.map +1 -0
  222. package/dist/cjs/utils/z-order.js +124 -0
  223. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  224. package/dist/esm/api/banded-ranges.js +39 -12
  225. package/dist/esm/api/calculated-column-fill.d.ts +43 -0
  226. package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
  227. package/dist/esm/api/calculated-column-fill.js +10 -0
  228. package/dist/esm/api/chart-sheet.d.ts +8 -0
  229. package/dist/esm/api/chart-sheet.d.ts.map +1 -0
  230. package/dist/esm/api/chart-sheet.js +15 -0
  231. package/dist/esm/api/chart-source-ranges.d.ts +64 -0
  232. package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
  233. package/dist/esm/api/chart-source-ranges.js +168 -0
  234. package/dist/esm/api/selections.d.ts +3 -3
  235. package/dist/esm/api/selections.d.ts.map +1 -1
  236. package/dist/esm/api/selections.js +26 -2
  237. package/dist/esm/api/spreadsheet-api.d.ts +16 -3
  238. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  239. package/dist/esm/api/spreadsheet-api.js +18 -2
  240. package/dist/esm/api/table-auto-expansion.d.ts +37 -0
  241. package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
  242. package/dist/esm/api/table-auto-expansion.js +10 -0
  243. package/dist/esm/api/table.d.ts +49 -1
  244. package/dist/esm/api/table.d.ts.map +1 -1
  245. package/dist/esm/api/table.js +138 -1
  246. package/dist/esm/api/validation.d.ts +26 -1
  247. package/dist/esm/api/validation.d.ts.map +1 -1
  248. package/dist/esm/api/validation.js +119 -9
  249. package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
  250. package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  251. package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
  252. package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
  253. package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
  254. package/dist/esm/atoms/chart-actions.atom.js +58 -0
  255. package/dist/esm/atoms/index.d.ts +5 -0
  256. package/dist/esm/atoms/index.d.ts.map +1 -1
  257. package/dist/esm/atoms/index.js +5 -0
  258. package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
  259. package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  260. package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
  261. package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
  262. package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  263. package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
  264. package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
  265. package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
  266. package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
  267. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  268. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  269. package/dist/esm/atoms/sheet-context.atom.js +2 -0
  270. package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
  271. package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  272. package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
  273. package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
  274. package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  275. package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
  276. package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
  277. package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  278. package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
  279. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  280. package/dist/esm/components/canvas-grid/index.js +332 -21
  281. package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
  282. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  283. package/dist/esm/components/cell/index.d.ts.map +1 -1
  284. package/dist/esm/components/cell/index.js +3 -3
  285. package/dist/esm/components/cell/typings.d.ts +13 -0
  286. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  287. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  288. package/dist/esm/components/cell-filter/index.js +14 -3
  289. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  290. package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
  291. package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
  292. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  293. package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
  294. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  295. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  296. package/dist/esm/components/cell-structured/sparkline.js +3 -3
  297. package/dist/esm/components/cell-structured/types.d.ts +1 -1
  298. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  299. package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
  300. package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
  301. package/dist/esm/components/chart-sheet-view/index.js +30 -0
  302. package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
  303. package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
  304. package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
  305. package/dist/esm/components/context-menu/index.d.ts +23 -2
  306. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  307. package/dist/esm/components/context-menu/index.js +174 -38
  308. package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
  309. package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  310. package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
  311. package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
  312. package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
  313. package/dist/esm/components/context-menu/total-row-functions.js +29 -31
  314. package/dist/esm/components/embeds/chart-component.d.ts +17 -0
  315. package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
  316. package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
  317. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  318. package/dist/esm/components/embeds/embed-draggable.js +204 -45
  319. package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
  320. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
  321. package/dist/esm/components/filter-box/date-tree.js +107 -0
  322. package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
  323. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  324. package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
  325. package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
  326. package/dist/esm/components/filter-box/filter-by-value.js +110 -39
  327. package/dist/esm/components/filter-box/index.d.ts +7 -1
  328. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  329. package/dist/esm/components/filter-box/index.js +88 -2
  330. package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
  331. package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
  332. package/dist/esm/components/move-chart-dialog/index.js +88 -0
  333. package/dist/esm/components/print-preview/page-block.d.ts +9 -1
  334. package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
  335. package/dist/esm/components/print-preview/page-block.js +27 -2
  336. package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
  337. package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  338. package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
  339. package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
  340. package/dist/esm/components/print-preview/run-print.js +17 -7
  341. package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
  342. package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
  343. package/dist/esm/components/print-preview/use-page-layout.js +55 -0
  344. package/dist/esm/components/selection/index.d.ts +1 -1
  345. package/dist/esm/components/selection/index.d.ts.map +1 -1
  346. package/dist/esm/components/selection/index.js +6 -2
  347. package/dist/esm/components/selection/types.d.ts +15 -0
  348. package/dist/esm/components/selection/types.d.ts.map +1 -1
  349. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  350. package/dist/esm/components/sheet-tabs/index.js +2 -2
  351. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
  352. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  353. package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
  354. package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
  355. package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
  356. package/dist/esm/components/sparkline-dialog/index.js +123 -0
  357. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
  358. package/dist/esm/components/subtotal-dialog/index.js +10 -1
  359. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  360. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  361. package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
  362. package/dist/esm/components/toolbar/index.d.ts +1 -0
  363. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  364. package/dist/esm/components/toolbar/index.js +1 -0
  365. package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
  366. package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
  367. package/dist/esm/components/toolbar/insert-menu.js +24 -1
  368. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
  369. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  370. package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
  371. package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
  372. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
  373. package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
  374. package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
  375. package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
  376. package/dist/esm/components/toolbar/table-actions.js +15 -7
  377. package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
  378. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  379. package/dist/esm/components/toolbar/table-style-selector.js +210 -399
  380. package/dist/esm/config.d.ts +2 -0
  381. package/dist/esm/config.d.ts.map +1 -1
  382. package/dist/esm/config.js +30 -0
  383. package/dist/esm/helpers.d.ts +1 -1
  384. package/dist/esm/helpers.d.ts.map +1 -1
  385. package/dist/esm/helpers.js +12 -1
  386. package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
  387. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  388. package/dist/esm/hooks/use-cell-renderer.js +14 -4
  389. package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
  390. package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
  391. package/dist/esm/hooks/use-chart-clipboard.js +213 -0
  392. package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
  393. package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
  394. package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
  395. package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
  396. package/dist/esm/hooks/use-context-setter.js +3 -1
  397. package/dist/esm/hooks/use-editable.d.ts +9 -1
  398. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  399. package/dist/esm/hooks/use-editable.js +25 -1
  400. package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
  401. package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
  402. package/dist/esm/hooks/use-embeds-charts.js +394 -39
  403. package/dist/esm/hooks/use-grid-children.d.ts +2 -2
  404. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  405. package/dist/esm/hooks/use-grid-children.js +8 -2
  406. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  407. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  408. package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
  409. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  410. package/dist/esm/hooks/use-keyboard-handler.js +8 -2
  411. package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
  412. package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  413. package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
  414. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
  415. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  416. package/dist/esm/hooks/use-selection-renderer.js +35 -6
  417. package/dist/esm/hooks/use-selection.d.ts +9 -1
  418. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  419. package/dist/esm/hooks/use-selection.js +122 -30
  420. package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
  421. package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
  422. package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
  423. package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
  424. package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
  425. package/dist/esm/hooks/use-table-hit-zones.js +146 -0
  426. package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
  427. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  428. package/dist/esm/hooks/use-table-resizer.js +21 -10
  429. package/dist/esm/index.d.ts +13 -0
  430. package/dist/esm/index.d.ts.map +1 -1
  431. package/dist/esm/index.js +13 -0
  432. package/dist/esm/release-date.js +1 -1
  433. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  434. package/dist/esm/types.d.ts +289 -4
  435. package/dist/esm/types.d.ts.map +1 -1
  436. package/dist/esm/utils/copy-as-picture.d.ts +13 -0
  437. package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
  438. package/dist/esm/utils/copy-as-picture.js +45 -0
  439. package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
  440. package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  441. package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
  442. package/dist/esm/utils/z-order.d.ts +47 -0
  443. package/dist/esm/utils/z-order.d.ts.map +1 -0
  444. package/dist/esm/utils/z-order.js +111 -0
  445. package/dist/spreadsheet.min.css +1 -1
  446. package/package.json +12 -10
  447. package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
  448. package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
  449. package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
  450. package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
  451. package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
  452. package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
@@ -4,8 +4,7 @@ import { canUseDOM, getOwnerDocument } from "@rowsncolumns/grid";
4
4
  import { getBoundedCells, MouseButtonCodes } from "@rowsncolumns/grid";
5
5
  import { isCellWithinBounds } from "@rowsncolumns/grid";
6
6
  import { cellIdentifier, Grid as BaseGrid, isEqualCells, } from "@rowsncolumns/grid";
7
- import { defaultCellCoords } from "@rowsncolumns/spreadsheet-state";
8
- import { cn, Skeleton, tryParseRichText } from "@rowsncolumns/ui";
7
+ import { cn, DropdownMenuContent, DropdownMenuPortal, Skeleton, tryParseRichText, } from "@rowsncolumns/ui";
9
8
  import { cellToAddress, getCellEffectiveFormat, getContrastColor, getFormulaLocale, isConditionalFormatFormulaRule, isDataValidationFormulaRule, isNil, isNilOrBlank, iterateCellsInRange, localizeCellInput, localizeFormula, localizeFunctionDescriptions, log, resolveDefaultHorizontalAlignment, ssfFormatColor, uuid, } from "@rowsncolumns/utils";
10
9
  import { useStore } from "jotai";
11
10
  import merge from "lodash/merge";
@@ -13,6 +12,8 @@ import throttle from "lodash/throttle";
13
12
  import React, { forwardRef, memo, startTransition, useCallback, useEffect, useMemo, useRef, useState, } from "react";
14
13
  import { getBandedCells } from "../../api/banded-ranges";
15
14
  import { clearRangeForInsertedBand, formatsForInsertOption, insertedBandHasValues, } from "../../api/insert-options";
15
+ import { keepsCalculatedColumnTag, } from "../../api/calculated-column-fill";
16
+ import { keepsTableAutoExpansionTag, } from "../../api/table-auto-expansion";
16
17
  import { CF_INITIAL_WINDOW, cfWindowForViewport, isSameCfWindow, } from "../../api/cf-window";
17
18
  import { generateSelectionsFromFormula } from "../../api/selections";
18
19
  import { SpreadsheetApi } from "../../api/spreadsheet-api";
@@ -21,7 +22,7 @@ import { getDataValidationTooltipContent } from "../../api/validation-tooltip";
21
22
  import { resolveGoToSpecial } from "../../api/go-to-special";
22
23
  import { checkExcelValidationValue, isFormulaEntry, } from "../../api/excel-validation-kinds";
23
24
  import { checkBooleanRule, decideValidationCommit, isCellLockedUnderProtection, isProtectedCell, isProtectedSheet, showValidationDropdownArrow, } from "../../api/validation";
24
- import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useOpenFillSeriesDialog, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
25
+ import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useTableAutoExpansionState, useCalculatedColumnFillState, useOpenFillSeriesDialog, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
25
26
  import { useActiveEditor } from "../../atoms/active-editor.atom";
26
27
  import { useAddWatch, useIsWatchWindowMounted, useSetWatchWindowContext, } from "../../atoms/watch-window.atom";
27
28
  import { useEditingCell } from "../../atoms/editing-cell.atom";
@@ -37,9 +38,12 @@ import { useBorderStyles } from "../../hooks/use-border-styles";
37
38
  import { useCallbackRef } from "../../hooks/use-callback-ref";
38
39
  import { useCellPopover } from "../../hooks/use-cell-popover";
39
40
  import { useCellRenderer } from "../../hooks/use-cell-renderer";
41
+ import { useChartSourceRanges } from "../../hooks/use-chart-source-ranges";
40
42
  import { useConditionalFormatting } from "../../hooks/use-conditional-formatting";
41
43
  import { DefaultContextMenuWrapper, useContextMenu, } from "../../hooks/use-context-menu";
42
44
  import { useContextSetter } from "../../hooks/use-context-setter";
45
+ import { useRevealChartEmbed } from "../../hooks/use-reveal-chart-embed";
46
+ import { useChartClipboard } from "../../hooks/use-chart-clipboard";
43
47
  import { useCopyPasteCut } from "../../hooks/use-copy-paste-cut";
44
48
  import { useCreateAddressFromSelection } from "../../hooks/use-create-address-from-selection";
45
49
  import { useCreateFormulaTokenizer } from "../../hooks/use-create-formula-tokenizer";
@@ -49,6 +53,7 @@ import { useEditorChange } from "../../hooks/use-editor-change";
49
53
  import { useEditorKeydown } from "../../hooks/use-editor-keydown";
50
54
  import { useEditorSubmit } from "../../hooks/use-editor-submit";
51
55
  import { useEmbedsCharts } from "../../hooks/use-embeds-charts";
56
+ import { ChartSheetView } from "../chart-sheet-view";
52
57
  import { useExpandCell } from "../../hooks/use-expand-cell";
53
58
  import { useExportRange } from "../../hooks/use-export-range";
54
59
  import { useFilter } from "../../hooks/use-filter";
@@ -80,6 +85,7 @@ import { useSheetChangeHandler } from "../../hooks/use-sheet-change-handler";
80
85
  import { useSizer } from "../../hooks/use-sizer";
81
86
  import { useStableRef } from "../../hooks/use-stable-ref";
82
87
  import { useOnStructuredReferenceSelection } from "../../hooks/use-structured-reference-selection";
88
+ import { useTableHitZones } from "../../hooks/use-table-hit-zones";
83
89
  import { useTableResizer } from "../../hooks/use-table-resizer";
84
90
  import { useDelayedValue } from "../../hooks/use-delayed-value";
85
91
  import { useTooltip } from "../../hooks/use-tooltip";
@@ -91,6 +97,9 @@ import { fillRangeForSeriesSpec, seedRangeForSeriesSpec } from "../../api/fill-s
91
97
  import { Cell as DefaultCell } from "../cell";
92
98
  import { CellEditor as DefaultCellEditor } from "../cell-editor";
93
99
  import { ContextMenu as DefaultContextMenu } from "../context-menu";
100
+ import { ContextMenuDropdown } from "../context-menu/menu";
101
+ import { StyledContextMenuWrapper } from "../context-menu/style";
102
+ import { TotalRowFunctionMenuItems } from "../context-menu/total-row-function-menu";
94
103
  import { FillHandle } from "../fill-handle";
95
104
  import { FilterBox as DefaultFilterBox } from "../filter-box";
96
105
  import { HeaderCell as DefaultHeaderCell } from "../header-cell";
@@ -105,8 +114,10 @@ import { getNestedPropertyNames } from "./helpers";
105
114
  * @param CanvasGridMethods
106
115
  * @returns
107
116
  */
117
+ /** Where the grid focuses when no cell is given (A1); mirrors spreadsheet-state's `defaultCellCoords` without importing it — that package depends on this one. */
118
+ const defaultCellCoords = { rowIndex: 1, columnIndex: 1 };
108
119
  function CanvasGridComponent(props, forwardedRef) {
109
- const { licenseKey, sheetId, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRemoveTable, onCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
120
+ const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
110
121
  // Host-driven filter props. `hostHiddenRowRanges`
111
122
  // supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
112
123
  // column's distinct values. Both let a million-row filter render without scanning
@@ -197,6 +208,8 @@ function CanvasGridComponent(props, forwardedRef) {
197
208
  // Auto Fill Options smart tag / right-drag fill menu + Series dialog
198
209
  const [fillOptions, setFillOptions] = useFillOptionsState();
199
210
  const [insertOptions, setInsertOptions] = useInsertOptionsState();
211
+ const [tableAutoExpansion, setTableAutoExpansion] = useTableAutoExpansionState();
212
+ const [calculatedColumnFill, setCalculatedColumnFill] = useCalculatedColumnFillState();
200
213
  const openFillSeriesDialog = useOpenFillSeriesDialog();
201
214
  // Shared state
202
215
  const formulaMode = useFormulaModeValue();
@@ -502,6 +515,11 @@ function CanvasGridComponent(props, forwardedRef) {
502
515
  const tableHeaderCells = useMemo(() => {
503
516
  return getTableHeaderCells(activeTables, basicFilter);
504
517
  }, [activeTables, basicFilter]);
518
+ /** A cell on a table's totals row (its in-cell arrow opens the function picker). */
519
+ const isTableTotalsCell = useCallback((rowIndex, columnIndex) => !!activeTables?.some((table) => table.totalRow &&
520
+ rowIndex === table.range.endRowIndex &&
521
+ columnIndex >= table.range.startColumnIndex &&
522
+ columnIndex <= table.range.endColumnIndex), [activeTables]);
505
523
  /**
506
524
  * Retrieve banded cells
507
525
  */
@@ -528,6 +546,13 @@ function CanvasGridComponent(props, forwardedRef) {
528
546
  lastScheduledScrollRef.current = Date.now();
529
547
  gridRef.current?.scrollToCell(cell, align);
530
548
  }, []);
549
+ // Excel scrolls to a chart / picture it has just inserted or restored.
550
+ const scrollToChart = useRevealChartEmbed({
551
+ charts,
552
+ embeds,
553
+ sheetId,
554
+ scrollToCell,
555
+ });
531
556
  /**
532
557
  * Scroll to bottom of the sheet
533
558
  */
@@ -692,7 +717,13 @@ function CanvasGridComponent(props, forwardedRef) {
692
717
  * position offset
693
718
  */
694
719
  const getRelativePositionFromOffset = useCallback((x, y) => {
695
- return gridRef.current?.getRelativePositionFromOffset(x, y);
720
+ const grid = gridRef.current;
721
+ if (grid) {
722
+ return grid.getRelativePositionFromOffset(x, y);
723
+ }
724
+ // A chartsheet mounts no grid; overlays position against the wrapper itself.
725
+ const rect = gridContainerRef.current?.getBoundingClientRect();
726
+ return rect ? { x: x - rect.left, y: y - rect.top } : undefined;
696
727
  }, []);
697
728
  /**
698
729
  * Get scroll position
@@ -1115,10 +1146,11 @@ function CanvasGridComponent(props, forwardedRef) {
1115
1146
  // time — `uf.textFormat.underline` is merged on top below, so a user
1116
1147
  // who explicitly sets underline=false still wins.
1117
1148
  const defaultTextFormat = {
1118
- bold: isTableHeader(rowIndex, columnIndex) &&
1119
- isTableHeaderThemed(rowIndex, columnIndex)
1120
- ? true
1121
- : undefined,
1149
+ bold: bandedCellFormat?.textFormat?.bold ??
1150
+ (isTableHeader(rowIndex, columnIndex) &&
1151
+ isTableHeaderThemed(rowIndex, columnIndex)
1152
+ ? true
1153
+ : undefined),
1122
1154
  fontFamily: theme.primaryFontFamily,
1123
1155
  color: isHyperlink
1124
1156
  ? theme.themeColors.hyperlink
@@ -1739,7 +1771,8 @@ function CanvasGridComponent(props, forwardedRef) {
1739
1771
  /* Data validation arrow */
1740
1772
  const dataValidation = getDataValidationRule(sheetId, rowIndex, columnIndex);
1741
1773
  const additionalCellSpacing = getAdditionalCellSpacing?.(sheetId, rowIndex, columnIndex) ?? 0;
1742
- const showArrow = showValidationDropdownArrow(dataValidation);
1774
+ const showArrow = showValidationDropdownArrow(dataValidation) ||
1775
+ isTableTotalsCell(rowIndex, columnIndex);
1743
1776
  const showChip = getCellMetaType(sheetId, rowIndex, columnIndex) === "people";
1744
1777
  const [expandable] = getCellGroupingInfo(sheetId, rowIndex, columnIndex);
1745
1778
  const iconSpacing = DEFAULT_CELL_SPACING;
@@ -1789,6 +1822,7 @@ function CanvasGridComponent(props, forwardedRef) {
1789
1822
  getCellGroupingInfo,
1790
1823
  getAdditionalCellSpacing,
1791
1824
  getEffectiveCellFormat,
1825
+ isTableTotalsCell,
1792
1826
  ]);
1793
1827
  /**
1794
1828
  * Column resizer
@@ -2121,6 +2155,101 @@ function CanvasGridComponent(props, forwardedRef) {
2121
2155
  useEffect(() => {
2122
2156
  setInsertOptions(null);
2123
2157
  }, [activeCell.rowIndex, activeCell.columnIndex, sheetId, setInsertOptions]);
2158
+ /**
2159
+ * Excel's AutoCorrect smart tag after a table auto-expanded. "Undo Table
2160
+ * AutoExpansion" resizes the table back to its pre-growth range and clears
2161
+ * what the growth wrote (calculated-column formulas, generated headers,
2162
+ * inherited formats) in one undo step — the user's own value stays, like
2163
+ * Excel; "Stop Automatically Expanding Tables" hands the option to the host.
2164
+ */
2165
+ const handleChooseTableAutoExpansionOption = useCallback((option) => {
2166
+ if (!tableAutoExpansion)
2167
+ return;
2168
+ if (option === "undo") {
2169
+ if (onUndoTableAutoExpansion) {
2170
+ onUndoTableAutoExpansion(tableAutoExpansion);
2171
+ }
2172
+ else {
2173
+ const table = tables?.find((candidate) => candidate.id === tableAutoExpansion.tableId &&
2174
+ candidate.sheetId === tableAutoExpansion.sheetId);
2175
+ if (table) {
2176
+ onResizeTable?.(tableAutoExpansion.sheetId, table, tableAutoExpansion.previousRange);
2177
+ }
2178
+ }
2179
+ }
2180
+ else {
2181
+ onChangeAutoExpandTables?.(false);
2182
+ }
2183
+ setTableAutoExpansion(null);
2184
+ focusSheet();
2185
+ }, [
2186
+ tableAutoExpansion,
2187
+ tables,
2188
+ onResizeTable,
2189
+ onUndoTableAutoExpansion,
2190
+ onChangeAutoExpandTables,
2191
+ setTableAutoExpansion,
2192
+ focusSheet,
2193
+ ]);
2194
+ // The tag survives the commit's own cursor advance (Enter / Tab) and any cell
2195
+ // of the grown table; moving anywhere else, or switching sheet, drops it.
2196
+ useEffect(() => {
2197
+ if (tableAutoExpansion &&
2198
+ !keepsTableAutoExpansionTag(tableAutoExpansion, sheetId, activeCell)) {
2199
+ setTableAutoExpansion(null);
2200
+ }
2201
+ }, [
2202
+ tableAutoExpansion,
2203
+ activeCell.rowIndex,
2204
+ activeCell.columnIndex,
2205
+ activeCell,
2206
+ sheetId,
2207
+ setTableAutoExpansion,
2208
+ ]);
2209
+ /**
2210
+ * Excel's AutoCorrect smart tag after a formula typed into a table column.
2211
+ * "Undo Calculated Column" reverts the fill alone (the typed cell keeps its
2212
+ * formula); "Overwrite all cells in this column with this formula" fills the
2213
+ * column over the cells that kept it from filling; "Stop automatically
2214
+ * creating calculated columns" hands the option to the host.
2215
+ */
2216
+ const handleChooseCalculatedColumnOption = useCallback((option) => {
2217
+ if (!calculatedColumnFill)
2218
+ return;
2219
+ if (option === "undo") {
2220
+ onUndoCalculatedColumn?.(calculatedColumnFill);
2221
+ }
2222
+ else if (option === "overwrite") {
2223
+ onOverwriteCalculatedColumn?.(calculatedColumnFill);
2224
+ }
2225
+ else {
2226
+ onChangeAutoCalculatedColumns?.(false);
2227
+ }
2228
+ setCalculatedColumnFill(null);
2229
+ focusSheet();
2230
+ }, [
2231
+ calculatedColumnFill,
2232
+ onUndoCalculatedColumn,
2233
+ onOverwriteCalculatedColumn,
2234
+ onChangeAutoCalculatedColumns,
2235
+ setCalculatedColumnFill,
2236
+ focusSheet,
2237
+ ]);
2238
+ // The tag survives the commit's own cursor advance and any cell of the
2239
+ // column; moving anywhere else, or switching sheet, drops it.
2240
+ useEffect(() => {
2241
+ if (calculatedColumnFill &&
2242
+ !keepsCalculatedColumnTag(calculatedColumnFill, sheetId, activeCell)) {
2243
+ setCalculatedColumnFill(null);
2244
+ }
2245
+ }, [
2246
+ calculatedColumnFill,
2247
+ activeCell.rowIndex,
2248
+ activeCell.columnIndex,
2249
+ activeCell,
2250
+ sheetId,
2251
+ setCalculatedColumnFill,
2252
+ ]);
2124
2253
  /**
2125
2254
  * Run Excel's Series dialog result: the target range's first row (Series
2126
2255
  * in Columns) / first column (Rows) is the seed line; `stop` may shrink or
@@ -2250,6 +2379,8 @@ function CanvasGridComponent(props, forwardedRef) {
2250
2379
  isColumnHeader,
2251
2380
  isTouchDevice,
2252
2381
  dataRegionBoundaries,
2382
+ tables,
2383
+ onInsertTableRow,
2253
2384
  });
2254
2385
  /**
2255
2386
  * Copy, Paste and Cut hook
@@ -2263,6 +2394,37 @@ function CanvasGridComponent(props, forwardedRef) {
2263
2394
  onCopy,
2264
2395
  onCut,
2265
2396
  });
2397
+ /**
2398
+ * Ctrl+C / Ctrl+X / Ctrl+V / Ctrl+D on a selected chart. The focused chart is
2399
+ * the target of those events (see `EmbedDraggable`); a paste that lands in the
2400
+ * cell editor while a chart is on the clipboard is claimed here first.
2401
+ */
2402
+ const chartClipboard = useChartClipboard({
2403
+ sheetId,
2404
+ activeCell,
2405
+ charts,
2406
+ readonly,
2407
+ onCreateChart,
2408
+ onDeleteChart,
2409
+ onCopyChart,
2410
+ onCutChart,
2411
+ focusSheet,
2412
+ });
2413
+ const { copyChart, cutChart, pasteChart, duplicateChart, clearChartClipboard } = chartClipboard;
2414
+ const handleEditorCopy = useCallback((e) => {
2415
+ clearChartClipboard();
2416
+ onInternalCopy(e);
2417
+ }, [clearChartClipboard, onInternalCopy]);
2418
+ const handleEditorCut = useCallback((e) => {
2419
+ clearChartClipboard();
2420
+ onInternalCut(e);
2421
+ }, [clearChartClipboard, onInternalCut]);
2422
+ const handleEditorPaste = useCallback((e) => {
2423
+ if (pasteChart(e)) {
2424
+ return;
2425
+ }
2426
+ onInternalPaste(e);
2427
+ }, [pasteChart, onInternalPaste]);
2266
2428
  /**
2267
2429
  * Context menu "Insert Cut Cells" (Excel: Ctrl+X, right-click the destination). A cut of
2268
2430
  * whole rows / columns dropped on a row / column header inserts them BEFORE the clicked
@@ -2499,14 +2661,18 @@ function CanvasGridComponent(props, forwardedRef) {
2499
2661
  });
2500
2662
  /**
2501
2663
  * Get bounds of chart overlay
2502
- * Within the grid body
2664
+ * Within the grid body: from the first cell's top-left corner to the last
2665
+ * row's bottom edge and last column's right edge, so an object can never be
2666
+ * dragged or resized past the sheet (Excel snaps it back inside).
2503
2667
  */
2504
2668
  const getChartBounds = useCallback(() => {
2505
2669
  return {
2506
2670
  left: getColumnOffset(1),
2507
2671
  top: getRowOffset(1),
2672
+ right: getColumnOffset(columnCount + 1),
2673
+ bottom: getRowOffset(rowCount + 1),
2508
2674
  };
2509
- }, [getRowOffset, getColumnOffset]);
2675
+ }, [getRowOffset, getColumnOffset, rowCount, columnCount]);
2510
2676
  // Show notes editor
2511
2677
  const onInsertNote = useCallback((sheetId, cell) => {
2512
2678
  setNoteEditorCell({
@@ -2551,11 +2717,38 @@ function CanvasGridComponent(props, forwardedRef) {
2551
2717
  });
2552
2718
  focusSheet();
2553
2719
  }, [setQuickEditState, enableQuickEdit, focusSheet]);
2720
+ /**
2721
+ * Opens the cell editor pre-filled (the totals row's "More Functions…").
2722
+ * `editCell` comes from `useEditable` below; this stable wrapper lets the
2723
+ * context menu reach it.
2724
+ */
2725
+ const requestEditCell = useCallbackRef((targetSheetId, cell, initialValue) => editCell(targetSheetId, cell, initialValue));
2726
+ /**
2727
+ * The context menu's table Select items: replace the selection with a
2728
+ * range and park the active cell at its top-left, without scrolling.
2729
+ */
2730
+ const selectRangeFromMenu = useCallback((targetSheetId, range) => {
2731
+ setActiveCell(targetSheetId, { rowIndex: range.startRowIndex, columnIndex: range.startColumnIndex }, false);
2732
+ onChangeSelections?.(targetSheetId, [{ range }]);
2733
+ }, [setActiveCell, onChangeSelections]);
2734
+ // Excel's table hit zones (header top edge / corner / row left edge).
2735
+ const { cursor: tableHitCursor, onMouseMove: onMouseMoveTableHitZones, onMouseDown: onMouseDownTableHitZones, clearHitZone: clearTableHitZone, } = useTableHitZones({
2736
+ sheetId,
2737
+ tables: activeTables,
2738
+ selections,
2739
+ frozenRows,
2740
+ frozenColumns,
2741
+ getCellCoordsFromOffset,
2742
+ getRelativePositionFromOffset,
2743
+ getCellOffsetFromCoords,
2744
+ getScrollPosition,
2745
+ onSelectRange: selectRangeFromMenu,
2746
+ });
2554
2747
  /**
2555
2748
  * Get context Menu component
2556
2749
  */
2557
2750
  const getContextMenu = useCallback((cell) => {
2558
- return (React.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: insertRowWithOptions, onInsertColumn: insertColumnWithOptions, rowCount: rowCount, columnCount: columnCount, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, hasCutSelection: isCutPending && copiedSheetId === sheetId, onInsertCutCells: insertCutCellsFromMenu, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, onRequestAddWatch: requestAddWatch, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onGoalSeek: onGoalSeek, onSubtotal: onSubtotal, onAdvancedFilter: onAdvancedFilter, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
2751
+ return (React.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: insertRowWithOptions, onInsertColumn: insertColumnWithOptions, rowCount: rowCount, columnCount: columnCount, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, hasCutSelection: isCutPending && copiedSheetId === sheetId, onInsertCutCells: insertCutCellsFromMenu, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, onRequestAddWatch: requestAddWatch, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestResizeTable: onRequestResizeTable, onRequestInsertSlicer: onRequestInsertSlicer, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onRequestCreatePivotChart: onRequestCreatePivotChart, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onRequestCreateTable: onRequestCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onUpdateTable: onUpdateTable, onRequestEditCell: requestEditCell, onSelectRange: selectRangeFromMenu, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onGoalSeek: onGoalSeek, onSubtotal: onSubtotal, onAdvancedFilter: onAdvancedFilter, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
2559
2752
  }, [
2560
2753
  isRestricted,
2561
2754
  activeCell,
@@ -2606,6 +2799,8 @@ function CanvasGridComponent(props, forwardedRef) {
2606
2799
  onFilterTable,
2607
2800
  onSortTable,
2608
2801
  onRequestEditTable,
2802
+ onRequestResizeTable,
2803
+ onRequestInsertSlicer,
2609
2804
  onRequestEditPivotTable,
2610
2805
  onRemoveTable,
2611
2806
  onRequestFormatCells,
@@ -2614,8 +2809,12 @@ function CanvasGridComponent(props, forwardedRef) {
2614
2809
  onRequestDataValidation,
2615
2810
  onCreateBasicFilter,
2616
2811
  onCreateTable,
2812
+ onRequestCreateTable,
2617
2813
  onDeleteTableColumn,
2618
2814
  onInsertTableRow,
2815
+ onUpdateTable,
2816
+ requestEditCell,
2817
+ selectRangeFromMenu,
2619
2818
  getFormattedValue,
2620
2819
  getFormattedValuesFromRange,
2621
2820
  onInsertTableColumn,
@@ -2631,6 +2830,7 @@ function CanvasGridComponent(props, forwardedRef) {
2631
2830
  onChange,
2632
2831
  getCellData,
2633
2832
  onRequestDeletePivotTable,
2833
+ onRequestCreatePivotChart,
2634
2834
  isHiddenColumn,
2635
2835
  isHiddenRow,
2636
2836
  onShowColumn,
@@ -2694,6 +2894,7 @@ function CanvasGridComponent(props, forwardedRef) {
2694
2894
  onUndo,
2695
2895
  onRedo,
2696
2896
  onCreateTable,
2897
+ onRequestCreateTable,
2697
2898
  onCreateBasicFilter,
2698
2899
  clearCopiedSelections,
2699
2900
  onRequestSearch,
@@ -2780,9 +2981,11 @@ function CanvasGridComponent(props, forwardedRef) {
2780
2981
  scrollToCell,
2781
2982
  containerWidth: width,
2782
2983
  containerHeight: height,
2783
- onCopy: onInternalCopy,
2784
- onPaste: onInternalPaste,
2785
- onCut: onInternalCut,
2984
+ onCopy: handleEditorCopy,
2985
+ onPaste: handleEditorPaste,
2986
+ onCut: handleEditorCut,
2987
+ tables,
2988
+ onInsertTableRow,
2786
2989
  });
2787
2990
  /**
2788
2991
  * Move rows and columns
@@ -2925,7 +3128,7 @@ function CanvasGridComponent(props, forwardedRef) {
2925
3128
  /**
2926
3129
  * Displays resizable/draggable charts
2927
3130
  */
2928
- const { chartComponents, embedComponents, slicerComponents, onMouseDown: onMouseDownCharts, } = useEmbedsCharts({
3131
+ const { chartComponents, embedComponents, slicerComponents, contextMenuComponent: embedContextMenuComponent, onMouseDown: onMouseDownCharts, requestChartContextMenu, } = useEmbedsCharts({
2929
3132
  charts,
2930
3133
  embeds,
2931
3134
  slicers,
@@ -2936,14 +3139,20 @@ function CanvasGridComponent(props, forwardedRef) {
2936
3139
  getCellOffsetFromCoords,
2937
3140
  getAbsolutePositionFromOffset,
2938
3141
  getCellCoordsFromOffset,
3142
+ getRelativePositionFromOffset,
2939
3143
  getScrollPosition,
3144
+ ContextMenuWrapper,
3145
+ focusSheet,
2940
3146
  selectedColor: chartSelectedColor,
2941
3147
  onMoveChart,
2942
3148
  onResizeChart,
3149
+ chartClipboard,
2943
3150
  onMoveEmbed,
2944
3151
  onResizeEmbed,
2945
3152
  onDeleteEmbed,
2946
3153
  onDeleteChart,
3154
+ onUpdateChart,
3155
+ onChangeZOrder,
2947
3156
  onRequestEditEmbed,
2948
3157
  onMoveSlicer,
2949
3158
  onResizeSlicer,
@@ -3013,6 +3222,55 @@ function CanvasGridComponent(props, forwardedRef) {
3013
3222
  onExpandCollapse?.(sheetId, cell, groupKeys, newExpandedState, childrenCount);
3014
3223
  }
3015
3224
  }, [onExpandCollapse, getCellGroupKeys, getChildrenCount]);
3225
+ /**
3226
+ * The totals-function picker a totals cell's in-cell arrow opens (Excel):
3227
+ * anchored at the cell's bottom-right corner like the filter dropdown.
3228
+ */
3229
+ const [totalsPicker, setTotalsPicker] = useState(null);
3230
+ const closeTotalsPicker = useCallback(() => setTotalsPicker(null), []);
3231
+ const handleTotalsArrowClick = useCallback((cell) => {
3232
+ const table = activeTables?.find((candidate) => candidate.totalRow &&
3233
+ cell.rowIndex === candidate.range.endRowIndex &&
3234
+ isCellWithinBounds(cell, candidate.range));
3235
+ const cellPosition = getCellOffsetFromCoords(cell);
3236
+ const scrollPosition = getScrollPosition();
3237
+ if (!table || !cellPosition) {
3238
+ return;
3239
+ }
3240
+ const { x = 0, y = 0, width = 0, height = 0 } = cellPosition;
3241
+ const scrollX = isFrozenColumn(cell.columnIndex)
3242
+ ? 0
3243
+ : scrollPosition.scrollLeft;
3244
+ const scrollY = isFrozenRow(cell.rowIndex) ? 0 : scrollPosition.scrollTop;
3245
+ setActiveCell(sheetId, cell, false);
3246
+ setTotalsPicker({
3247
+ table,
3248
+ cell,
3249
+ left: x + width - scrollX,
3250
+ top: y + height - scrollY,
3251
+ });
3252
+ }, [
3253
+ activeTables,
3254
+ getCellOffsetFromCoords,
3255
+ getScrollPosition,
3256
+ isFrozenColumn,
3257
+ isFrozenRow,
3258
+ setActiveCell,
3259
+ sheetId,
3260
+ ]);
3261
+ const totalsPickerComponent = totalsPicker ? (React.createElement(StyledContextMenuWrapper, { style: {
3262
+ transform: `translate3d(${totalsPicker.left}px, ${totalsPicker.top}px, 0)`,
3263
+ } },
3264
+ React.createElement(ContextMenuDropdown, { isOpen: true, onOpenChange: (open) => {
3265
+ if (!open)
3266
+ closeTotalsPicker();
3267
+ } },
3268
+ React.createElement(DropdownMenuPortal, null,
3269
+ React.createElement(DropdownMenuContent, { align: "end", sideOffset: 0, onCloseAutoFocus: (event) => {
3270
+ event.preventDefault();
3271
+ focusSheet();
3272
+ }, onMouseMove: (e) => e.stopPropagation() },
3273
+ React.createElement(TotalRowFunctionMenuItems, { sheetId: sheetId, table: totalsPicker.table, cell: totalsPicker.cell, readonly: readonly, getCellData: getCellData, onChange: onChange, onClearContents: onClearContents, onUpdateTable: onUpdateTable, onRequestEditCell: requestEditCell })))))) : null;
3016
3274
  /**
3017
3275
  * Capture mouse move events
3018
3276
  */
@@ -3023,8 +3281,10 @@ function CanvasGridComponent(props, forwardedRef) {
3023
3281
  isDraggingHeader ||
3024
3282
  isSelectionInProgress ||
3025
3283
  isFilling) {
3284
+ clearTableHitZone();
3026
3285
  return;
3027
3286
  }
3287
+ onMouseMoveTableHitZones(e);
3028
3288
  const coords = getCellCoordsFromOffset(e.clientX, e.clientY);
3029
3289
  if (!coords || isEqualCells(hoveredCellRef.current, coords)) {
3030
3290
  return;
@@ -3038,6 +3298,8 @@ function CanvasGridComponent(props, forwardedRef) {
3038
3298
  isSelectionInProgress,
3039
3299
  isFilling,
3040
3300
  hoveredCellRef,
3301
+ onMouseMoveTableHitZones,
3302
+ clearTableHitZone,
3041
3303
  ]);
3042
3304
  // Mouse move throttler
3043
3305
  const mouseMoveThrottler = useCallbackRef(throttle(handleMouseMove, mouseMoveThrottleTimeout, {
@@ -3074,8 +3336,12 @@ function CanvasGridComponent(props, forwardedRef) {
3074
3336
  selectionMode: "append",
3075
3337
  }));
3076
3338
  }
3077
- // Pass it on to use selection hook
3078
- onMouseDownSelection(e);
3339
+ // A table hit zone (header edge / corner / row edge) selects the table
3340
+ // part instead of starting a cell selection.
3341
+ if (!onMouseDownTableHitZones(e)) {
3342
+ // Pass it on to use selection hook
3343
+ onMouseDownSelection(e);
3344
+ }
3079
3345
  // Charts
3080
3346
  onMouseDownCharts?.();
3081
3347
  /**
@@ -3087,6 +3353,7 @@ function CanvasGridComponent(props, forwardedRef) {
3087
3353
  }
3088
3354
  // Hide filter
3089
3355
  hideFilter();
3356
+ closeTotalsPicker();
3090
3357
  // Hide popover
3091
3358
  hideCellPopover();
3092
3359
  // Hide paste mnenu
@@ -3097,8 +3364,10 @@ function CanvasGridComponent(props, forwardedRef) {
3097
3364
  onUnpinTooltip();
3098
3365
  }, [
3099
3366
  onMouseDownSelection,
3367
+ onMouseDownTableHitZones,
3100
3368
  onRequestCloseContextMenu,
3101
3369
  hideFilter,
3370
+ closeTotalsPicker,
3102
3371
  onMouseDownCharts,
3103
3372
  formulaMode,
3104
3373
  setFormulaState,
@@ -3224,6 +3493,8 @@ function CanvasGridComponent(props, forwardedRef) {
3224
3493
  */
3225
3494
  const [cellBackgroundRenderer, cellRenderer, cellOverlayRenderer, headerCellRenderer,] = useCellRenderer({
3226
3495
  sheetId,
3496
+ isTableTotalsCell,
3497
+ onTotalsArrowClick: handleTotalsArrowClick,
3227
3498
  formulaLocale,
3228
3499
  showGridLines,
3229
3500
  scale,
@@ -3262,6 +3533,7 @@ function CanvasGridComponent(props, forwardedRef) {
3262
3533
  getNote,
3263
3534
  getComment,
3264
3535
  getEffectiveValue,
3536
+ getSparklineGroup,
3265
3537
  getFormattedValue,
3266
3538
  getCellImageUrl,
3267
3539
  getEffectiveCellFormat,
@@ -3333,6 +3605,20 @@ function CanvasGridComponent(props, forwardedRef) {
3333
3605
  scrollToCell,
3334
3606
  tokenizer: localeTokenizer,
3335
3607
  });
3608
+ /**
3609
+ * Selected chart: outline its source ranges on this sheet and re-bind
3610
+ * them when a corner handle is dragged (Excel's chart data highlight).
3611
+ */
3612
+ const { chartSourceBorderStyles, onMouseDownChartSourceResizeHandle } = useChartSourceRanges({
3613
+ charts,
3614
+ sheetId,
3615
+ getSheetName,
3616
+ readonly,
3617
+ onUpdateChart,
3618
+ getCellBounds,
3619
+ getCellCoordsFromOffset,
3620
+ scrollToCell,
3621
+ });
3336
3622
  /**
3337
3623
  * Hide fill handle
3338
3624
  * 1. When user is in edit mode
@@ -3365,6 +3651,7 @@ function CanvasGridComponent(props, forwardedRef) {
3365
3651
  isFillShrink: fillShrink !== undefined,
3366
3652
  onSelectionMouseDown: onSelectionElementMouseDown,
3367
3653
  onMouseDownResizeHandle: onMouseDownResizeHandle,
3654
+ onMouseDownChartSourceResizeHandle,
3368
3655
  onMouseDownMoveSelection: onMouseDownMoveSelection,
3369
3656
  isDraggingMoveSelection: isDraggingMoveSelection,
3370
3657
  onChangeActiveCell,
@@ -3397,6 +3684,12 @@ function CanvasGridComponent(props, forwardedRef) {
3397
3684
  onCloseFillOptions: handleCloseFillOptions,
3398
3685
  insertOptions,
3399
3686
  onChooseInsertOption: handleChooseInsertOption,
3687
+ tableAutoExpansion,
3688
+ canStopAutoExpandingTables: !!onChangeAutoExpandTables,
3689
+ onChooseTableAutoExpansionOption: handleChooseTableAutoExpansionOption,
3690
+ calculatedColumnFill,
3691
+ canStopAutoCalculatedColumns: !!onChangeAutoCalculatedColumns,
3692
+ onChooseCalculatedColumnOption: handleChooseCalculatedColumnOption,
3400
3693
  hoveredCell: delayedHoveredCell,
3401
3694
  onRemoveQuickEdit,
3402
3695
  onAddQuickEdit,
@@ -3431,6 +3724,10 @@ function CanvasGridComponent(props, forwardedRef) {
3431
3724
  agentSuggestions,
3432
3725
  quickEditValues,
3433
3726
  });
3727
+ // A selected chart's source outlines draw on top of the other range borders.
3728
+ const gridBorderStyles = useMemo(() => chartSourceBorderStyles.length
3729
+ ? [...finalBorderStyles, ...chartSourceBorderStyles]
3730
+ : finalBorderStyles, [finalBorderStyles, chartSourceBorderStyles]);
3434
3731
  // Hidden column markers
3435
3732
  const [hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers,] = useHiddenDimensionMarkers({
3436
3733
  sheetId,
@@ -3558,6 +3855,7 @@ function CanvasGridComponent(props, forwardedRef) {
3558
3855
  getNextFocusableCell,
3559
3856
  onEditorKeyDown,
3560
3857
  scrollToCell,
3858
+ scrollToChart,
3561
3859
  scrollToBottom,
3562
3860
  focusSheet,
3563
3861
  canEditCell,
@@ -3717,6 +4015,10 @@ function CanvasGridComponent(props, forwardedRef) {
3717
4015
  scrollToCell,
3718
4016
  commit,
3719
4017
  openFillSeriesDialog: () => openFillSeriesDialogForRef.current?.(),
4018
+ copyChart,
4019
+ cutChart,
4020
+ pasteChart,
4021
+ duplicateChart,
3720
4022
  };
3721
4023
  setSpreadsheetApi(new SpreadsheetApi(propsReferenceRef, stableMethods, store, instanceStore, instanceId));
3722
4024
  }, []);
@@ -3781,6 +4083,13 @@ function CanvasGridComponent(props, forwardedRef) {
3781
4083
  * in formula mode
3782
4084
  */
3783
4085
  const enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
4086
+ // A chartsheet IS its chart: no grid, headers, editor or cell menus — only the chart and its
4087
+ // context menu (Excel).
4088
+ if (sheetType === "chartsheet") {
4089
+ return (React.createElement("div", { className: cn("rnc-canvas-wrapper after:box-border before:box-border [&_*]:box-border flex min-h-0 min-w-0 relative z-[1] flex-1 bg-rnc-background", className), ref: gridContainerRef, role: "application", "aria-label": "Chart sheet", ...rest },
4090
+ React.createElement(ChartSheetViewComponent, { sheetId: sheetId, chart: charts?.find((chart) => chart.position?.sheetId === sheetId), width: width, height: height, theme: theme, backgroundColor: cellBackgroundColor, readonly: readonly, getChartComponent: getChartComponent, onDeleteChart: onDeleteChart, onUpdateChart: onUpdateChart, onRequestContextMenu: requestChartContextMenu }),
4091
+ embedContextMenuComponent));
4092
+ }
3784
4093
  return (React.createElement("div", { className: cn("rnc-canvas-wrapper after:box-border before:box-border [&_*]:box-border flex min-h-0 min-w-0 relative z-[1] flex-1 bg-rnc-background", className), ref: gridContainerRef,
3785
4094
  // The grid paints to <canvas>, so there is no per-cell DOM for a screen
3786
4095
  // reader to traverse. role="application" passes keystrokes through to our
@@ -3795,11 +4104,11 @@ function CanvasGridComponent(props, forwardedRef) {
3795
4104
  // Bind to outer container, so it always takes
3796
4105
  // priority over other components
3797
4106
  // generated by hooks
3798
- onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest },
4107
+ onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest, style: tableHitCursor ? { ...rest.style, cursor: tableHitCursor } : rest.style },
3799
4108
  width === 0 || height === 0 ? (React.createElement("div", { className: "flex border-solid border-rnc-border border border-t border-b flex-1 justify-center items-center" },
3800
4109
  React.createElement("div", { className: "space-y-2" },
3801
4110
  React.createElement(Skeleton, { className: "h-4 w-[250px]" }),
3802
- React.createElement(Skeleton, { className: "h-4 w-[250px]" })))) : (React.createElement(BaseGrid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: finalBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: FillHandle, showFillHandle: showFillHandle, fillHandleSize: fillHandleSize, showGridLines: showGridLines, enableCellOverlay: true, enableCellBackground: true, enableSelectionDrag: enableSelectionDrag, showFrozenColumnShadow: showFrozenSeparator, showFrozenRowShadow: showFrozenSeparator, selectionBorderColor: selectionBorderColor, selectionBackgroundColor: selectionBackgroundColor, fillhandleBorderColor: cellBackgroundColor, isDraggingSelection: isDragging, fillSelection: fillShrinkOverlay ?? fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
4111
+ React.createElement(Skeleton, { className: "h-4 w-[250px]" })))) : (React.createElement(BaseGrid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: gridBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: FillHandle, showFillHandle: showFillHandle, fillHandleSize: fillHandleSize, showGridLines: showGridLines, enableCellOverlay: true, enableCellBackground: true, enableSelectionDrag: enableSelectionDrag, showFrozenColumnShadow: showFrozenSeparator, showFrozenRowShadow: showFrozenSeparator, selectionBorderColor: selectionBorderColor, selectionBackgroundColor: selectionBackgroundColor, fillhandleBorderColor: cellBackgroundColor, isDraggingSelection: isDragging, fillSelection: fillShrinkOverlay ?? fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
3803
4112
  // Dimension of fill handle
3804
4113
  scrollToCellOffset: 4, scrollbarSize: scrollbarSize, isHiddenCell: isHiddenCell, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, visibleRowRanges: visibleRowRanges, isHiddenOverlay: isHiddenOverlay, isHiddenBackground: isHiddenBackground, overlayRenderer: cellOverlayRenderer, backgroundRenderer: cellBackgroundRenderer, shadowSettings: shadowSettings, onScroll: handleScroll, onViewPortChange: handleViewPortChange, autoFocus: autoFocus, snap: scrollSnap, scrollThrottleTimeout: scrollThrottleTimeout, preventBrowserDefaultScroll: preventBrowserDefaultScroll, showHeaders: showHeaders, gridChildren: gridChildren, onTouchStart: onTouchStart, onDimensionsChange: onDimensionsChange, extendScrollSize: isTouchDevice || isFirefox, isTouchDevice: isTouchDevice, frozenShadowThickness: frozenShadowThickness, onAfterScrollToCell: onAfterScrollToCell, estimatedRowHeight: defaultRowHeight, estimatedColumnWidth: defaultColumnWidth, footerHeight: footerHeight, footerComponent: footerComponent, getOverflowBuffer: getOverflowBuffer, getFrozenColumnOverflowCells: getFrozenColumnOverflowCells })),
3805
4114
  tooltipComponent,
@@ -3807,7 +4116,9 @@ function CanvasGridComponent(props, forwardedRef) {
3807
4116
  draggableColumns,
3808
4117
  draggableRows,
3809
4118
  contextMenuComponent,
4119
+ embedContextMenuComponent,
3810
4120
  filterComponent,
4121
+ totalsPickerComponent,
3811
4122
  headerResizer,
3812
4123
  validatorResult,
3813
4124
  React.createElement("div", { "aria-live": "polite", "aria-atomic": "true", style: {