@rowsncolumns/spreadsheet 10.3.1 → 10.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
  2. package/dist/cjs/api/banded-ranges.js +40 -14
  3. package/dist/cjs/api/calculated-column-fill.d.ts +43 -0
  4. package/dist/cjs/api/calculated-column-fill.d.ts.map +1 -0
  5. package/dist/cjs/api/calculated-column-fill.js +16 -0
  6. package/dist/cjs/api/chart-sheet.d.ts +8 -0
  7. package/dist/cjs/api/chart-sheet.d.ts.map +1 -0
  8. package/dist/cjs/api/chart-sheet.js +20 -0
  9. package/dist/cjs/api/chart-source-ranges.d.ts +64 -0
  10. package/dist/cjs/api/chart-source-ranges.d.ts.map +1 -0
  11. package/dist/cjs/api/chart-source-ranges.js +175 -0
  12. package/dist/cjs/api/selections.d.ts +3 -3
  13. package/dist/cjs/api/selections.d.ts.map +1 -1
  14. package/dist/cjs/api/selections.js +28 -2
  15. package/dist/cjs/api/spreadsheet-api.d.ts +16 -3
  16. package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
  17. package/dist/cjs/api/spreadsheet-api.js +22 -2
  18. package/dist/cjs/api/table-auto-expansion.d.ts +37 -0
  19. package/dist/cjs/api/table-auto-expansion.d.ts.map +1 -0
  20. package/dist/cjs/api/table-auto-expansion.js +16 -0
  21. package/dist/cjs/api/table.d.ts +49 -1
  22. package/dist/cjs/api/table.d.ts.map +1 -1
  23. package/dist/cjs/api/table.js +145 -1
  24. package/dist/cjs/api/validation.d.ts +26 -1
  25. package/dist/cjs/api/validation.d.ts.map +1 -1
  26. package/dist/cjs/api/validation.js +127 -9
  27. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts +15 -0
  28. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  29. package/dist/cjs/atoms/calculated-column-fill.atom.js +18 -0
  30. package/dist/cjs/atoms/chart-actions.atom.d.ts +40 -0
  31. package/dist/cjs/atoms/chart-actions.atom.d.ts.map +1 -0
  32. package/dist/cjs/atoms/chart-actions.atom.js +66 -0
  33. package/dist/cjs/atoms/index.d.ts +5 -0
  34. package/dist/cjs/atoms/index.d.ts.map +1 -1
  35. package/dist/cjs/atoms/index.js +5 -0
  36. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts +28 -0
  37. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  38. package/dist/cjs/atoms/move-chart-dialog.atom.js +34 -0
  39. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +9 -1
  40. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  41. package/dist/cjs/atoms/selected-chart-embed.atom.js +18 -1
  42. package/dist/cjs/atoms/selected-chart-series.atom.d.ts +24 -0
  43. package/dist/cjs/atoms/selected-chart-series.atom.d.ts.map +1 -0
  44. package/dist/cjs/atoms/selected-chart-series.atom.js +11 -0
  45. package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
  46. package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
  47. package/dist/cjs/atoms/sheet-context.atom.js +5 -2
  48. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts +34 -0
  49. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  50. package/dist/cjs/atoms/sparkline-dialog.atom.js +30 -0
  51. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts +14 -0
  52. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  53. package/dist/cjs/atoms/table-auto-expansion.atom.js +17 -0
  54. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts +25 -0
  55. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  56. package/dist/cjs/components/calculated-column-smart-tag/index.js +31 -0
  57. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  58. package/dist/cjs/components/canvas-grid/index.js +393 -72
  59. package/dist/cjs/components/canvas-grid/typings.d.ts +127 -14
  60. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  61. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  62. package/dist/cjs/components/cell/index.js +3 -3
  63. package/dist/cjs/components/cell/typings.d.ts +13 -0
  64. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  65. package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
  66. package/dist/cjs/components/cell-filter/index.js +13 -2
  67. package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  68. package/dist/cjs/components/cell-input/formula-bar-cell-input.js +4 -1
  69. package/dist/cjs/components/cell-structured/sparkline-math.d.ts +28 -5
  70. package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
  71. package/dist/cjs/components/cell-structured/sparkline-math.js +93 -5
  72. package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
  73. package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
  74. package/dist/cjs/components/cell-structured/sparkline.js +3 -3
  75. package/dist/cjs/components/cell-structured/types.d.ts +1 -1
  76. package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
  77. package/dist/cjs/components/chart-sheet-view/index.d.ts +27 -0
  78. package/dist/cjs/components/chart-sheet-view/index.d.ts.map +1 -0
  79. package/dist/cjs/components/chart-sheet-view/index.js +35 -0
  80. package/dist/cjs/components/context-menu/embed-context-menu.d.ts +48 -0
  81. package/dist/cjs/components/context-menu/embed-context-menu.d.ts.map +1 -0
  82. package/dist/cjs/components/context-menu/embed-context-menu.js +123 -0
  83. package/dist/cjs/components/context-menu/index.d.ts +23 -2
  84. package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
  85. package/dist/cjs/components/context-menu/index.js +217 -39
  86. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts +33 -0
  87. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  88. package/dist/cjs/components/context-menu/total-row-function-menu.js +58 -0
  89. package/dist/cjs/components/context-menu/total-row-functions.d.ts +12 -12
  90. package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -1
  91. package/dist/cjs/components/context-menu/total-row-functions.js +39 -39
  92. package/dist/cjs/components/embeds/chart-component.d.ts +17 -0
  93. package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -1
  94. package/dist/cjs/components/embeds/embed-draggable.d.ts +61 -4
  95. package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
  96. package/dist/cjs/components/embeds/embed-draggable.js +214 -39
  97. package/dist/cjs/components/filter-box/date-tree.d.ts +28 -0
  98. package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -0
  99. package/dist/cjs/components/filter-box/date-tree.js +147 -0
  100. package/dist/cjs/components/filter-box/filter-by-condition.d.ts +14 -2
  101. package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
  102. package/dist/cjs/components/filter-box/filter-by-condition.js +95 -19
  103. package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -1
  104. package/dist/cjs/components/filter-box/filter-by-value.js +126 -40
  105. package/dist/cjs/components/filter-box/index.d.ts +7 -1
  106. package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
  107. package/dist/cjs/components/filter-box/index.js +102 -11
  108. package/dist/cjs/components/move-chart-dialog/index.d.ts +34 -0
  109. package/dist/cjs/components/move-chart-dialog/index.d.ts.map +1 -0
  110. package/dist/cjs/components/move-chart-dialog/index.js +96 -0
  111. package/dist/cjs/components/print-preview/page-block.d.ts +9 -1
  112. package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -1
  113. package/dist/cjs/components/print-preview/page-block.js +28 -2
  114. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +8 -1
  115. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  116. package/dist/cjs/components/print-preview/print-preview-dialog.js +144 -3
  117. package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -1
  118. package/dist/cjs/components/print-preview/run-print.js +19 -7
  119. package/dist/cjs/components/print-preview/use-page-layout.d.ts +47 -0
  120. package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -1
  121. package/dist/cjs/components/print-preview/use-page-layout.js +81 -7
  122. package/dist/cjs/components/selection/index.d.ts +1 -1
  123. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  124. package/dist/cjs/components/selection/index.js +6 -2
  125. package/dist/cjs/components/selection/types.d.ts +15 -0
  126. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  127. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  128. package/dist/cjs/components/sheet-tabs/index.js +2 -2
  129. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
  130. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  131. package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
  132. package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
  133. package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
  134. package/dist/cjs/components/sparkline-dialog/index.js +127 -0
  135. package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
  136. package/dist/cjs/components/subtotal-dialog/index.js +10 -1
  137. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  138. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  139. package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
  140. package/dist/cjs/components/toolbar/index.d.ts +1 -0
  141. package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
  142. package/dist/cjs/components/toolbar/index.js +1 -0
  143. package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
  144. package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
  145. package/dist/cjs/components/toolbar/insert-menu.js +24 -1
  146. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
  147. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  148. package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
  149. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
  150. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
  151. package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
  152. package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
  153. package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
  154. package/dist/cjs/components/toolbar/table-actions.js +17 -7
  155. package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
  156. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  157. package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
  158. package/dist/cjs/config.d.ts +2 -0
  159. package/dist/cjs/config.d.ts.map +1 -1
  160. package/dist/cjs/config.js +31 -1
  161. package/dist/cjs/helpers.d.ts +1 -1
  162. package/dist/cjs/helpers.d.ts.map +1 -1
  163. package/dist/cjs/helpers.js +13 -2
  164. package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
  165. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  166. package/dist/cjs/hooks/use-cell-renderer.js +20 -8
  167. package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
  168. package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
  169. package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
  170. package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
  171. package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
  172. package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
  173. package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
  174. package/dist/cjs/hooks/use-context-setter.js +3 -1
  175. package/dist/cjs/hooks/use-editable.d.ts +9 -1
  176. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  177. package/dist/cjs/hooks/use-editable.js +25 -1
  178. package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
  179. package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-embeds-charts.js +412 -41
  181. package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
  182. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  183. package/dist/cjs/hooks/use-grid-children.js +12 -6
  184. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  185. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
  187. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  188. package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
  189. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
  190. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  191. package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
  192. package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
  193. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  194. package/dist/cjs/hooks/use-selection-renderer.js +37 -7
  195. package/dist/cjs/hooks/use-selection.d.ts +9 -1
  196. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  197. package/dist/cjs/hooks/use-selection.js +118 -30
  198. package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
  199. package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
  200. package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
  201. package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
  202. package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
  203. package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
  204. package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
  205. package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
  206. package/dist/cjs/hooks/use-table-resizer.js +22 -10
  207. package/dist/cjs/index.d.ts +13 -0
  208. package/dist/cjs/index.d.ts.map +1 -1
  209. package/dist/cjs/index.js +17 -1
  210. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  211. package/dist/cjs/types.d.ts +289 -4
  212. package/dist/cjs/types.d.ts.map +1 -1
  213. package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
  214. package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
  215. package/dist/cjs/utils/copy-as-picture.js +70 -0
  216. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
  217. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  218. package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
  219. package/dist/cjs/utils/z-order.d.ts +47 -0
  220. package/dist/cjs/utils/z-order.d.ts.map +1 -0
  221. package/dist/cjs/utils/z-order.js +124 -0
  222. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  223. package/dist/esm/api/banded-ranges.js +39 -12
  224. package/dist/esm/api/calculated-column-fill.d.ts +43 -0
  225. package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
  226. package/dist/esm/api/calculated-column-fill.js +10 -0
  227. package/dist/esm/api/chart-sheet.d.ts +8 -0
  228. package/dist/esm/api/chart-sheet.d.ts.map +1 -0
  229. package/dist/esm/api/chart-sheet.js +15 -0
  230. package/dist/esm/api/chart-source-ranges.d.ts +64 -0
  231. package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
  232. package/dist/esm/api/chart-source-ranges.js +168 -0
  233. package/dist/esm/api/selections.d.ts +3 -3
  234. package/dist/esm/api/selections.d.ts.map +1 -1
  235. package/dist/esm/api/selections.js +26 -2
  236. package/dist/esm/api/spreadsheet-api.d.ts +16 -3
  237. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  238. package/dist/esm/api/spreadsheet-api.js +18 -2
  239. package/dist/esm/api/table-auto-expansion.d.ts +37 -0
  240. package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
  241. package/dist/esm/api/table-auto-expansion.js +10 -0
  242. package/dist/esm/api/table.d.ts +49 -1
  243. package/dist/esm/api/table.d.ts.map +1 -1
  244. package/dist/esm/api/table.js +138 -1
  245. package/dist/esm/api/validation.d.ts +26 -1
  246. package/dist/esm/api/validation.d.ts.map +1 -1
  247. package/dist/esm/api/validation.js +119 -9
  248. package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
  249. package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  250. package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
  251. package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
  252. package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
  253. package/dist/esm/atoms/chart-actions.atom.js +58 -0
  254. package/dist/esm/atoms/index.d.ts +5 -0
  255. package/dist/esm/atoms/index.d.ts.map +1 -1
  256. package/dist/esm/atoms/index.js +5 -0
  257. package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
  258. package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  259. package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
  260. package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
  261. package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  262. package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
  263. package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
  264. package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
  265. package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
  266. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  267. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  268. package/dist/esm/atoms/sheet-context.atom.js +2 -0
  269. package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
  270. package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  271. package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
  272. package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
  273. package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  274. package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
  275. package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
  276. package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  277. package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
  278. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  279. package/dist/esm/components/canvas-grid/index.js +332 -21
  280. package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
  281. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  282. package/dist/esm/components/cell/index.d.ts.map +1 -1
  283. package/dist/esm/components/cell/index.js +3 -3
  284. package/dist/esm/components/cell/typings.d.ts +13 -0
  285. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  286. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  287. package/dist/esm/components/cell-filter/index.js +14 -3
  288. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  289. package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
  290. package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
  291. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  292. package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
  293. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  294. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  295. package/dist/esm/components/cell-structured/sparkline.js +3 -3
  296. package/dist/esm/components/cell-structured/types.d.ts +1 -1
  297. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  298. package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
  299. package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
  300. package/dist/esm/components/chart-sheet-view/index.js +30 -0
  301. package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
  302. package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
  303. package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
  304. package/dist/esm/components/context-menu/index.d.ts +23 -2
  305. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  306. package/dist/esm/components/context-menu/index.js +174 -38
  307. package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
  308. package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  309. package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
  310. package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
  311. package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
  312. package/dist/esm/components/context-menu/total-row-functions.js +29 -31
  313. package/dist/esm/components/embeds/chart-component.d.ts +17 -0
  314. package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
  315. package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
  316. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  317. package/dist/esm/components/embeds/embed-draggable.js +204 -45
  318. package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
  319. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
  320. package/dist/esm/components/filter-box/date-tree.js +107 -0
  321. package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
  322. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  323. package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
  324. package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
  325. package/dist/esm/components/filter-box/filter-by-value.js +110 -39
  326. package/dist/esm/components/filter-box/index.d.ts +7 -1
  327. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  328. package/dist/esm/components/filter-box/index.js +88 -2
  329. package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
  330. package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
  331. package/dist/esm/components/move-chart-dialog/index.js +88 -0
  332. package/dist/esm/components/print-preview/page-block.d.ts +9 -1
  333. package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
  334. package/dist/esm/components/print-preview/page-block.js +27 -2
  335. package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
  336. package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  337. package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
  338. package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
  339. package/dist/esm/components/print-preview/run-print.js +17 -7
  340. package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
  341. package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
  342. package/dist/esm/components/print-preview/use-page-layout.js +55 -0
  343. package/dist/esm/components/selection/index.d.ts +1 -1
  344. package/dist/esm/components/selection/index.d.ts.map +1 -1
  345. package/dist/esm/components/selection/index.js +6 -2
  346. package/dist/esm/components/selection/types.d.ts +15 -0
  347. package/dist/esm/components/selection/types.d.ts.map +1 -1
  348. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  349. package/dist/esm/components/sheet-tabs/index.js +2 -2
  350. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
  351. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  352. package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
  353. package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
  354. package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
  355. package/dist/esm/components/sparkline-dialog/index.js +123 -0
  356. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
  357. package/dist/esm/components/subtotal-dialog/index.js +10 -1
  358. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  359. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  360. package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
  361. package/dist/esm/components/toolbar/index.d.ts +1 -0
  362. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  363. package/dist/esm/components/toolbar/index.js +1 -0
  364. package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
  365. package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
  366. package/dist/esm/components/toolbar/insert-menu.js +24 -1
  367. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
  368. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  369. package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
  370. package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
  371. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
  372. package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
  373. package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
  374. package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
  375. package/dist/esm/components/toolbar/table-actions.js +15 -7
  376. package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
  377. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  378. package/dist/esm/components/toolbar/table-style-selector.js +210 -399
  379. package/dist/esm/config.d.ts +2 -0
  380. package/dist/esm/config.d.ts.map +1 -1
  381. package/dist/esm/config.js +30 -0
  382. package/dist/esm/helpers.d.ts +1 -1
  383. package/dist/esm/helpers.d.ts.map +1 -1
  384. package/dist/esm/helpers.js +12 -1
  385. package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
  386. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  387. package/dist/esm/hooks/use-cell-renderer.js +14 -4
  388. package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
  389. package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
  390. package/dist/esm/hooks/use-chart-clipboard.js +213 -0
  391. package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
  392. package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
  393. package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
  394. package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
  395. package/dist/esm/hooks/use-context-setter.js +3 -1
  396. package/dist/esm/hooks/use-editable.d.ts +9 -1
  397. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  398. package/dist/esm/hooks/use-editable.js +25 -1
  399. package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
  400. package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
  401. package/dist/esm/hooks/use-embeds-charts.js +394 -39
  402. package/dist/esm/hooks/use-grid-children.d.ts +2 -2
  403. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  404. package/dist/esm/hooks/use-grid-children.js +8 -2
  405. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  406. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  407. package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
  408. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  409. package/dist/esm/hooks/use-keyboard-handler.js +8 -2
  410. package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
  411. package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  412. package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
  413. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
  414. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  415. package/dist/esm/hooks/use-selection-renderer.js +35 -6
  416. package/dist/esm/hooks/use-selection.d.ts +9 -1
  417. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  418. package/dist/esm/hooks/use-selection.js +122 -30
  419. package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
  420. package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
  421. package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
  422. package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
  423. package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
  424. package/dist/esm/hooks/use-table-hit-zones.js +146 -0
  425. package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
  426. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  427. package/dist/esm/hooks/use-table-resizer.js +21 -10
  428. package/dist/esm/index.d.ts +13 -0
  429. package/dist/esm/index.d.ts.map +1 -1
  430. package/dist/esm/index.js +13 -0
  431. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  432. package/dist/esm/types.d.ts +289 -4
  433. package/dist/esm/types.d.ts.map +1 -1
  434. package/dist/esm/utils/copy-as-picture.d.ts +13 -0
  435. package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
  436. package/dist/esm/utils/copy-as-picture.js +45 -0
  437. package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
  438. package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  439. package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
  440. package/dist/esm/utils/z-order.d.ts +47 -0
  441. package/dist/esm/utils/z-order.d.ts.map +1 -0
  442. package/dist/esm/utils/z-order.js +111 -0
  443. package/dist/spreadsheet.min.css +1 -1
  444. package/package.json +8 -6
  445. package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
  446. package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
  447. package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
  448. package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
  449. package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
  450. package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
