@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
@@ -1,11 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useEmbedsCharts = exports.getOverlayPlacement = void 0;
3
+ exports.useEmbedsCharts = exports.getOverlayToAnchorProps = exports.isMoveAndSizePlacement = exports.getOverlayPlacement = exports.resolveOverlayCell = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var react_1 = tslib_1.__importStar(require("react"));
6
6
  var atoms_1 = require("../atoms");
7
+ var embed_context_menu_1 = require("../components/context-menu/embed-context-menu");
8
+ var move_chart_dialog_atom_1 = require("../atoms/move-chart-dialog.atom");
7
9
  var embeds_1 = require("../components/embeds");
8
10
  var config_1 = require("../config");
11
+ var pivot_chart_field_buttons_1 = require("../utils/pivot-chart-field-buttons");
12
+ var copy_as_picture_1 = require("../utils/copy-as-picture");
13
+ var z_order_1 = require("../utils/z-order");
14
+ var use_context_menu_1 = require("./use-context-menu");
15
+ /**
16
+ * The cell an object's top-left corner actually sits in: its anchor cell
17
+ * walked forward by its pixel offsets. An `absoluteAnchor` imports as A1 plus
18
+ * a large offset, so the raw anchor says nothing about which pane the object
19
+ * is on screen in. The walk is bounded by `maxRow` / `maxColumn` (the frozen
20
+ * counts) — past them the answer is "body" regardless of the exact cell.
21
+ */
22
+ var resolveOverlayCell = function (anchorCell, offsetXPixels, offsetYPixels, getCellOffsetFromCoords, maxRow, maxColumn) {
23
+ var _a, _b;
24
+ var rowIndex = anchorCell.rowIndex, columnIndex = anchorCell.columnIndex;
25
+ var x = offsetXPixels;
26
+ var y = offsetYPixels;
27
+ while (rowIndex < maxRow) {
28
+ var height = (_a = getCellOffsetFromCoords({ rowIndex: rowIndex, columnIndex: columnIndex })) === null || _a === void 0 ? void 0 : _a.height;
29
+ if (height === undefined || y < height)
30
+ break;
31
+ y -= height;
32
+ rowIndex += 1;
33
+ }
34
+ while (columnIndex < maxColumn) {
35
+ var width = (_b = getCellOffsetFromCoords({ rowIndex: rowIndex, columnIndex: columnIndex })) === null || _b === void 0 ? void 0 : _b.width;
36
+ if (width === undefined || x < width)
37
+ break;
38
+ x -= width;
39
+ columnIndex += 1;
40
+ }
41
+ return { rowIndex: rowIndex, columnIndex: columnIndex };
42
+ };
43
+ exports.resolveOverlayCell = resolveOverlayCell;
9
44
  /**
10
45
  * Get placement of an item based on anchor cell position
11
46
  */
@@ -24,6 +59,24 @@ var getOverlayPlacement = function (anchorCell, frozenRows, frozenColumns) {
24
59
  return "body";
25
60
  };
26
61
  exports.getOverlayPlacement = getOverlayPlacement;
62
+ /** Excel's default placement — an object with no explicit mode moves and sizes with cells. */
63
+ var isMoveAndSizePlacement = function (overlay) { var _a; return ((_a = overlay === null || overlay === void 0 ? void 0 : overlay.placement) !== null && _a !== void 0 ? _a : "moveAndSize") === "moveAndSize"; };
64
+ exports.isMoveAndSizePlacement = isMoveAndSizePlacement;
65
+ /**
66
+ * The props that lay a frame out from both anchors — only a `moveAndSize`
67
+ * object with a persisted second anchor; the others keep their pixel size.
68
+ */
69
+ var getOverlayToAnchorProps = function (overlay) {
70
+ var _a, _b;
71
+ return (0, exports.isMoveAndSizePlacement)(overlay) && overlay.toCell
72
+ ? {
73
+ toCell: overlay.toCell,
74
+ toOffsetXPixels: (_a = overlay.toOffsetXPixels) !== null && _a !== void 0 ? _a : 0,
75
+ toOffsetYPixels: (_b = overlay.toOffsetYPixels) !== null && _b !== void 0 ? _b : 0,
76
+ }
77
+ : undefined;
78
+ };
79
+ exports.getOverlayToAnchorProps = getOverlayToAnchorProps;
27
80
  var defaultGetChartComponent = function (props) { return (react_1.default.createElement(embeds_1.ChartComponent, tslib_1.__assign({}, props))); };
28
81
  var defaultGetEmbedComponent = function (props) { return (react_1.default.createElement(embeds_1.EmbedComponent, tslib_1.__assign({}, props))); };
29
82
  var defaultGetSlicerComponent = function (props) { return (react_1.default.createElement(embeds_1.SlicerComponent, tslib_1.__assign({}, props))); };
@@ -40,15 +93,204 @@ var validateEmbeds = function (embedsOrCharts, sheetId) {
40
93
  });
41
94
  };