@@ -1,7 +1,40 @@
1
- import React, { useCallback, useMemo } from "react";
2
- import { useSelectedChartEmbed } from "../atoms";
1
+ import React, { useCallback, useMemo, useRef, useState } from "react";
2
+ import { useGetChartActions, useSelectedChartEmbed, useSelectedChartSeries, } from "../atoms";
3
+ import { EmbedContextMenu, hasEmbedContextMenuItems, } from "../components/context-menu/embed-context-menu";
4
+ import { useIsMoveChartDialogMounted, useOpenMoveChartDialog, } from "../atoms/move-chart-dialog.atom";
3
5
  import { ChartComponent, EmbedComponent, EmbedDraggable, SlicerComponent, } from "../components/embeds";
4
6
  import { DEFAULT_OVERLAY_POSITION } from "../config";
7
+ import { pivotChartFieldButtonsVisible, togglePivotChartFieldButtons, } from "../utils/pivot-chart-field-buttons";
8
+ import { canCopyImageToClipboard, copyPngToClipboard, } from "../utils/copy-as-picture";
9
+ import { getStackingRanks, planZOrderChange, stackingKey, } from "../utils/z-order";
10
+ import { DefaultContextMenuWrapper, } from "./use-context-menu";
11
+ /**
12
+ * The cell an object's top-left corner actually sits in: its anchor cell
13
+ * walked forward by its pixel offsets. An `absoluteAnchor` imports as A1 plus
14
+ * a large offset, so the raw anchor says nothing about which pane the object
15
+ * is on screen in. The walk is bounded by `maxRow` / `maxColumn` (the frozen
16
+ * counts) — past them the answer is "body" regardless of the exact cell.
17
+ */
18
+ export const resolveOverlayCell = (anchorCell, offsetXPixels, offsetYPixels, getCellOffsetFromCoords, maxRow, maxColumn) => {
19
+ let { rowIndex, columnIndex } = anchorCell;
20
+ let x = offsetXPixels;
21
+ let y = offsetYPixels;
22
+ while (rowIndex < maxRow) {
23
+ const height = getCellOffsetFromCoords({ rowIndex, columnIndex })?.height;
24
+ if (height === undefined || y < height)
25
+ break;
26
+ y -= height;
27
+ rowIndex += 1;
28
+ }
29
+ while (columnIndex < maxColumn) {
30
+ const width = getCellOffsetFromCoords({ rowIndex, columnIndex })?.width;
31
+ if (width === undefined || x < width)
32
+ break;
33
+ x -= width;
34
+ columnIndex += 1;
35
+ }
36
+ return { rowIndex, columnIndex };
37
+ };
5
38
  /**
6
39
  * Get placement of an item based on anchor cell position
7
40
  */