42
95
  var useEmbedsCharts = function (_a) {
43
- var _b = _a.scale, scale = _b === void 0 ? 1 : _b, charts = _a.charts, embeds = _a.embeds, slicers = _a.slicers, sheetId = _a.sheetId, _c = _a.frozenRows, frozenRows = _c === void 0 ? 0 : _c, _d = _a.frozenColumns, frozenColumns = _d === void 0 ? 0 : _d, getCellOffsetFromCoords = _a.getCellOffsetFromCoords, getCellCoordsFromOffset = _a.getCellCoordsFromOffset, getAbsolutePositionFromOffset = _a.getAbsolutePositionFromOffset, getBounds = _a.getBounds, _e = _a.selectedColor, selectedColor = _e === void 0 ? "#1a73e8" : _e, onMoveChart = _a.onMoveChart, onResizeChart = _a.onResizeChart, onMoveEmbed = _a.onMoveEmbed, onResizeEmbed = _a.onResizeEmbed, onDeleteChart = _a.onDeleteChart, onDeleteEmbed = _a.onDeleteEmbed, onRequestEditEmbed = _a.onRequestEditEmbed, onMoveSlicer = _a.onMoveSlicer, onResizeSlicer = _a.onResizeSlicer, onDeleteSlicer = _a.onDeleteSlicer, onRequestEditSlicer = _a.onRequestEditSlicer, onFilterTable = _a.onFilterTable, onFilterPivot = _a.onFilterPivot, tables = _a.tables, pivotTables = _a.pivotTables, getFormattedValue = _a.getFormattedValue, _f = _a.getChartComponent, getChartComponent = _f === void 0 ? defaultGetChartComponent : _f, _g = _a.getEmbedComponent, getEmbedComponent = _g === void 0 ? defaultGetEmbedComponent : _g, _h = _a.getSlicerComponent, getSlicerComponent = _h === void 0 ? defaultGetSlicerComponent : _h, readonly = _a.readonly, theme = _a.theme, backgroundColor = _a.backgroundColor, disabled = _a.disabled;
44
- var _j = tslib_1.__read((0, atoms_1.useSelectedChartEmbed)(), 2), selectedIndex = _j[0], setSelectedIndex = _j[1];
96
+ var _b = _a.scale, scale = _b === void 0 ? 1 : _b, charts = _a.charts, embeds = _a.embeds, slicers = _a.slicers, sheetId = _a.sheetId, _c = _a.frozenRows, frozenRows = _c === void 0 ? 0 : _c, _d = _a.frozenColumns, frozenColumns = _d === void 0 ? 0 : _d, getCellOffsetFromCoords = _a.getCellOffsetFromCoords, getCellCoordsFromOffset = _a.getCellCoordsFromOffset, getAbsolutePositionFromOffset = _a.getAbsolutePositionFromOffset, getRelativePositionFromOffset = _a.getRelativePositionFromOffset, _e = _a.ContextMenuWrapper, ContextMenuWrapper = _e === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _e, focusSheet = _a.focusSheet, getBounds = _a.getBounds, _f = _a.selectedColor, selectedColor = _f === void 0 ? "#1a73e8" : _f, onMoveChart = _a.onMoveChart, onResizeChart = _a.onResizeChart, chartClipboard = _a.chartClipboard, onMoveEmbed = _a.onMoveEmbed, onResizeEmbed = _a.onResizeEmbed, onDeleteChart = _a.onDeleteChart, onUpdateChart = _a.onUpdateChart, onChangeZOrder = _a.onChangeZOrder, onDeleteEmbed = _a.onDeleteEmbed, onRequestEditEmbed = _a.onRequestEditEmbed, onMoveSlicer = _a.onMoveSlicer, onResizeSlicer = _a.onResizeSlicer, onDeleteSlicer = _a.onDeleteSlicer, onRequestEditSlicer = _a.onRequestEditSlicer, onFilterTable = _a.onFilterTable, onFilterPivot = _a.onFilterPivot, tables = _a.tables, pivotTables = _a.pivotTables, getFormattedValue = _a.getFormattedValue, _g = _a.getChartComponent, getChartComponent = _g === void 0 ? defaultGetChartComponent : _g, _h = _a.getEmbedComponent, getEmbedComponent = _h === void 0 ? defaultGetEmbedComponent : _h, _j = _a.getSlicerComponent, getSlicerComponent = _j === void 0 ? defaultGetSlicerComponent : _j, readonly = _a.readonly, theme = _a.theme, backgroundColor = _a.backgroundColor, disabled = _a.disabled;
97
+ var _k = tslib_1.__read((0, atoms_1.useSelectedChartEmbed)(), 2), selectedIndex = _k[0], setSelectedIndex = _k[1];
98
+ var _l = tslib_1.__read((0, atoms_1.useSelectedChartSeries)(), 2), selectedSeries = _l[0], setSelectedSeries = _l[1];
99
+ var getChartActions = (0, atoms_1.useGetChartActions)();
100
+ var _m = tslib_1.__read((0, react_1.useState)(), 2), contextMenu = _m[0], setContextMenu = _m[1];
101
+ // The object the open menu belongs to; focus returns to it (or to the
102
+ // sheet once it has been deleted) when the menu closes.
103
+ var contextMenuTargetRef = (0, react_1.useRef)(null);
45
104
  /**
46
105
  * When user selects the sheet
47
106
  */
48
107
  var handleMouseDown = (0, react_1.useCallback)(function () {
49
108
  setSelectedIndex(undefined);
50
109
  }, [setSelectedIndex]);
51
- var getCellPosition = (0, react_1.useCallback)(function (x, y) {
110
+ // Escape on a selected object: Excel first steps back from a selected data
111
+ // series to the whole chart, then drops the selection and the active cell
112
+ // takes focus again
113
+ var handleDeselect = (0, react_1.useCallback)(function (id) {
114
+ if ((selectedSeries === null || selectedSeries === void 0 ? void 0 : selectedSeries.chartId) === id) {
115
+ setSelectedSeries(undefined);
116
+ return;
117
+ }
118
+ setSelectedIndex(undefined);
119
+ focusSheet();
120
+ }, [selectedSeries, setSelectedSeries, setSelectedIndex, focusSheet]);
121
+ // Pressing on a chart selects it; a series selection is made afresh by the
122
+ // click that follows (the renderer publishes it), so a stale one never
123
+ // reappears when the same chart is re-selected
124
+ var selectChart = (0, react_1.useCallback)(function (id) {
125
+ setSelectedIndex(id);
126
+ setSelectedSeries(undefined);
127
+ }, [setSelectedIndex, setSelectedSeries]);
128
+ // Double-click on a chart opens the host's editor (Excel opens the format pane)
129
+ var handleChartDoubleClick = (0, react_1.useCallback)(function (id) {
130
+ var _a, _b;
131
+ (_b = (_a = getChartActions(id)) === null || _a === void 0 ? void 0 : _a.requestEdit) === null || _b === void 0 ? void 0 : _b.call(_a);
132
+ }, [getChartActions]);
133
+ // Stacking rank (1 = back-most) of every chart and embed on the sheet —
134
+ // charts and embeds are two arrays but one z-order (Excel's Arrange menu).
135
+ var stackingRanks = (0, react_1.useMemo)(function () { return (0, z_order_1.getStackingRanks)(charts, embeds, sheetId); }, [charts, embeds, sheetId]);
136
+ var stackingRankOf = (0, react_1.useCallback)(function (target) { return stackingRanks.get((0, z_order_1.stackingKey)(target)); }, [stackingRanks]);
137
+ /**
138
+ * Excel's Arrange commands for one object, each present only while it
139
+ * would move the object (the front-most one has nothing to bring forward).
140
+ */
141
+ var getArrangeActions = (0, react_1.useCallback)(function (target) {
142
+ if (!onChangeZOrder || readonly) {
143
+ return {};
144
+ }
145
+ var arrange = function (direction) {
146
+ var changes = (0, z_order_1.planZOrderChange)(charts, embeds, sheetId, target, direction);
147
+ return changes ? function () { return onChangeZOrder(changes); } : undefined;
148
+ };
149
+ return {
150
+ onBringToFront: arrange("bringToFront"),
151
+ onBringForward: arrange("bringForward"),
152
+ onSendBackward: arrange("sendBackward"),
153
+ onSendToBack: arrange("sendToBack"),
154
+ };
155
+ }, [onChangeZOrder, readonly, charts, embeds, sheetId]);
156
+ /**
157
+ * Menu actions for a floating object. Actions without a handler are
158
+ * omitted so the menu only lists commands that do something.
159
+ */
160
+ var openMoveChartDialog = (0, move_chart_dialog_atom_1.useOpenMoveChartDialog)();
161
+ var canMoveChartToSheet = (0, move_chart_dialog_atom_1.useIsMoveChartDialogMounted)();
162
+ var getContextMenuActions = (0, react_1.useCallback)(function (kind, id) {
163
+ var actions = {};
164
+ if (kind === "chart") {
165
+ var chart_1 = charts === null || charts === void 0 ? void 0 : charts.find(function (item) { return item.chartId === id; });
166
+ if (!chart_1) {
167
+ return actions;
168
+ }
169
+ var rendererActions = getChartActions(id);
170
+ if (chartClipboard) {
171
+ if (!readonly) {
172
+ actions.onCut = function () { return chartClipboard.cutChart(id); };
173
+ }
174
+ actions.onCopy = function () { return chartClipboard.copyChart(id); };
175
+ if (chartClipboard.hasChartOnClipboard()) {
176
+ actions.onPaste = function () { return chartClipboard.pasteChart(); };
177
+ }
178
+ }
179
+ // Excel's "Copy as Picture" — the capture starts inside the click
180
+ // that asked for it, so the clipboard write stays in the gesture.
181
+ var exportPng_1 = rendererActions === null || rendererActions === void 0 ? void 0 : rendererActions.exportPng;
182
+ if (exportPng_1 && (0, copy_as_picture_1.canCopyImageToClipboard)()) {
183
+ actions.onCopyAsPicture = function () {
184
+ void (0, copy_as_picture_1.copyPngToClipboard)(exportPng_1());
185
+ };
186
+ }
187
+ if ((rendererActions === null || rendererActions === void 0 ? void 0 : rendererActions.requestEdit) && !readonly) {
188
+ actions.onRequestEdit = rendererActions.requestEdit;
189
+ // The editor opens on its Setup tab, whose first control is the
190
+ // chart type — the nearest thing to Excel's Change Chart Type dialog.
191
+ actions.onRequestChangeChartType = rendererActions.requestEdit;
192
+ }
193
+ if ((rendererActions === null || rendererActions === void 0 ? void 0 : rendererActions.switchRowColumn) && !readonly) {
194
+ actions.onSwitchRowColumn = rendererActions.switchRowColumn;
195
+ }
196
+ if (canMoveChartToSheet && !readonly) {
197
+ actions.onRequestMoveChart = function () { return openMoveChartDialog({ chart: chart_1 }); };
198
+ }
199
+ // PivotChart: Excel's Hide / Show All Field Buttons — one chart
200
+ // update (one undo step) that flips only the visibility flag.
201
+ if (chart_1.spec.pivotTableId != null && onUpdateChart && !readonly) {
202
+ var toggle = function () {
203
+ return onUpdateChart(tslib_1.__assign(tslib_1.__assign({}, chart_1), { spec: tslib_1.__assign(tslib_1.__assign({}, chart_1.spec), (0, pivot_chart_field_buttons_1.togglePivotChartFieldButtons)(chart_1.spec)) }));
204
+ };
205
+ if ((0, pivot_chart_field_buttons_1.pivotChartFieldButtonsVisible)(chart_1.spec)) {
206
+ actions.onHideFieldButtons = toggle;
207
+ }
208
+ else {
209
+ actions.onShowFieldButtons = toggle;
210
+ }
211
+ }
212
+ if (rendererActions === null || rendererActions === void 0 ? void 0 : rendererActions.downloadPng) {
213
+ actions.onDownloadPng = rendererActions.downloadPng;
214
+ }
215
+ Object.assign(actions, getArrangeActions({ kind: "chart", id: id }));
216
+ if (onDeleteChart && !readonly) {
217
+ actions.onDelete = function () { return onDeleteChart(id); };
218
+ }
219
+ return actions;
220
+ }
221
+ var embed = embeds === null || embeds === void 0 ? void 0 : embeds.find(function (item) { return item.embedId === id; });
222
+ if (!embed) {
223
+ return actions;
224
+ }
225
+ if (onRequestEditEmbed && !readonly) {
226
+ actions.onRequestEdit = function () { return onRequestEditEmbed(embed); };
227
+ }
228
+ Object.assign(actions, getArrangeActions({ kind: "embed", id: id }));
229
+ if (onDeleteEmbed && !readonly) {
230
+ actions.onDelete = function () { return onDeleteEmbed(id); };
231
+ }
232
+ return actions;
233
+ }, [
234
+ charts,
235
+ embeds,
236
+ readonly,
237
+ getChartActions,
238
+ chartClipboard,
239
+ onDeleteChart,
240
+ onUpdateChart,
241
+ onRequestEditEmbed,
242
+ onDeleteEmbed,
243
+ canMoveChartToSheet,
244
+ openMoveChartDialog,
245
+ getArrangeActions,
246
+ ]);
247
+ /**
248
+ * Right-click / Shift+F10 on a floating object: select it (Excel does),
249
+ * then open its menu at the pointer.
250
+ */
251
+ var requestContextMenu = (0, react_1.useCallback)(function (kind, id, clientX, clientY, element) {
252
+ setSelectedIndex(id);
253
+ if (!(0, embed_context_menu_1.hasEmbedContextMenuItems)(getContextMenuActions(kind, id))) {
254
+ return;
255
+ }
256
+ var position = getRelativePositionFromOffset(clientX, clientY);
257
+ if (!position) {
258
+ return;
259
+ }
260
+ contextMenuTargetRef.current = element;
261
+ setContextMenu({ kind: kind, id: id, left: position.x, top: position.y });
262
+ }, [setSelectedIndex, getContextMenuActions, getRelativePositionFromOffset]);
263
+ var handleChartContextMenu = (0, react_1.useCallback)(function (id, clientX, clientY, element) { return requestContextMenu("chart", id, clientX, clientY, element); }, [requestContextMenu]);
264
+ var handleEmbedContextMenu = (0, react_1.useCallback)(function (id, clientX, clientY, element) { return requestContextMenu("embed", id, clientX, clientY, element); }, [requestContextMenu]);
265
+ var closeContextMenu = (0, react_1.useCallback)(function (isOpen) {
266
+ if (!isOpen) {
267
+ setContextMenu(undefined);
268
+ }
269
+ }, []);
270
+ var handleContextMenuCloseAutoFocus = (0, react_1.useCallback)(function () {
271
+ var target = contextMenuTargetRef.current;
272
+ contextMenuTargetRef.current = null;
273
+ if (target === null || target === void 0 ? void 0 : target.isConnected) {
274
+ target.focus({ preventScroll: true });
275
+ }
276
+ else {
277
+ focusSheet();
278
+ }
279
+ }, [focusSheet]);
280
+ var contextMenuComponent = (0, react_1.useMemo)(function () {
281
+ var _a, _b;
282
+ var actions = contextMenu
283
+ ? getContextMenuActions(contextMenu.kind, contextMenu.id)
284
+ : undefined;
285
+ return (react_1.default.createElement(ContextMenuWrapper, { left: (_a = contextMenu === null || contextMenu === void 0 ? void 0 : contextMenu.left) !== null && _a !== void 0 ? _a : 0, top: (_b = contextMenu === null || contextMenu === void 0 ? void 0 : contextMenu.top) !== null && _b !== void 0 ? _b : 0, isOpen: !!contextMenu, onOpenChange: closeContextMenu }, contextMenu && actions ? (react_1.default.createElement(embed_context_menu_1.EmbedContextMenu, tslib_1.__assign({ kind: contextMenu.kind }, actions, { onCloseAutoFocus: handleContextMenuCloseAutoFocus }))) : null));
286
+ }, [
287
+ ContextMenuWrapper,
288
+ contextMenu,
289
+ getContextMenuActions,
290
+ closeContextMenu,
291
+ handleContextMenuCloseAutoFocus,
292
+ ]);
293
+ var getCellPositionAt = (0, react_1.useCallback)(function (x, y) {
52
294
  var _a, _b;
53
295
  var position = getAbsolutePositionFromOffset(x, y);
54
296
  // Use includeFrozen=true to detect cells in all regions
@@ -64,15 +306,76 @@ var useEmbedsCharts = function (_a) {
64
306
  getCellCoordsFromOffset,
65
307
  getAbsolutePositionFromOffset,
66
308
  ]);
309
+ /**
310
+ * Anchor cell + pixel offsets for a point in grid pixel space. A point past
311
+ * the sheet body (no cell there) is pulled back to its nearest body cell, so
312
+ * a gesture that ends outside the sheet is persisted at the clamped position
313
+ * instead of being dropped and leaving the frame where it was let go.
314
+ */
315
+ var getCellPosition = (0, react_1.useCallback)(function (x, y) {
316
+ var _a, _b;
317
+ var position = getCellPositionAt(x, y);
318
+ if (position) {
319
+ return position;
320
+ }
321
+ var bounds = getBounds();
322
+ var clampedX = Math.max((_a = bounds.left) !== null && _a !== void 0 ? _a : -Infinity, Math.min(bounds.right !== undefined ? bounds.right - 1 : Infinity, x));
323
+ var clampedY = Math.max((_b = bounds.top) !== null && _b !== void 0 ? _b : -Infinity, Math.min(bounds.bottom !== undefined ? bounds.bottom - 1 : Infinity, y));
324
+ if (clampedX === x && clampedY === y) {
325
+ return undefined;
326
+ }
327
+ return getCellPositionAt(clampedX, clampedY);
328
+ }, [getCellPositionAt, getBounds]);
329
+ // Alt-drag / Alt-resize: nearest cell corner to a point, in the same pixel space the objects are laid out in
330
+ var snapToCellGrid = (0, react_1.useCallback)(function (x, y) {
331
+ var position = getCellPosition(x, y);
332
+ var cell = position ? getCellOffsetFromCoords(position[0]) : undefined;
333
+ if (!position || !cell) {
334
+ return undefined;
335
+ }
336
+ var _a = tslib_1.__read(position, 3), offsetXPixels = _a[1], offsetYPixels = _a[2];
337
+ return {
338
+ x: offsetXPixels < cell.width / 2 ? cell.x : cell.x + cell.width,
339
+ y: offsetYPixels < cell.height / 2 ? cell.y : cell.y + cell.height,
340
+ };
341
+ }, [getCellPosition, getCellOffsetFromCoords]);
342
+ /**
343
+ * Where a `moveAndSize` object's bottom-right corner landed (grid pixel
344
+ * space) as its second anchor — Excel rewrites `to` on every move and
345
+ * resize. `moveOnly` / `absolute` objects keep a pixel size instead.
346
+ */
347
+ var getToAnchor = (0, react_1.useCallback)(function (overlay, right, bottom) {
348
+ if (!(0, exports.isMoveAndSizePlacement)(overlay)) {
349
+ return undefined;
350
+ }
351
+ var position = getCellPosition(right, bottom);
352
+ if (!position) {
353
+ return undefined;
354
+ }
355
+ var _a = tslib_1.__read(position, 3), toCell = _a[0], toOffsetXPixels = _a[1], toOffsetYPixels = _a[2];
356
+ return { toCell: toCell, toOffsetXPixels: toOffsetXPixels, toOffsetYPixels: toOffsetYPixels };
357
+ }, [getCellPosition]);
358
+ var getChartOverlay = (0, react_1.useCallback)(function (id) {
359
+ var _a, _b;
360
+ return (_b = (_a = charts === null || charts === void 0 ? void 0 : charts.find(function (chart) { return chart.chartId === id; })) === null || _a === void 0 ? void 0 : _a.position) === null || _b === void 0 ? void 0 : _b.overlayPosition;
361
+ }, [charts]);
362
+ var getEmbedOverlay = (0, react_1.useCallback)(function (id) {
363
+ var _a, _b;
364
+ return (_b = (_a = embeds === null || embeds === void 0 ? void 0 : embeds.find(function (embed) { return embed.embedId === id; })) === null || _a === void 0 ? void 0 : _a.position) === null || _b === void 0 ? void 0 : _b.overlayPosition;
365
+ }, [embeds]);
366
+ var getSlicerOverlay = (0, react_1.useCallback)(function (id) {
367
+ var _a, _b;
368
+ return (_b = (_a = slicers === null || slicers === void 0 ? void 0 : slicers.find(function (slicer) { return slicer.slicerId === id; })) === null || _a === void 0 ? void 0 : _a.position) === null || _b === void 0 ? void 0 : _b.overlayPosition;
369
+ }, [slicers]);
67
370
  // Callback when user moves a chart
68
- var handleMove = (0, react_1.useCallback)(function (id, x, y) {
371
+ var handleMove = (0, react_1.useCallback)(function (id, x, y, width, height) {
69
372
  var position = getCellPosition(x, y);
70
373
  if (!position) {
71
374
  return;
72
375
  }
73
376
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
74
- onMoveChart === null || onMoveChart === void 0 ? void 0 : onMoveChart(id, anchorCell, offsetXPixels, offsetYPixels);
75
- }, [onMoveChart, getCellPosition]);
377
+ onMoveChart === null || onMoveChart === void 0 ? void 0 : onMoveChart(id, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getChartOverlay(id), x + width, y + height));
378
+ }, [onMoveChart, getCellPosition, getToAnchor, getChartOverlay]);
76
379
  // Callback when resizes an embed
77
380
  var handleEmbedResize = (0, react_1.useCallback)(function (id, x, y, width, height) {
78
381
  var position = getCellPosition(x, y);
@@ -80,17 +383,17 @@ var useEmbedsCharts = function (_a) {
80
383
  return;
81
384
  }
82
385
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
83
- onResizeEmbed === null || onResizeEmbed === void 0 ? void 0 : onResizeEmbed(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height);
84
- }, [onResizeEmbed, sheetId, getCellPosition]);
386
+ onResizeEmbed === null || onResizeEmbed === void 0 ? void 0 : onResizeEmbed(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getEmbedOverlay(id), x + width * scale, y + height * scale));
387
+ }, [onResizeEmbed, sheetId, scale, getCellPosition, getToAnchor, getEmbedOverlay]);
85
388
  // Callback when user moves a chart