@@ -19,6 +52,19 @@ export const getOverlayPlacement = (anchorCell, frozenRows, frozenColumns) => {
19
52
  return "frozenColumn";
20
53
  return "body";
21
54
  };
55
+ /** Excel's default placement — an object with no explicit mode moves and sizes with cells. */
56
+ export const isMoveAndSizePlacement = (overlay) => (overlay?.placement ?? "moveAndSize") === "moveAndSize";
57
+ /**
58
+ * The props that lay a frame out from both anchors — only a `moveAndSize`
59
+ * object with a persisted second anchor; the others keep their pixel size.
60
+ */
61
+ export const getOverlayToAnchorProps = (overlay) => isMoveAndSizePlacement(overlay) && overlay.toCell
62
+ ? {
63
+ toCell: overlay.toCell,
64
+ toOffsetXPixels: overlay.toOffsetXPixels ?? 0,
65
+ toOffsetYPixels: overlay.toOffsetYPixels ?? 0,
66
+ }
67
+ : undefined;
22
68
  const defaultGetChartComponent = (props) => (React.createElement(ChartComponent, { ...props }));
23
69
  const defaultGetEmbedComponent = (props) => (React.createElement(EmbedComponent, { ...props }));
24
70
  const defaultGetSlicerComponent = (props) => (React.createElement(SlicerComponent, { ...props }));