86
- var handleEmbedMove = (0, react_1.useCallback)(function (id, x, y) {
389
+ var handleEmbedMove = (0, react_1.useCallback)(function (id, x, y, width, height) {
87
390
  var position = getCellPosition(x, y);
88
391
  if (!position) {
89
392
  return;
90
393
  }
91
394
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
92
- onMoveEmbed === null || onMoveEmbed === void 0 ? void 0 : onMoveEmbed(id, sheetId, anchorCell, offsetXPixels, offsetYPixels);
93
- }, [onMoveEmbed, sheetId, getCellPosition]);
395
+ onMoveEmbed === null || onMoveEmbed === void 0 ? void 0 : onMoveEmbed(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getEmbedOverlay(id), x + width, y + height));
396
+ }, [onMoveEmbed, sheetId, getCellPosition, getToAnchor, getEmbedOverlay]);
94
397
  // Callback when resizes a chart
95
398
  var handleResize = (0, react_1.useCallback)(function (id, x, y, width, height) {
96
399
  var position = getCellPosition(x, y);
@@ -98,8 +401,8 @@ var useEmbedsCharts = function (_a) {
98
401
  return;
99
402
  }
100
403
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
101
- onResizeChart === null || onResizeChart === void 0 ? void 0 : onResizeChart(id, anchorCell, offsetXPixels, offsetYPixels, width, height);
102
- }, [onResizeChart, getCellPosition]);
404
+ onResizeChart === null || onResizeChart === void 0 ? void 0 : onResizeChart(id, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getChartOverlay(id), x + width * scale, y + height * scale));
405
+ }, [onResizeChart, scale, getCellPosition, getToAnchor, getChartOverlay]);
103
406
  // Callback when user resizes a slicer
104
407
  var handleSlicerResize = (0, react_1.useCallback)(function (id, x, y, width, height) {
105
408
  var position = getCellPosition(x, y);
@@ -107,17 +410,27 @@ var useEmbedsCharts = function (_a) {
107
410
  return;
108
411
  }
109
412
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
110
- onResizeSlicer === null || onResizeSlicer === void 0 ? void 0 : onResizeSlicer(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height);
111
- }, [onResizeSlicer, sheetId, getCellPosition]);
413
+ onResizeSlicer === null || onResizeSlicer === void 0 ? void 0 : onResizeSlicer(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, width, height, getToAnchor(getSlicerOverlay(id), x + width * scale, y + height * scale));
414
+ }, [onResizeSlicer, sheetId, scale, getCellPosition, getToAnchor, getSlicerOverlay]);
112
415
  // Callback when user moves a slicer
113
- var handleSlicerMove = (0, react_1.useCallback)(function (id, x, y) {
416
+ var handleSlicerMove = (0, react_1.useCallback)(function (id, x, y, width, height) {
114
417
  var position = getCellPosition(x, y);
115
418
  if (!position) {
116
419
  return;
117
420
  }
118
421
  var _a = tslib_1.__read(position, 3), anchorCell = _a[0], offsetXPixels = _a[1], offsetYPixels = _a[2];
119
- onMoveSlicer === null || onMoveSlicer === void 0 ? void 0 : onMoveSlicer(id, sheetId, anchorCell, offsetXPixels, offsetYPixels);
120
- }, [onMoveSlicer, sheetId, getCellPosition]);
422
+ onMoveSlicer === null || onMoveSlicer === void 0 ? void 0 : onMoveSlicer(id, sheetId, anchorCell, offsetXPixels, offsetYPixels, getToAnchor(getSlicerOverlay(id), x + width, y + height));
423
+ }, [onMoveSlicer, sheetId, getCellPosition, getToAnchor, getSlicerOverlay]);
424
+ // The frozen-pane layer an object renders in: the cell its top-left corner
425
+ // actually sits in (anchor walked forward by the pixel offsets) against the
426
+ // frozen counts. Charts, pictures / embeds and slicers share it, so an object
427
+ // anchored in the frozen rows stays put while the body scrolls, like Excel.
428
+ var placementOf = (0, react_1.useCallback)(function (_a) {
429
+ var anchorCell = _a.anchorCell, offsetXPixels = _a.offsetXPixels, offsetYPixels = _a.offsetYPixels;
430
+ return (0, exports.getOverlayPlacement)(anchorCell
431
+ ? (0, exports.resolveOverlayCell)(anchorCell, offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0, getCellOffsetFromCoords, frozenRows, frozenColumns)
432
+ : anchorCell, frozenRows, frozenColumns);
433
+ }, [frozenRows, frozenColumns, getCellOffsetFromCoords]);
121
434
  // Chart components - categorized by frozen pane placement