@@ -37,15 +83,203 @@ const validateEmbeds = (embedsOrCharts, sheetId) => {
37
83
  return obj;
38
84
  });
39
85
  };
40
- export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, frozenRows = 0, frozenColumns = 0, getCellOffsetFromCoords, getCellCoordsFromOffset, getAbsolutePositionFromOffset, getBounds, selectedColor = "#1a73e8", onMoveChart, onResizeChart, onMoveEmbed, onResizeEmbed, onDeleteChart, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFilterTable, onFilterPivot, tables, pivotTables, getFormattedValue, getChartComponent = defaultGetChartComponent, getEmbedComponent = defaultGetEmbedComponent, getSlicerComponent = defaultGetSlicerComponent, readonly, theme, backgroundColor, disabled, }) => {
86
+ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, frozenRows = 0, frozenColumns = 0, getCellOffsetFromCoords, getCellCoordsFromOffset, getAbsolutePositionFromOffset, getRelativePositionFromOffset, ContextMenuWrapper = DefaultContextMenuWrapper, focusSheet, getBounds, selectedColor = "#1a73e8", onMoveChart, onResizeChart, chartClipboard, onMoveEmbed, onResizeEmbed, onDeleteChart, onUpdateChart, onChangeZOrder, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFilterTable, onFilterPivot, tables, pivotTables, getFormattedValue, getChartComponent = defaultGetChartComponent, getEmbedComponent = defaultGetEmbedComponent, getSlicerComponent = defaultGetSlicerComponent, readonly, theme, backgroundColor, disabled, }) => {
41
87
  const [selectedIndex, setSelectedIndex] = useSelectedChartEmbed();
88
+ const [selectedSeries, setSelectedSeries] = useSelectedChartSeries();
89
+ const getChartActions = useGetChartActions();
90
+ const [contextMenu, setContextMenu] = useState();
91
+ // The object the open menu belongs to; focus returns to it (or to the
92
+ // sheet once it has been deleted) when the menu closes.
93
+ const contextMenuTargetRef = useRef(null);
42
94
  /**
43
95
  * When user selects the sheet
44
96
  */
45
97
  const handleMouseDown = useCallback(() => {
46
98
  setSelectedIndex(undefined);
47
99
  }, [setSelectedIndex]);
48
- const getCellPosition = useCallback((x, y) => {
100
+ // Escape on a selected object: Excel first steps back from a selected data
101
+ // series to the whole chart, then drops the selection and the active cell
102
+ // takes focus again
103
+ const handleDeselect = useCallback((id) => {
104
+ if (selectedSeries?.chartId === id) {
105
+ setSelectedSeries(undefined);
106
+ return;
107
+ }
108
+ setSelectedIndex(undefined);
109
+ focusSheet();
110
+ }, [selectedSeries, setSelectedSeries, setSelectedIndex, focusSheet]);
111
+ // Pressing on a chart selects it; a series selection is made afresh by the
112
+ // click that follows (the renderer publishes it), so a stale one never
113
+ // reappears when the same chart is re-selected
114
+ const selectChart = useCallback((id) => {
115
+ setSelectedIndex(id);
116
+ setSelectedSeries(undefined);
117
+ }, [setSelectedIndex, setSelectedSeries]);
118
+ // Double-click on a chart opens the host's editor (Excel opens the format pane)
119
+ const handleChartDoubleClick = useCallback((id) => {
120
+ getChartActions(id)?.requestEdit?.();
121
+ }, [getChartActions]);
122
+ // Stacking rank (1 = back-most) of every chart and embed on the sheet —
123
+ // charts and embeds are two arrays but one z-order (Excel's Arrange menu).
124
+ const stackingRanks = useMemo(() => getStackingRanks(charts, embeds, sheetId), [charts, embeds, sheetId]);
125
+ const stackingRankOf = useCallback((target) => stackingRanks.get(stackingKey(target)), [stackingRanks]);
126
+ /**
127
+ * Excel's Arrange commands for one object, each present only while it
128
+ * would move the object (the front-most one has nothing to bring forward).
129
+ */
130
+ const getArrangeActions = useCallback((target) => {
131
+ if (!onChangeZOrder || readonly) {
132
+ return {};
133
+ }
134
+ const arrange = (direction) => {
135
+ const changes = planZOrderChange(charts, embeds, sheetId, target, direction);
136
+ return changes ? () => onChangeZOrder(changes) : undefined;
137
+ };
138
+ return {
139
+ onBringToFront: arrange("bringToFront"),
140
+ onBringForward: arrange("bringForward"),
141
+ onSendBackward: arrange("sendBackward"),
142
+ onSendToBack: arrange("sendToBack"),
143
+ };
144
+ }, [onChangeZOrder, readonly, charts, embeds, sheetId]);
145
+ /**
146
+ * Menu actions for a floating object. Actions without a handler are
147
+ * omitted so the menu only lists commands that do something.
148
+ */
149
+ const openMoveChartDialog = useOpenMoveChartDialog();
150
+ const canMoveChartToSheet = useIsMoveChartDialogMounted();
151
+ const getContextMenuActions = useCallback((kind, id) => {
152
+ const actions = {};
153
+ if (kind === "chart") {
154
+ const chart = charts?.find((item) => item.chartId === id);
155
+ if (!chart) {
156
+ return actions;
157
+ }
158
+ const rendererActions = getChartActions(id);
159
+ if (chartClipboard) {
160
+ if (!readonly) {
161
+ actions.onCut = () => chartClipboard.cutChart(id);
162
+ }
163
+ actions.onCopy = () => chartClipboard.copyChart(id);
164
+ if (chartClipboard.hasChartOnClipboard()) {
165
+ actions.onPaste = () => chartClipboard.pasteChart();
166
+ }
167
+ }
168
+ // Excel's "Copy as Picture" — the capture starts inside the click
169
+ // that asked for it, so the clipboard write stays in the gesture.
170
+ const exportPng = rendererActions?.exportPng;
171
+ if (exportPng && canCopyImageToClipboard()) {
172
+ actions.onCopyAsPicture = () => {
173
+ void copyPngToClipboard(exportPng());
174
+ };
175
+ }
176
+ if (rendererActions?.requestEdit && !readonly) {
177
+ actions.onRequestEdit = rendererActions.requestEdit;
178
+ // The editor opens on its Setup tab, whose first control is the
179
+ // chart type — the nearest thing to Excel's Change Chart Type dialog.
180
+ actions.onRequestChangeChartType = rendererActions.requestEdit;
181
+ }
182
+ if (rendererActions?.switchRowColumn && !readonly) {
183
+ actions.onSwitchRowColumn = rendererActions.switchRowColumn;
184
+ }
185
+ if (canMoveChartToSheet && !readonly) {
186
+ actions.onRequestMoveChart = () => openMoveChartDialog({ chart });
187
+ }
188
+ // PivotChart: Excel's Hide / Show All Field Buttons — one chart
189
+ // update (one undo step) that flips only the visibility flag.
190
+ if (chart.spec.pivotTableId != null && onUpdateChart && !readonly) {
191
+ const toggle = () => onUpdateChart({
192
+ ...chart,
193
+ spec: { ...chart.spec, ...togglePivotChartFieldButtons(chart.spec) },
194
+ });
195
+ if (pivotChartFieldButtonsVisible(chart.spec)) {
196
+ actions.onHideFieldButtons = toggle;
197
+ }
198
+ else {
199
+ actions.onShowFieldButtons = toggle;
200
+ }
201
+ }
202
+ if (rendererActions?.downloadPng) {
203
+ actions.onDownloadPng = rendererActions.downloadPng;
204
+ }
205
+ Object.assign(actions, getArrangeActions({ kind: "chart", id }));
206
+ if (onDeleteChart && !readonly) {
207
+ actions.onDelete = () => onDeleteChart(id);
208
+ }
209
+ return actions;
210
+ }
211
+ const embed = embeds?.find((item) => item.embedId === id);
212
+ if (!embed) {
213
+ return actions;
214
+ }
215
+ if (onRequestEditEmbed && !readonly) {
216
+ actions.onRequestEdit = () => onRequestEditEmbed(embed);
217
+ }
218
+ Object.assign(actions, getArrangeActions({ kind: "embed", id }));
219
+ if (onDeleteEmbed && !readonly) {
220
+ actions.onDelete = () => onDeleteEmbed(id);
221
+ }
222
+ return actions;
223
+ }, [
224
+ charts,
225
+ embeds,
226
+ readonly,
227
+ getChartActions,
228
+ chartClipboard,
229
+ onDeleteChart,
230
+ onUpdateChart,
231
+ onRequestEditEmbed,
232
+ onDeleteEmbed,
233
+ canMoveChartToSheet,
234
+ openMoveChartDialog,
235
+ getArrangeActions,
236
+ ]);
237
+ /**
238
+ * Right-click / Shift+F10 on a floating object: select it (Excel does),
239
+ * then open its menu at the pointer.
240
+ */
241
+ const requestContextMenu = useCallback((kind, id, clientX, clientY, element) => {
242
+ setSelectedIndex(id);
243
+ if (!hasEmbedContextMenuItems(getContextMenuActions(kind, id))) {
244
+ return;
245
+ }
246
+ const position = getRelativePositionFromOffset(clientX, clientY);
247
+ if (!position) {
248
+ return;
249
+ }
250
+ contextMenuTargetRef.current = element;
251
+ setContextMenu({ kind, id, left: position.x, top: position.y });
252
+ }, [setSelectedIndex, getContextMenuActions, getRelativePositionFromOffset]);
253
+ const handleChartContextMenu = useCallback((id, clientX, clientY, element) => requestContextMenu("chart", id, clientX, clientY, element), [requestContextMenu]);
254
+ const handleEmbedContextMenu = useCallback((id, clientX, clientY, element) => requestContextMenu("embed", id, clientX, clientY, element), [requestContextMenu]);
255
+ const closeContextMenu = useCallback((isOpen) => {
256
+ if (!isOpen) {
257
+ setContextMenu(undefined);
258
+ }
259
+ }, []);
260
+ const handleContextMenuCloseAutoFocus = useCallback(() => {
261
+ const target = contextMenuTargetRef.current;
262
+ contextMenuTargetRef.current = null;
263
+ if (target?.isConnected) {
264
+ target.focus({ preventScroll: true });
265
+ }
266
+ else {
267
+ focusSheet();
268
+ }
269
+ }, [focusSheet]);
270
+ const contextMenuComponent = useMemo(() => {
271
+ const actions = contextMenu
272
+ ? getContextMenuActions(contextMenu.kind, contextMenu.id)
273
+ : undefined;
274
+ return (React.createElement(ContextMenuWrapper, { left: contextMenu?.left ?? 0, top: contextMenu?.top ?? 0, isOpen: !!contextMenu, onOpenChange: closeContextMenu }, contextMenu && actions ? (React.createElement(EmbedContextMenu, { kind: contextMenu.kind, ...actions, onCloseAutoFocus: handleContextMenuCloseAutoFocus })) : null));
275
+ }, [
276
+ ContextMenuWrapper,
277
+ contextMenu,
278
+ getContextMenuActions,
279
+ closeContextMenu,
280
+ handleContextMenuCloseAutoFocus,
281
+ ]);
282
+ const getCellPositionAt = useCallback((x, y) => {
49
283
  const position = getAbsolutePositionFromOffset(x, y);
50
284
  // Use includeFrozen=true to detect cells in all regions
51
285
  const anchorCell = getCellCoordsFromOffset(position?.x ?? 0, position?.y ?? 0, true);
@@ -60,15 +294,69 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
60
294
  getCellCoordsFromOffset,
61
295
  getAbsolutePositionFromOffset,
62
296
  ]);
297
+ /**
298
+ * Anchor cell + pixel offsets for a point in grid pixel space. A point past
299
+ * the sheet body (no cell there) is pulled back to its nearest body cell, so
300
+ * a gesture that ends outside the sheet is persisted at the clamped position
301
+ * instead of being dropped and leaving the frame where it was let go.
302
+ */
303
+ const getCellPosition = useCallback((x, y) => {
304
+ const position = getCellPositionAt(x, y);
305
+ if (position) {
306
+ return position;
307
+ }
308
+ const bounds = getBounds();
309
+ const clampedX = Math.max(bounds.left ?? -Infinity, Math.min(bounds.right !== undefined ? bounds.right - 1 : Infinity, x));
310
+ const clampedY = Math.max(bounds.top ?? -Infinity, Math.min(bounds.bottom !== undefined ? bounds.bottom - 1 : Infinity, y));
311
+ if (clampedX === x && clampedY === y) {
312
+ return undefined;
313
+ }
314
+ return getCellPositionAt(clampedX, clampedY);
315
+ }, [getCellPositionAt, getBounds]);
316
+ // Alt-drag / Alt-resize: nearest cell corner to a point, in the same pixel space the objects are laid out in
317
+ const snapToCellGrid = useCallback((x, y) => {
318
+ const position = getCellPosition(x, y);
319
+ const cell = position ? getCellOffsetFromCoords(position[0]) : undefined;
320
+ if (!position || !cell) {
321
+ return undefined;
322
+ }
323
+ const [, offsetXPixels, offsetYPixels] = position;
324
+ return {
325
+ x: offsetXPixels < cell.width / 2 ? cell.x : cell.x + cell.width,
326
+ y: offsetYPixels < cell.height / 2 ? cell.y : cell.y + cell.height,
327
+ };
328
+ }, [getCellPosition, getCellOffsetFromCoords]);
329
+ /**
330
+ * Where a `moveAndSize` object's bottom-right corner landed (grid pixel
331
+ * space) as its second anchor — Excel rewrites `to` on every move and
332
+ * resize. `moveOnly` / `absolute` objects keep a pixel size instead.
333
+ */
334
+ const getToAnchor = useCallback((overlay, right, bottom) => {
335
+ if (!isMoveAndSizePlacement(overlay)) {
336
+ return undefined;
337
+ }
338
+ const position = getCellPosition(right, bottom);
339
+ if (!position) {
340
+ return undefined;
341
+ }
342
+ const [toCell, toOffsetXPixels, toOffsetYPixels] = position;
343
+ return { toCell, toOffsetXPixels, toOffsetYPixels };
344
+ }, [getCellPosition]);
345
+ const getChartOverlay = useCallback((id) => charts?.find((chart) => chart.chartId === id)?.position
346
+ ?.overlayPosition, [charts]);
347
+ const getEmbedOverlay = useCallback((id) => embeds?.find((embed) => embed.embedId === id)?.position
348
+ ?.overlayPosition, [embeds]);
349
+ const getSlicerOverlay = useCallback((id) => slicers?.find((slicer) => slicer.slicerId === id)?.position
350
+ ?.overlayPosition, [slicers]);
63
351
  // Callback when user moves a chart
64
- const handleMove = useCallback((id, x, y) => {
352
+ const handleMove = useCallback((id, x, y, width, height) => {
65
353
  const position = getCellPosition(x, y);
66
354
  if (!position) {
67
355
  return;
68
356
  }
69
357
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
70
- onMoveChart?.(id, anchorCell, offsetXPixels, offsetYPixels);
71
- }, [onMoveChart, getCellPosition]);
358
+ onMoveChart?.(id, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getChartOverlay(id), x + width, y + height));
359
+ }, [onMoveChart, getCellPosition, getToAnchor, getChartOverlay]);
72
360
  // Callback when resizes an embed
73
361
  const handleEmbedResize = useCallback((id, x, y, width, height) => {
74
362
  const position = getCellPosition(x, y);
@@ -76,17 +364,17 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
76
364
  return;
77
365
  }
78
366
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
79
- onResizeEmbed?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height);
80
- }, [onResizeEmbed, sheetId, getCellPosition]);
367
+ onResizeEmbed?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getEmbedOverlay(id), x + width * scale, y + height * scale));
368
+ }, [onResizeEmbed, sheetId, scale, getCellPosition, getToAnchor, getEmbedOverlay]);
81
369
  // Callback when user moves a chart
82
- const handleEmbedMove = useCallback((id, x, y) => {
370
+ const handleEmbedMove = useCallback((id, x, y, width, height) => {
83
371
  const position = getCellPosition(x, y);
84
372
  if (!position) {
85
373
  return;
86
374
  }
87
375
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
88
- onMoveEmbed?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels);
89
- }, [onMoveEmbed, sheetId, getCellPosition]);
376
+ onMoveEmbed?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getEmbedOverlay(id), x + width, y + height));
377
+ }, [onMoveEmbed, sheetId, getCellPosition, getToAnchor, getEmbedOverlay]);
90
378
  // Callback when resizes a chart
91
379
  const handleResize = useCallback((id, x, y, width, height) => {
92
380
  const position = getCellPosition(x, y);
@@ -94,8 +382,8 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
94
382
  return;
95
383
  }
96
384
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
97
- onResizeChart?.(id, anchorCell, offsetXPixels, offsetYPixels, width, height);
98
- }, [onResizeChart, getCellPosition]);
385
+ onResizeChart?.(id, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getChartOverlay(id), x + width * scale, y + height * scale));
386
+ }, [onResizeChart, scale, getCellPosition, getToAnchor, getChartOverlay]);
99
387
  // Callback when user resizes a slicer
100
388
  const handleSlicerResize = useCallback((id, x, y, width, height) => {
101
389
  const position = getCellPosition(x, y);
@@ -103,17 +391,24 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
103
391
  return;
104
392
  }
105
393
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
106
- onResizeSlicer?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height);
107
- }, [onResizeSlicer, sheetId, getCellPosition]);
394
+ onResizeSlicer?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getSlicerOverlay(id), x + width * scale, y + height * scale));
395
+ }, [onResizeSlicer, sheetId, scale, getCellPosition, getToAnchor, getSlicerOverlay]);
108
396
  // Callback when user moves a slicer