122
435
  var chartComponents = (0, react_1.useMemo)(function () {
123
436
  var _a;
@@ -132,13 +445,23 @@ var useEmbedsCharts = function (_a) {
132
445
  return result;
133
446
  }
134
447
  var bounds = getBounds();
135
- (_a = validateEmbeds(charts, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (chart) { return chart.position.sheetId === sheetId; }).forEach(function (chart) {
448
+ (_a = validateEmbeds(charts, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (chart) { return chart.position.sheetId === sheetId; }).map(function (chart) { return ({
449
+ chart: chart,
450
+ zIndex: stackingRankOf({ kind: "chart", id: chart.chartId }),
451
+ }); }).sort(function (a, b) { var _a, _b; return ((_a = a.zIndex) !== null && _a !== void 0 ? _a : 0) - ((_b = b.zIndex) !== null && _b !== void 0 ? _b : 0); }).forEach(function (_a) {
452
+ var chart = _a.chart, zIndex = _a.zIndex;
136
453
  var chartId = chart.chartId, overlayPosition = chart.position.overlayPosition, borderColor = chart.borderColor, draggable = chart.draggable, resizable = chart.resizable;
137
- var anchorCell = overlayPosition.anchorCell, _a = overlayPosition.widthPixels, widthPixels = _a === void 0 ? 0 : _a, _b = overlayPosition.heightPixels, heightPixels = _b === void 0 ? 0 : _b, _c = overlayPosition.offsetXPixels, offsetXPixels = _c === void 0 ? 0 : _c, _d = overlayPosition.offsetYPixels, offsetYPixels = _d === void 0 ? 0 : _d;
454
+ var anchorCell = overlayPosition.anchorCell, _b = overlayPosition.widthPixels, widthPixels = _b === void 0 ? 0 : _b, _c = overlayPosition.heightPixels, heightPixels = _c === void 0 ? 0 : _c, _d = overlayPosition.offsetXPixels, offsetXPixels = _d === void 0 ? 0 : _d, _e = overlayPosition.offsetYPixels, offsetYPixels = _e === void 0 ? 0 : _e;
138
455
  var isSelected = selectedIndex === chartId;
139
456
  var finalBorderColor = isSelected ? selectedColor : borderColor;
140
- var placement = (0, exports.getOverlayPlacement)(anchorCell, frozenRows, frozenColumns);
141
- var component = (react_1.default.createElement(embeds_1.EmbedDraggable, { bounds: bounds, key: chartId, anchorCell: anchorCell, id: chartId, isSelected: isSelected, borderColor: finalBorderColor !== null && finalBorderColor !== void 0 ? finalBorderColor : undefined, onPointerDown: function () { return setSelectedIndex(chartId); }, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0, onResize: handleResize, onMove: handleMove, scale: scale, onDelete: onDeleteChart, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined }, function (width, height) {
457
+ var placement = placementOf(overlayPosition);
458
+ var component = (react_1.default.createElement(embeds_1.EmbedDraggable, tslib_1.__assign({ bounds: bounds, key: chartId, anchorCell: anchorCell, id: chartId, isSelected: isSelected, zIndex: zIndex, borderColor: finalBorderColor !== null && finalBorderColor !== void 0 ? finalBorderColor : undefined, onPointerDown: function () { return selectChart(chartId); }, onDoubleClick: readonly ? undefined : handleChartDoubleClick, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0 }, (0, exports.getOverlayToAnchorProps)(overlayPosition), { onResize: handleResize, onMove: handleMove, scale: scale, onDelete: onDeleteChart, onDuplicate: chartClipboard === null || chartClipboard === void 0 ? void 0 : chartClipboard.duplicateChart, onCopy: chartClipboard
459
+ ? function (id, e) { return chartClipboard.copyChart(id, e.nativeEvent); }
460
+ : undefined, onCut: chartClipboard
461
+ ? function (id, e) { return chartClipboard.cutChart(id, e.nativeEvent); }
462
+ : undefined, onPaste: chartClipboard
463
+ ? function (_id, e) { return chartClipboard.pasteChart(e.nativeEvent); }
464
+ : undefined, onDeselect: handleDeselect, onRequestContextMenu: handleChartContextMenu, snapToGrid: snapToCellGrid, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined }), function (width, height) {
142
465
  return getChartComponent === null || getChartComponent === void 0 ? void 0 : getChartComponent({
143
466
  chart: chart,
144
467
  width: width,
@@ -147,6 +470,11 @@ var useEmbedsCharts = function (_a) {
147
470
  backgroundColor: backgroundColor,
148
471
  isSelected: isSelected,
149
472
  onDeleteChart: onDeleteChart,
473
+ onUpdateChart: onUpdateChart,
474
+ onCopyChart: chartClipboard === null || chartClipboard === void 0 ? void 0 : chartClipboard.copyChart,
475
+ onCutChart: chartClipboard === null || chartClipboard === void 0 ? void 0 : chartClipboard.cutChart,
476
+ onPasteChart: chartClipboard === null || chartClipboard === void 0 ? void 0 : chartClipboard.pasteChart,
477
+ onDuplicateChart: chartClipboard === null || chartClipboard === void 0 ? void 0 : chartClipboard.duplicateChart,
150
478
  sheetId: sheetId,
151
479
  readonly: readonly,
152
480
  });
@@ -162,30 +490,46 @@ var useEmbedsCharts = function (_a) {
162
490
  sheetId,
163
491
  selectedColor,
164
492
  selectedIndex,
165
- setSelectedIndex,
493
+ selectChart,
494
+ handleDeselect,
495
+ handleChartDoubleClick,
496
+ snapToCellGrid,
166
497
  handleMove,
167
498
  handleResize,
499
+ handleChartContextMenu,
168
500
  getChartComponent,
169
501
  theme,
170
502
  onDeleteChart,
503
+ onUpdateChart,
504
+ chartClipboard,
171
505
  backgroundColor,
172
- frozenRows,
173
- frozenColumns,
506
+ placementOf,
507
+ stackingRankOf,
174
508
  ]);
175
- // Embed components
509
+ // Embed components - categorized by frozen pane placement like charts
176
510
  var embedComponents = (0, react_1.useMemo)(function () {
177
- var _a, _b;
511
+ var _a;
512
+ var result = {
513
+ body: [],
514
+ frozenRow: [],
515
+ frozenColumn: [],
516
+ intersection: [],
517
+ };
178
518
  // If user has no EmbedComponent, skip rendering
179
519
  if (!getEmbedComponent || disabled) {
180
- return [];
520
+ return result;
181
521
  }
182
- return ((_b = (_a = validateEmbeds(embeds, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (embed) { return embed.position.sheetId === sheetId; }).map(function (embed) {
522
+ (_a = validateEmbeds(embeds, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (embed) { return embed.position.sheetId === sheetId; }).map(function (embed) { return ({
523
+ embed: embed,
524
+ zIndex: stackingRankOf({ kind: "embed", id: embed.embedId }),
525
+ }); }).sort(function (a, b) { var _a, _b; return ((_a = a.zIndex) !== null && _a !== void 0 ? _a : 0) - ((_b = b.zIndex) !== null && _b !== void 0 ? _b : 0); }).forEach(function (_a) {
526
+ var embed = _a.embed, zIndex = _a.zIndex;
183
527
  var embedId = embed.embedId, overlayPosition = embed.position.overlayPosition, borderColor = embed.borderColor, lockAspectRatio = embed.lockAspectRatio, draggable = embed.draggable, resizable = embed.resizable;
184
- var anchorCell = overlayPosition.anchorCell, _a = overlayPosition.widthPixels, widthPixels = _a === void 0 ? 0 : _a, _b = overlayPosition.heightPixels, heightPixels = _b === void 0 ? 0 : _b, _c = overlayPosition.offsetXPixels, offsetXPixels = _c === void 0 ? 0 : _c, _d = overlayPosition.offsetYPixels, offsetYPixels = _d === void 0 ? 0 : _d;
528
+ var anchorCell = overlayPosition.anchorCell, _b = overlayPosition.widthPixels, widthPixels = _b === void 0 ? 0 : _b, _c = overlayPosition.heightPixels, heightPixels = _c === void 0 ? 0 : _c, _d = overlayPosition.offsetXPixels, offsetXPixels = _d === void 0 ? 0 : _d, _e = overlayPosition.offsetYPixels, offsetYPixels = _e === void 0 ? 0 : _e;
185
529
  var bounds = getBounds();
186
530
  var isSelected = selectedIndex === embedId;
187
531
  var finalBorderColor = isSelected ? selectedColor : borderColor;
188
- return (react_1.default.createElement(embeds_1.EmbedDraggable, { key: embedId, anchorCell: anchorCell, id: embedId, isSelected: isSelected, borderColor: finalBorderColor !== null && finalBorderColor !== void 0 ? finalBorderColor : undefined, onPointerDown: function () { return setSelectedIndex(embedId); }, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0, onResize: handleEmbedResize, onMove: handleEmbedMove, bounds: bounds, scale: scale, onDelete: onDeleteEmbed, lockAspectRatio: lockAspectRatio !== null && lockAspectRatio !== void 0 ? lockAspectRatio : undefined, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined }, function (width, height) {
532
+ result[placementOf(overlayPosition)].push(react_1.default.createElement(embeds_1.EmbedDraggable, tslib_1.__assign({ key: embedId, anchorCell: anchorCell, id: embedId, isSelected: isSelected, zIndex: zIndex, borderColor: finalBorderColor !== null && finalBorderColor !== void 0 ? finalBorderColor : undefined, onPointerDown: function () { return setSelectedIndex(embedId); }, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0 }, (0, exports.getOverlayToAnchorProps)(overlayPosition), { onResize: handleEmbedResize, onMove: handleEmbedMove, bounds: bounds, scale: scale, onDelete: onDeleteEmbed, onDeselect: handleDeselect, onRequestContextMenu: handleEmbedContextMenu, snapToGrid: snapToCellGrid, lockAspectRatio: lockAspectRatio !== null && lockAspectRatio !== void 0 ? lockAspectRatio : undefined, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined }), function (width, height) {
189
533
  return getEmbedComponent === null || getEmbedComponent === void 0 ? void 0 : getEmbedComponent({
190
534
  embed: embed,
191
535
  width: width,
@@ -199,7 +543,8 @@ var useEmbedsCharts = function (_a) {
199
543
  readonly: readonly,
200
544
  });
201
545
  }));
202
- })) !== null && _b !== void 0 ? _b : []);
546
+ });
547
+ return result;
203
548
  }, [
204
549
  disabled,
205
550
  scale,
@@ -210,30 +555,42 @@ var useEmbedsCharts = function (_a) {
210
555
  getBounds,
211
556
  selectedIndex,
212
557
  setSelectedIndex,
558
+ handleDeselect,
559
+ snapToCellGrid,
213
560
  handleEmbedMove,
214
561
  handleEmbedResize,
562
+ handleEmbedContextMenu,
215
563
  getEmbedComponent,
216
564
  theme,
217
565
  onDeleteEmbed,
218
566
  onRequestEditEmbed,
219
567
  backgroundColor,
568
+ placementOf,
569
+ stackingRankOf,
220
570
  ]);
221
- // Slicer components
571
+ // Slicer components — always above charts and embeds, as before z-order;
572
+ // categorized by frozen pane placement like charts.
222
573
  var slicerComponents = (0, react_1.useMemo)(function () {
223
- var _a, _b;
574
+ var _a;
575
+ var result = {
576
+ body: [],
577
+ frozenRow: [],
578
+ frozenColumn: [],
579
+ intersection: [],
580
+ };
224
581
  // If user has no SlicerComponent, skip rendering
225
582
  if (!getSlicerComponent || disabled) {
226
- return [];
583
+ return result;
227
584
  }
228
- return ((_b = (_a = validateEmbeds(slicers, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (slicer) { return slicer.position.sheetId === sheetId; }).map(function (slicer) {
585
+ (_a = validateEmbeds(slicers, sheetId)) === null || _a === void 0 ? void 0 : _a.filter(function (slicer) { return slicer.position.sheetId === sheetId; }).forEach(function (slicer) {
229
586
  var slicerId = slicer.slicerId, overlayPosition = slicer.position.overlayPosition, borderColor = slicer.borderColor, draggable = slicer.draggable, resizable = slicer.resizable;
230
587
  var anchorCell = overlayPosition.anchorCell, _a = overlayPosition.widthPixels, widthPixels = _a === void 0 ? 0 : _a, _b = overlayPosition.heightPixels, heightPixels = _b === void 0 ? 0 : _b, _c = overlayPosition.offsetXPixels, offsetXPixels = _c === void 0 ? 0 : _c, _d = overlayPosition.offsetYPixels, offsetYPixels = _d === void 0 ? 0 : _d;
231
588
  var bounds = getBounds();
232
589
  var isSelected = selectedIndex === slicerId;
233
590
  var finalBorderColor = isSelected ? selectedColor : borderColor;
234
- return (react_1.default.createElement(embeds_1.EmbedDraggable, { key: slicerId, anchorCell: anchorCell, id: slicerId, isSelected: isSelected, borderColor: typeof finalBorderColor === "string"
591
+ result[placementOf(overlayPosition)].push(react_1.default.createElement(embeds_1.EmbedDraggable, tslib_1.__assign({ key: slicerId, anchorCell: anchorCell, id: slicerId, isSelected: isSelected, zIndex: stackingRanks.size + 1, borderColor: typeof finalBorderColor === "string"
235
592
  ? finalBorderColor
236
- : undefined, onPointerDown: function () { return setSelectedIndex(slicerId); }, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0, onResize: handleSlicerResize, onMove: handleSlicerMove, bounds: bounds, scale: scale, onDelete: onDeleteSlicer, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined }, function (width, height) {
593
+ : undefined, onPointerDown: function () { return setSelectedIndex(slicerId); }, height: (heightPixels !== null && heightPixels !== void 0 ? heightPixels : 0) * scale, width: (widthPixels !== null && widthPixels !== void 0 ? widthPixels : 0) * scale, offsetXPixels: offsetXPixels !== null && offsetXPixels !== void 0 ? offsetXPixels : 0, offsetYPixels: offsetYPixels !== null && offsetYPixels !== void 0 ? offsetYPixels : 0 }, (0, exports.getOverlayToAnchorProps)(overlayPosition), { onResize: handleSlicerResize, onMove: handleSlicerMove, bounds: bounds, scale: scale, onDelete: onDeleteSlicer, onDeselect: handleDeselect, snapToGrid: snapToCellGrid, resizable: readonly ? false : resizable !== null && resizable !== void 0 ? resizable : undefined, draggable: readonly ? false : draggable !== null && draggable !== void 0 ? draggable : undefined }), function (width, height) {
237
594
  return getSlicerComponent === null || getSlicerComponent === void 0 ? void 0 : getSlicerComponent({
238
595
  slicer: slicer,
239
596
  width: width,
@@ -251,7 +608,8 @@ var useEmbedsCharts = function (_a) {
251
608
  readonly: readonly,
252
609
  });
253
610
  }));
254
- })) !== null && _b !== void 0 ? _b : []);
611
+ });
612
+ return result;
255
613
  }, [
256
614
  disabled,
257
615
  scale,
@@ -262,6 +620,8 @@ var useEmbedsCharts = function (_a) {
262
620
  getBounds,
263
621
  selectedIndex,
264
622
  setSelectedIndex,
623
+ handleDeselect,
624
+ snapToCellGrid,
265
625
  handleSlicerMove,
266
626
  handleSlicerResize,
267
627
  getSlicerComponent,
@@ -273,12 +633,23 @@ var useEmbedsCharts = function (_a) {
273
633
  pivotTables,
274
634
  getFormattedValue,
275
635
  backgroundColor,
636
+ placementOf,
637
+ stackingRanks,
276
638
  ]);
277
639
  return (0, react_1.useMemo)(function () { return ({
278
640
  chartComponents: chartComponents,
279
641
  embedComponents: embedComponents,
280
642
  slicerComponents: slicerComponents,
643
+ contextMenuComponent: contextMenuComponent,
281
644
  onMouseDown: handleMouseDown,
282
- }); }, [chartComponents, embedComponents, slicerComponents, handleMouseDown]);
645
+ requestChartContextMenu: handleChartContextMenu,
646
+ }); }, [
647
+ chartComponents,
648
+ embedComponents,
649
+ slicerComponents,
650
+ contextMenuComponent,
651
+ handleMouseDown,
652
+ handleChartContextMenu,
653
+ ]);
283
654
  };
284
655
  exports.useEmbedsCharts = useEmbedsCharts;
@@ -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;