109
- const handleSlicerMove = useCallback((id, x, y) => {
397
+ const handleSlicerMove = useCallback((id, x, y, width, height) => {
110
398
  const position = getCellPosition(x, y);
111
399
  if (!position) {
112
400
  return;
113
401
  }
114
402
  const [anchorCell, offsetXPixels, offsetYPixels] = position;
115
- onMoveSlicer?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels);
116
- }, [onMoveSlicer, sheetId, getCellPosition]);
403
+ onMoveSlicer?.(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getSlicerOverlay(id), x + width, y + height));
404
+ }, [onMoveSlicer, sheetId, getCellPosition, getToAnchor, getSlicerOverlay]);
405
+ // The frozen-pane layer an object renders in: the cell its top-left corner
406
+ // actually sits in (anchor walked forward by the pixel offsets) against the
407
+ // frozen counts. Charts, pictures / embeds and slicers share it, so an object
408
+ // anchored in the frozen rows stays put while the body scrolls, like Excel.
409
+ const placementOf = useCallback(({ anchorCell, offsetXPixels, offsetYPixels, }) => getOverlayPlacement(anchorCell
410
+ ? resolveOverlayCell(anchorCell, offsetXPixels ?? 0, offsetYPixels ?? 0, getCellOffsetFromCoords, frozenRows, frozenColumns)
411
+ : anchorCell, frozenRows, frozenColumns), [frozenRows, frozenColumns, getCellOffsetFromCoords]);
117
412
  // Chart components - categorized by frozen pane placement
118
413
  const chartComponents = useMemo(() => {
119
414
  const result = {
@@ -129,13 +424,24 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
129
424
  const bounds = getBounds();
130
425
  validateEmbeds(charts, sheetId)
131
426
  ?.filter((chart) => chart.position.sheetId === sheetId)
132
- .forEach((chart) => {
427
+ .map((chart) => ({
428
+ chart,
429
+ zIndex: stackingRankOf({ kind: "chart", id: chart.chartId }),
430
+ }))
431
+ .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0))
432
+ .forEach(({ chart, zIndex }) => {
133
433
  const { chartId, position: { overlayPosition }, borderColor, draggable, resizable, } = chart;
134
434
  const { anchorCell, widthPixels = 0, heightPixels = 0, offsetXPixels = 0, offsetYPixels = 0, } = overlayPosition;
135
435
  const isSelected = selectedIndex === chartId;
136
436
  const finalBorderColor = isSelected ? selectedColor : borderColor;
137
- const placement = getOverlayPlacement(anchorCell, frozenRows, frozenColumns);
138
- const component = (React.createElement(EmbedDraggable, { bounds: bounds, key: chartId, anchorCell: anchorCell, id: chartId, isSelected: isSelected, borderColor: finalBorderColor ?? undefined, onPointerDown: () => setSelectedIndex(chartId), height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, onResize: handleResize, onMove: handleMove, scale: scale, onDelete: onDeleteChart, draggable: readonly ? false : draggable ?? undefined, resizable: readonly ? false : resizable ?? undefined }, (width, height) => getChartComponent?.({
437
+ const placement = placementOf(overlayPosition);
438
+ const component = (React.createElement(EmbedDraggable, { bounds: bounds, key: chartId, anchorCell: anchorCell, id: chartId, isSelected: isSelected, zIndex: zIndex, borderColor: finalBorderColor ?? undefined, onPointerDown: () => selectChart(chartId), onDoubleClick: readonly ? undefined : handleChartDoubleClick, height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, ...getOverlayToAnchorProps(overlayPosition), onResize: handleResize, onMove: handleMove, scale: scale, onDelete: onDeleteChart, onDuplicate: chartClipboard?.duplicateChart, onCopy: chartClipboard
439
+ ? (id, e) => chartClipboard.copyChart(id, e.nativeEvent)
440
+ : undefined, onCut: chartClipboard
441
+ ? (id, e) => chartClipboard.cutChart(id, e.nativeEvent)
442
+ : undefined, onPaste: chartClipboard
443
+ ? (_id, e) => chartClipboard.pasteChart(e.nativeEvent)
444
+ : undefined, onDeselect: handleDeselect, onRequestContextMenu: handleChartContextMenu, snapToGrid: snapToCellGrid, draggable: readonly ? false : draggable ?? undefined, resizable: readonly ? false : resizable ?? undefined }, (width, height) => getChartComponent?.({
139
445
  chart,
140
446
  width,
141
447
  height,
@@ -143,6 +449,11 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
143
449
  backgroundColor,
144
450
  isSelected,
145
451
  onDeleteChart,
452
+ onUpdateChart,
453
+ onCopyChart: chartClipboard?.copyChart,
454
+ onCutChart: chartClipboard?.cutChart,
455
+ onPasteChart: chartClipboard?.pasteChart,
456
+ onDuplicateChart: chartClipboard?.duplicateChart,
146
457
  sheetId,
147
458
  readonly,
148
459
  })));
@@ -157,31 +468,48 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
157
468
  sheetId,
158
469
  selectedColor,
159
470
  selectedIndex,
160
- setSelectedIndex,
471
+ selectChart,
472
+ handleDeselect,
473
+ handleChartDoubleClick,
474
+ snapToCellGrid,
161
475
  handleMove,
162
476
  handleResize,
477
+ handleChartContextMenu,
163
478
  getChartComponent,
164
479
  theme,
165
480
  onDeleteChart,
481
+ onUpdateChart,
482
+ chartClipboard,
166
483
  backgroundColor,
167
- frozenRows,
168
- frozenColumns,
484
+ placementOf,
485
+ stackingRankOf,
169
486
  ]);
170
- // Embed components
487
+ // Embed components - categorized by frozen pane placement like charts
171
488
  const embedComponents = useMemo(() => {
489
+ const result = {
490
+ body: [],
491
+ frozenRow: [],
492
+ frozenColumn: [],
493
+ intersection: [],
494
+ };
172
495
  // If user has no EmbedComponent, skip rendering
173
496
  if (!getEmbedComponent || disabled) {
174
- return [];
497
+ return result;
175
498
  }
176
- return (validateEmbeds(embeds, sheetId)
499
+ validateEmbeds(embeds, sheetId)
177
500
  ?.filter((embed) => embed.position.sheetId === sheetId)
178
- .map((embed) => {
501
+ .map((embed) => ({
502
+ embed,
503
+ zIndex: stackingRankOf({ kind: "embed", id: embed.embedId }),
504
+ }))
505
+ .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0))
506
+ .forEach(({ embed, zIndex }) => {
179
507
  const { embedId, position: { overlayPosition }, borderColor, lockAspectRatio, draggable, resizable, } = embed;
180
508
  const { anchorCell, widthPixels = 0, heightPixels = 0, offsetXPixels = 0, offsetYPixels = 0, } = overlayPosition;
181
509
  const bounds = getBounds();
182
510
  const isSelected = selectedIndex === embedId;
183
511
  const finalBorderColor = isSelected ? selectedColor : borderColor;
184
- return (React.createElement(EmbedDraggable, { key: embedId, anchorCell: anchorCell, id: embedId, isSelected: isSelected, borderColor: finalBorderColor ?? undefined, onPointerDown: () => setSelectedIndex(embedId), height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, onResize: handleEmbedResize, onMove: handleEmbedMove, bounds: bounds, scale: scale, onDelete: onDeleteEmbed, lockAspectRatio: lockAspectRatio ?? undefined, resizable: readonly ? false : resizable ?? undefined, draggable: readonly ? false : draggable ?? undefined }, (width, height) => getEmbedComponent?.({
512
+ result[placementOf(overlayPosition)].push(React.createElement(EmbedDraggable, { key: embedId, anchorCell: anchorCell, id: embedId, isSelected: isSelected, zIndex: zIndex, borderColor: finalBorderColor ?? undefined, onPointerDown: () => setSelectedIndex(embedId), height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, ...getOverlayToAnchorProps(overlayPosition), onResize: handleEmbedResize, onMove: handleEmbedMove, bounds: bounds, scale: scale, onDelete: onDeleteEmbed, onDeselect: handleDeselect, onRequestContextMenu: handleEmbedContextMenu, snapToGrid: snapToCellGrid, lockAspectRatio: lockAspectRatio ?? undefined, resizable: readonly ? false : resizable ?? undefined, draggable: readonly ? false : draggable ?? undefined }, (width, height) => getEmbedComponent?.({
185
513
  embed,
186
514
  width,
187
515
  height,
@@ -193,7 +521,8 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
193
521
  sheetId,
194
522
  readonly,
195
523
  })));
196
- }) ?? []);
524
+ });
525
+ return result;
197
526
  }, [
198
527
  disabled,
199
528
  scale,
@@ -204,31 +533,43 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
204
533
  getBounds,
205
534
  selectedIndex,
206
535
  setSelectedIndex,
536
+ handleDeselect,
537
+ snapToCellGrid,
207
538
  handleEmbedMove,
208
539
  handleEmbedResize,
540
+ handleEmbedContextMenu,
209
541
  getEmbedComponent,
210
542
  theme,
211
543
  onDeleteEmbed,
212
544
  onRequestEditEmbed,
213
545
  backgroundColor,
546
+ placementOf,
547
+ stackingRankOf,
214
548
  ]);
215
- // Slicer components
549
+ // Slicer components — always above charts and embeds, as before z-order;
550
+ // categorized by frozen pane placement like charts.
216
551
  const slicerComponents = useMemo(() => {
552
+ const result = {
553
+ body: [],
554
+ frozenRow: [],
555
+ frozenColumn: [],
556
+ intersection: [],
557
+ };
217
558
  // If user has no SlicerComponent, skip rendering
218
559
  if (!getSlicerComponent || disabled) {
219
- return [];
560
+ return result;
220
561
  }
221
- return (validateEmbeds(slicers, sheetId)
562
+ validateEmbeds(slicers, sheetId)
222
563
  ?.filter((slicer) => slicer.position.sheetId === sheetId)
223
- .map((slicer) => {
564
+ .forEach((slicer) => {
224
565
  const { slicerId, position: { overlayPosition }, borderColor, draggable, resizable, } = slicer;
225
566
  const { anchorCell, widthPixels = 0, heightPixels = 0, offsetXPixels = 0, offsetYPixels = 0, } = overlayPosition;
226
567
  const bounds = getBounds();
227
568
  const isSelected = selectedIndex === slicerId;
228
569
  const finalBorderColor = isSelected ? selectedColor : borderColor;
229
- return (React.createElement(EmbedDraggable, { key: slicerId, anchorCell: anchorCell, id: slicerId, isSelected: isSelected, borderColor: typeof finalBorderColor === "string"
570
+ result[placementOf(overlayPosition)].push(React.createElement(EmbedDraggable, { key: slicerId, anchorCell: anchorCell, id: slicerId, isSelected: isSelected, zIndex: stackingRanks.size + 1, borderColor: typeof finalBorderColor === "string"
230
571
  ? finalBorderColor
231
- : undefined, onPointerDown: () => setSelectedIndex(slicerId), height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, onResize: handleSlicerResize, onMove: handleSlicerMove, bounds: bounds, scale: scale, onDelete: onDeleteSlicer, resizable: readonly ? false : resizable ?? undefined, draggable: readonly ? false : draggable ?? undefined }, (width, height) => getSlicerComponent?.({
572
+ : undefined, onPointerDown: () => setSelectedIndex(slicerId), height: (heightPixels ?? 0) * scale, width: (widthPixels ?? 0) * scale, offsetXPixels: offsetXPixels ?? 0, offsetYPixels: offsetYPixels ?? 0, ...getOverlayToAnchorProps(overlayPosition), onResize: handleSlicerResize, onMove: handleSlicerMove, bounds: bounds, scale: scale, onDelete: onDeleteSlicer, onDeselect: handleDeselect, snapToGrid: snapToCellGrid, resizable: readonly ? false : resizable ?? undefined, draggable: readonly ? false : draggable ?? undefined }, (width, height) => getSlicerComponent?.({
232
573
  slicer,
233
574
  width,
234
575
  height,
@@ -244,7 +585,8 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
244
585
  sheetId,
245
586
  readonly,
246
587
  })));
247
- }) ?? []);
588
+ });
589
+ return result;
248
590
  }, [
249
591
  disabled,
250
592
  scale,
@@ -255,6 +597,8 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
255
597
  getBounds,
256
598
  selectedIndex,
257
599
  setSelectedIndex,
600
+ handleDeselect,
601
+ snapToCellGrid,
258
602
  handleSlicerMove,
259
603
  handleSlicerResize,
260
604
  getSlicerComponent,
@@ -266,11 +610,22 @@ export const useEmbedsCharts = ({ scale = 1, charts, embeds, slicers, sheetId, f
266
610
  pivotTables,
267
611
  getFormattedValue,
268
612
  backgroundColor,
613
+ placementOf,
614
+ stackingRanks,
269
615
  ]);
270
616
  return useMemo(() => ({
271
617
  chartComponents,
272
618
  embedComponents,
273
619
  slicerComponents,
620
+ contextMenuComponent,
274
621
  onMouseDown: handleMouseDown,
275
- }), [chartComponents, embedComponents, slicerComponents, handleMouseDown]);
622
+ requestChartContextMenu: handleChartContextMenu,
623
+ }), [
624
+ chartComponents,
625
+ embedComponents,
626
+ slicerComponents,
627
+ contextMenuComponent,
628
+ handleMouseDown,
629
+ handleChartContextMenu,
630
+ ]);
276
631
  };
@@ -6,8 +6,8 @@ type UseGridChildrenProps = {
6
6
  stickyEditor?: boolean;
7
7
  editorComponent: React.ReactElement | null;
8
8
  chartComponents: ReturnType<typeof useEmbedsCharts>["chartComponents"];
9
- embedComponents: React.JSX.Element[] | null | undefined;
10
- slicerComponents: React.JSX.Element[] | null | undefined;
9
+ embedComponents: ReturnType<typeof useEmbedsCharts>["embedComponents"] | null | undefined;
10
+ slicerComponents: ReturnType<typeof useEmbedsCharts>["slicerComponents"] | null | undefined;
11
11
  pivotPlaceholders: React.JSX.Element[] | null | undefined;
12
12
  tableResizers: React.JSX.Element[] | null | undefined;
13
13
  hiddenColumnMarkers: React.JSX.Element | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"use-grid-children.d.ts","sourceRoot":"","sources":["../../../hooks/use-grid-children.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACvE,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACxD,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACzD,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,yBAAyB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,sBAAsB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7D,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,YAAY,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,oWAoB7B,oBAAoB,aAiBX,iBAAiB,sBAmI5B,CAAC;AA+BF,eAAO,MAAM,kBAAkB,GAAI,kCAIhC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,sBAS9D,CAAC"}
1
+ {"version":3,"file":"use-grid-children.d.ts","sourceRoot":"","sources":["../../../hooks/use-grid-children.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACvE,eAAe,EACX,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,iBAAiB,CAAC,GACrD,IAAI,GACJ,SAAS,CAAC;IACd,gBAAgB,EACZ,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,kBAAkB,CAAC,GACtD,IAAI,GACJ,SAAS,CAAC;IACd,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,yBAAyB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,sBAAsB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7D,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,YAAY,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,oWAoB7B,oBAAoB,aAiBX,iBAAiB,sBAyI5B,CAAC;AA+BF,eAAO,MAAM,kBAAkB,GAAI,kCAIhC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,sBAS9D,CAAC"}