@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,25 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTotalRowFunctionFromFormula = exports.getTotalRowFunctionFormula = exports.escapeStructuredColumnName = exports.TOTAL_ROW_FUNCTIONS = void 0;
3
+ exports.withTotalRowFunction = exports.getTotalRowFunctionFormula = exports.getTotalRowFunctionFromFormula = exports.escapeStructuredColumnName = exports.MORE_FUNCTIONS_INITIAL_VALUE = exports.TOTAL_ROW_FUNCTIONS = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var utils_1 = require("@rowsncolumns/utils");
6
+ Object.defineProperty(exports, "escapeStructuredColumnName", { enumerable: true, get: function () { return utils_1.escapeStructuredColumnName; } });
7
+ Object.defineProperty(exports, "getTotalRowFunctionFromFormula", { enumerable: true, get: function () { return utils_1.getTotalsRowFunctionFromFormula; } });
4
8
  exports.TOTAL_ROW_FUNCTIONS = [
5
- { id: "none", label: "None" },
6
- { id: "average", label: "Average", subtotal: 101 },
7
- { id: "count", label: "Count", subtotal: 103 },
8
- { id: "countNumbers", label: "Count Numbers", subtotal: 102 },
9
- { id: "max", label: "Max", subtotal: 104 },
10
- { id: "min", label: "Min", subtotal: 105 },
11
- { id: "sum", label: "Sum", subtotal: 109 },
12
- { id: "stdDev", label: "StdDev", subtotal: 107 },
13
- { id: "var", label: "Var", subtotal: 110 },
14
- ];
15
- /**
16
- * Escape a column name for use inside a structured reference: `[`, `]`, `#`
17
- * and `'` are prefixed with `'`, as Excel does.
18
- */
19
- var escapeStructuredColumnName = function (name) {
20
- return name.replace(/(['\[\]#])/g, "'$1");
21
- };
22
- exports.escapeStructuredColumnName = escapeStructuredColumnName;
9
+ ["none", "None"],
10
+ ["average", "Average"],
11
+ ["count", "Count"],
12
+ ["countNums", "Count Numbers"],
13
+ ["max", "Max"],
14
+ ["min", "Min"],
15
+ ["sum", "Sum"],
16
+ ["stdDev", "StdDev"],
17
+ ["var", "Var"],
18
+ ].map(function (_a) {
19
+ var _b = tslib_1.__read(_a, 2), id = _b[0], label = _b[1];
20
+ return ({
21
+ id: id,
22
+ label: label,
23
+ subtotal: utils_1.TOTALS_ROW_FUNCTION_SUBTOTAL[id],
24
+ });
25
+ });
26
+ /** What "More Functions…" pre-fills in the cell editor for a custom totals formula. */
27
+ exports.MORE_FUNCTIONS_INITIAL_VALUE = "=SUBTOTAL(";
23
28
  /**
24
29
  * Formula for a totals-row cell, e.g. `=SUBTOTAL(109,Table1[Amount])`.
25
30
  * Qualified with the table name so it evaluates from any engine and matches
@@ -31,32 +36,27 @@ var getTotalRowFunctionFormula = function (fn, table, columnIndex) {
31
36
  if (fn === "none") {
32
37
  return "";
33
38
  }
34
- var option = exports.TOTAL_ROW_FUNCTIONS.find(function (item) { return item.id === fn; });
35
39
  var columnName = (_b = (_a = table.columns) === null || _a === void 0 ? void 0 : _a[columnIndex - table.range.startColumnIndex]) === null || _b === void 0 ? void 0 : _b.name;
36
- if (!(option === null || option === void 0 ? void 0 : option.subtotal) || !columnName || !table.title) {
40
+ if (!columnName || !table.title) {
37
41
  return undefined;
38
42
  }
39
- return "=SUBTOTAL(".concat(option.subtotal, ",").concat(table.title, "[").concat((0, exports.escapeStructuredColumnName)(columnName), "])");
43
+ return (0, utils_1.getTotalsRowFormula)(fn, table.title, columnName);
40
44
  };
41
45
  exports.getTotalRowFunctionFormula = getTotalRowFunctionFormula;
42
46
  /**
43
- * Recognise the aggregation a totals-row formula uses, so the picker can show
44
- * the active choice. Both the hidden-row-aware (1xx) and plain (1–11)
45
- * `SUBTOTAL` numbers map to the same option; anything else is "none".
47
+ * The table's columns with `columnIndex`'s `totalsRowFunction` set to `fn` —
48
+ * the shape `onUpdateTable` persists so the choice survives toggling the totals
49
+ * row off and on. `undefined` when the column list does not cover the cell.
46
50
  */
47
- var getTotalRowFunctionFromFormula = function (formula) {
48
- var _a, _b;
49
- if (!formula) {
50
- return "none";
51
- }
52
- var match = /^\s*=\s*SUBTOTAL\s*\(\s*(\d{1,3})\s*,/i.exec(formula);
53
- if (!match) {
54
- return "none";
51
+ var withTotalRowFunction = function (table, columnIndex, fn) {
52
+ var _a;
53
+ var index = columnIndex - table.range.startColumnIndex;
54
+ var column = (_a = table.columns) === null || _a === void 0 ? void 0 : _a[index];
55
+ if (!column) {
56
+ return undefined;
55
57
  }
56
- var number = Number(match[1]);
57
- var normalized = number > 100 ? number - 100 : number;
58
- return ((_b = (_a = exports.TOTAL_ROW_FUNCTIONS.find(function (item) {
59
- return item.subtotal !== undefined && item.subtotal - 100 === normalized;
60
- })) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : "none");
58
+ return table.columns.map(function (item, i) {
59
+ return i === index ? tslib_1.__assign(tslib_1.__assign({}, item), { totalsRowFunction: fn }) : item;
60
+ });
61
61
  };
62
- exports.getTotalRowFunctionFromFormula = getTotalRowFunctionFromFormula;
62
+ exports.withTotalRowFunction = withTotalRowFunction;
@@ -11,6 +11,23 @@ export type ChartComponentProps = {
11
11
  isSelected: boolean;
12
12
  readonly?: boolean;
13
13
  onDeleteChart: CanvasGridProps["onDeleteChart"];
14
+ /**
15
+ * Persist an edited chart (the grid's `onUpdateChart`). Renderers use it
16
+ * for in-place operations such as Switch Row/Column.
17
+ */
18
+ onUpdateChart?: CanvasGridProps["onUpdateChart"];
19
+ /** Chart clipboard (Ctrl+C / Ctrl+X / Ctrl+V / Ctrl+D) — for a chart context menu. */
20
+ onCopyChart?: (chartId: EmbeddedChart["chartId"]) => boolean;
21
+ onCutChart?: (chartId: EmbeddedChart["chartId"]) => boolean;
22
+ onPasteChart?: () => boolean;
23
+ onDuplicateChart?: (chartId: EmbeddedChart["chartId"]) => EmbeddedChart | undefined;
24
+ /**
25
+ * Excel's PivotChart field buttons, drawn over the chart frame. The host
26
+ * composes them (`PivotChartFieldButtons` from `@rowsncolumns/pivot`
27
+ * with its pivot tables and sort / filter actions) because the renderer
28
+ * knows nothing about pivots; renderers place the node inside the frame.
29
+ */
30
+ fieldButtons?: React.ReactNode;
14
31
  };
15
32
  export declare const ChartComponent: React.MemoExoticComponent<({ backgroundColor }: ChartComponentProps) => React.JSX.Element>;
16
33
  //# sourceMappingURL=chart-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-component.d.ts","sourceRoot":"","sources":["../../../../components/embeds/chart-component.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACH,mBAAmB,uBAY1C,CAAC"}
1
+ {"version":3,"file":"chart-component.d.ts","sourceRoot":"","sources":["../../../../components/embeds/chart-component.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD;;;OAGG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACjD,sFAAsF;IACtF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC;IAC7D,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,CACjB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,KAC9B,aAAa,GAAG,SAAS,CAAC;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,cAAc,kDACH,mBAAmB,uBAY1C,CAAC"}
@@ -1,26 +1,46 @@
1
1
  import type { CellInterface } from "@rowsncolumns/grid";
2
2
  import React from "react";
3
3
  import type { DraggableBounds } from "react-draggable";
4
- type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "onResize" | "children"> & {
4
+ type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "onResize" | "children" | "onCopy" | "onCut" | "onPaste" | "onDoubleClick"> & {
5
5
  id: string | number;
6
6
  height: number;
7
7
  width: number;
8
8
  offsetXPixels: number;
9
9
  offsetYPixels: number;
10
+ /**
11
+ * Second anchor of a "Move and size with cells" object: the cell its
12
+ * bottom-right corner sits in plus the pixel offsets into it. When set the
13
+ * frame spans the two anchors, so a column / row resize between them
14
+ * stretches it; `width` / `height` are the fallback size.
15
+ */
16
+ toCell?: CellInterface;
17
+ toOffsetXPixels?: number;
18
+ toOffsetYPixels?: number;
10
19
  isSelected: boolean;
11
20
  borderColor?: string;
12
21
  lockAspectRatio?: boolean;
22
+ /**
23
+ * Stacking rank among the sheet's floating objects (1 = back-most); the
24
+ * selected object is lifted above every unselected one.
25
+ */
26
+ zIndex?: number;
27
+ /**
28
+ * Rectangle (grid pixel space) the object must stay inside — the sheet
29
+ * body. Drags, nudges and resizes are clamped so no edge leaves it.
30
+ */
13
31
  bounds?: DraggableBounds;
14
32
  scale?: number;
15
33
  resizable?: boolean;
16
34
  draggable?: boolean;
17
35
  rotatable?: boolean;
18
36
  /**
19
- * Callback when user moves an embed
37
+ * Callback when user moves an embed. `width` / `height` are the frame's
38
+ * on-screen size (grid pixel space), so the host can re-anchor its
39
+ * bottom-right corner too.
20
40
  * @param top
21
41
  * @param left
22
42
  */
23
- onMove?(id: string | number, x: number, y: number): void;
43
+ onMove?(id: string | number, x: number, y: number, width: number, height: number): void;
24
44
  /**
25
45
  * Callback when user resizes
26
46
  * @param width
@@ -32,12 +52,49 @@ type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "on
32
52
  * @param id
33
53
  */
34
54
  onDelete?(id: string | number): void;
55
+ /**
56
+ * Ctrl/Cmd + D while the embed has focus
57
+ * @param id
58
+ */
59
+ onDuplicate?(id: string | number): void;
60
+ /**
61
+ * Clipboard events while the embed has focus (the grid's cell editor
62
+ * never sees them — the focused embed is their target)
63
+ */
64
+ onCopy?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
65
+ onCut?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
66
+ onPaste?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
67
+ /**
68
+ * Escape: drop the selection and hand focus back to the grid
69
+ * @param id
70
+ */
71
+ onDeselect?(id: string | number): void;
72
+ /**
73
+ * Double-click on the object (Excel opens the format pane; the chart
74
+ * editor here)
75
+ * @param id
76
+ */
77
+ onDoubleClick?(id: string | number): void;
78
+ /**
79
+ * Snap a point (grid pixel space) to the nearest cell corner. Alt-drag / Alt-resize
80
+ * snap through this; without it the modifier is inert.
81
+ */
82
+ snapToGrid?(x: number, y: number): {
83
+ x: number;
84
+ y: number;
85
+ } | undefined;
86
+ /**
87
+ * Right-click, Shift+F10 or the ContextMenu key on the object. Receives
88
+ * the viewport point the menu should open at and the object's element, so
89
+ * the host can return focus to it once the menu closes.
90
+ */
91
+ onRequestContextMenu?(id: string | number, clientX: number, clientY: number, element: HTMLDivElement): void;
35
92
  /**
36
93
  * Anchor cell
37
94
  */
38
95
  anchorCell: CellInterface;
39
96
  children: (width: number, height: number) => React.ReactNode;
40
97
  };
41
- export declare const EmbedDraggable: ({ id, scale, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, resizable, draggable, children, onMove, onResize, onDelete, onMouseMove, onPointerDown, bounds, anchorCell, }: EmbedDraggableProps) => React.JSX.Element;
98
+ export declare const EmbedDraggable: ({ id, scale, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, zIndex, resizable, draggable, children, onMove, onResize, onDelete, onDuplicate, onCopy, onCut, onPaste, onDeselect, onDoubleClick, snapToGrid, onRequestContextMenu, onMouseMove, onPointerDown, bounds, anchorCell, toCell, toOffsetXPixels, toOffsetYPixels, }: EmbedDraggableProps) => React.JSX.Element;
42
99
  export {};
43
100
  //# sourceMappingURL=embed-draggable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,IAAI,GAAG,UAAU,GAAG,UAAU,CAC/B,GAAG;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D,CAAC;AAoBF,eAAO,MAAM,cAAc,GAAI,mNAoB5B,mBAAmB,sBA6KrB,CAAC"}
1
+ {"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAClC,IAAI,GACJ,UAAU,GACV,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,eAAe,CAClB,GAAG;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,CACL,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;;OAIG;IACH,QAAQ,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC5E,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC3E,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC7E;;;OAGG;IACH,UAAU,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE;;;;OAIG;IACH,oBAAoB,CAAC,CACnB,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,IAAI,CAAC;IACR;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D,CAAC;AA4DF,eAAO,MAAM,cAAc,GAAI,uWAgC5B,mBAAmB,sBA8VrB,CAAC"}
@@ -5,9 +5,34 @@ var tslib_1 = require("tslib");
5
5
  var grid_1 = require("@rowsncolumns/grid");
6
6
  var ui_1 = require("@rowsncolumns/ui");
7
7
  var react_1 = tslib_1.__importStar(require("react"));
8
- var react_draggable_1 = tslib_1.__importDefault(require("react-draggable"));
8
+ var react_draggable_1 = require("react-draggable");
9
9
  var react_resizable_1 = require("react-resizable");
10
10
  var use_isomorphic_layout_effect_1 = require("../../hooks/use-isomorphic-layout-effect");
11
+ /** Lifts the selected object over every unselected one (ranks count from 1 per object). */
12
+ var SELECTED_Z_INDEX_LIFT = 100000;
13
+ var ARROW_KEY_DELTAS = {
14
+ ArrowLeft: [-1, 0],
15
+ ArrowRight: [1, 0],
16
+ ArrowUp: [0, -1],
17
+ ArrowDown: [0, 1],
18
+ };
19
+ /** Excel nudges a selected object 1px per arrow press; Shift makes it a coarse step. */
20
+ var NUDGE_STEP = 1;
21
+ var NUDGE_STEP_SHIFT = 10;
22
+ /** Corner handles are two letters ("ne"); edge handles one ("n"). */
23
+ var isCornerHandle = function (handle) { return handle.length === 2; };
24
+ /** Top-left corner that keeps a `width` × `height` object inside `bounds`; the top-left edges win when it does not fit. */
25
+ var clampToBounds = function (x, y, width, height, bounds) {
26
+ var _a, _b, _c, _d;
27
+ return ({
28
+ x: Math.max((_a = bounds === null || bounds === void 0 ? void 0 : bounds.left) !== null && _a !== void 0 ? _a : -Infinity, Math.min(((_b = bounds === null || bounds === void 0 ? void 0 : bounds.right) !== null && _b !== void 0 ? _b : Infinity) - width, x)),
29
+ y: Math.max((_c = bounds === null || bounds === void 0 ? void 0 : bounds.top) !== null && _c !== void 0 ? _c : -Infinity, Math.min(((_d = bounds === null || bounds === void 0 ? void 0 : bounds.bottom) !== null && _d !== void 0 ? _d : Infinity) - height, y)),
30
+ });
31
+ };
32
+ /** Clamp one edge of a resize into `[min, max]`. */
33
+ var clampEdge = function (value, min, max) {
34
+ return Math.min(max !== null && max !== void 0 ? max : Infinity, Math.max(min !== null && min !== void 0 ? min : -Infinity, value));
35
+ };
11
36
  var resizeHandles = [
12
37
  "se",
13
38
  "n",
@@ -20,20 +45,39 @@ var resizeHandles = [
20
45
  ];
21
46
  var EmbedDraggable = function (_a) {
22
47
  var _b, _c;
23
- var id = _a.id, _d = _a.scale, scale = _d === void 0 ? 1 : _d, height = _a.height, width = _a.width, offsetXPixels = _a.offsetXPixels, offsetYPixels = _a.offsetYPixels, isSelected = _a.isSelected, borderColor = _a.borderColor, lockAspectRatio = _a.lockAspectRatio, _e = _a.resizable, resizable = _e === void 0 ? true : _e, _f = _a.draggable, draggable = _f === void 0 ? true : _f, children = _a.children, onMove = _a.onMove, onResize = _a.onResize, onDelete = _a.onDelete, onMouseMove = _a.onMouseMove, onPointerDown = _a.onPointerDown, bounds = _a.bounds, anchorCell = _a.anchorCell;
48
+ var id = _a.id, _d = _a.scale, scale = _d === void 0 ? 1 : _d, height = _a.height, width = _a.width, offsetXPixels = _a.offsetXPixels, offsetYPixels = _a.offsetYPixels, isSelected = _a.isSelected, borderColor = _a.borderColor, lockAspectRatio = _a.lockAspectRatio, zIndex = _a.zIndex, _e = _a.resizable, resizable = _e === void 0 ? true : _e, _f = _a.draggable, draggable = _f === void 0 ? true : _f, children = _a.children, onMove = _a.onMove, onResize = _a.onResize, onDelete = _a.onDelete, onDuplicate = _a.onDuplicate, onCopy = _a.onCopy, onCut = _a.onCut, onPaste = _a.onPaste, onDeselect = _a.onDeselect, onDoubleClick = _a.onDoubleClick, snapToGrid = _a.snapToGrid, onRequestContextMenu = _a.onRequestContextMenu, onMouseMove = _a.onMouseMove, onPointerDown = _a.onPointerDown, bounds = _a.bounds, anchorCell = _a.anchorCell, toCell = _a.toCell, _g = _a.toOffsetXPixels, toOffsetXPixels = _g === void 0 ? 0 : _g, _h = _a.toOffsetYPixels, toOffsetYPixels = _h === void 0 ? 0 : _h;
24
49
  var getCellOffsetFromCoords = (0, grid_1.useGridContext)().getCellOffsetFromCoords;
25
50
  var position = getCellOffsetFromCoords === null || getCellOffsetFromCoords === void 0 ? void 0 : getCellOffsetFromCoords(anchorCell);
26
51
  var x = ((_b = position === null || position === void 0 ? void 0 : position.x) !== null && _b !== void 0 ? _b : 0) + offsetXPixels;
27
52
  var y = ((_c = position === null || position === void 0 ? void 0 : position.y) !== null && _c !== void 0 ? _c : 0) + offsetYPixels;
28
- var _g = tslib_1.__read((0, react_1.useState)(function () { return ({
53
+ // Two anchors: the frame is whatever lies between them (a collapsed span
54
+ // after a delete draws nothing rather than a negative box)
55
+ var toPosition = toCell ? getCellOffsetFromCoords === null || getCellOffsetFromCoords === void 0 ? void 0 : getCellOffsetFromCoords(toCell) : undefined;
56
+ if (toPosition) {
57
+ width = Math.max(0, toPosition.x + toOffsetXPixels - x);
58
+ height = Math.max(0, toPosition.y + toOffsetYPixels - y);
59
+ }
60
+ var _j = tslib_1.__read((0, react_1.useState)(function () { return ({
29
61
  internalWidth: width,
30
62
  internalHeight: height,
31
63
  internalX: x,
32
64
  internalY: y,
33
- }); }), 2), dimensions = _g[0], setDimensions = _g[1];
65
+ }); }), 2), dimensions = _j[0], setDimensions = _j[1];
34
66
  var internalWidth = dimensions.internalWidth, internalHeight = dimensions.internalHeight, internalX = dimensions.internalX, internalY = dimensions.internalY;
35
67
  var incomingDimensionRef = (0, react_1.useRef)(undefined);
36
68
  var nodeRef = (0, react_1.useRef)(null);
69
+ // Geometry currently on screen — what the end-of-gesture callbacks report, independent of
70
+ // whether the last `setDimensions` has rendered yet.
71
+ var appliedRef = (0, react_1.useRef)(dimensions);
72
+ // Where the pointer would have put the object with no snapping. The displayed geometry is
73
+ // derived from it on every event, so a snap never feeds back into the next pointer delta.
74
+ var gestureRef = (0, react_1.useRef)(dimensions);
75
+ // Shift on a corner handle keeps the aspect ratio for the rest of the gesture
76
+ var _k = tslib_1.__read((0, react_1.useState)(false), 2), shiftLocksAspectRatio = _k[0], setShiftLocksAspectRatio = _k[1];
77
+ var commit = (0, react_1.useCallback)(function (next) {
78
+ appliedRef.current = next;
79
+ setDimensions(next);
80
+ }, []);
37
81
  // Focus if selected index changes
38
82
  (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
39
83
  var _a, _b;
@@ -42,46 +86,139 @@ var EmbedDraggable = function (_a) {
42
86
  (_b = nodeRef.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
43
87
  }
44
88
  }, [isSelected]);
45
- // Handle move. Update internal state
46
- var handleMove = (0, react_1.useCallback)(function (e, data) {
47
- setDimensions(function (prev) { return (tslib_1.__assign(tslib_1.__assign({}, prev), { internalX: data.x, internalY: data.y })); });
89
+ // Starts moving
90
+ var handleMoveStart = (0, react_1.useCallback)(function (e) {
91
+ gestureRef.current = tslib_1.__assign({}, appliedRef.current);
92
+ if (e.altKey) {
93
+ // Alt+mousedown must not start a native selection / focus change
94
+ e.preventDefault();
95
+ }
48
96
  }, []);
97
+ // Handle move. Update internal state; Alt snaps the top-left corner to the cell grid
98
+ var handleMove = (0, react_1.useCallback)(function (e, data) {
99
+ var raw = gestureRef.current;
100
+ raw.internalX += data.deltaX;
101
+ raw.internalY += data.deltaY;
102
+ var _a = appliedRef.current, internalWidth = _a.internalWidth, internalHeight = _a.internalHeight;
103
+ var next = clampToBounds(raw.internalX, raw.internalY, internalWidth, internalHeight, bounds);
104
+ if (e.altKey && snapToGrid) {
105
+ var snapped = snapToGrid(next.x, next.y);
106
+ if (snapped) {
107
+ next = clampToBounds(snapped.x, snapped.y, internalWidth, internalHeight, bounds);
108
+ }
109
+ }
110
+ commit(tslib_1.__assign(tslib_1.__assign({}, appliedRef.current), { internalX: next.x, internalY: next.y }));
111
+ }, [bounds, snapToGrid, commit]);
49
112
  // Ends moving
50
- var handleMoveEnd = (0, react_1.useCallback)(function (e, data) {
113
+ var handleMoveEnd = (0, react_1.useCallback)(function () {
51
114
  var _a, _b;
52
- if (((_a = incomingDimensionRef.current) === null || _a === void 0 ? void 0 : _a.x) === data.x &&
53
- ((_b = incomingDimensionRef.current) === null || _b === void 0 ? void 0 : _b.y) === data.y) {
115
+ var _c = appliedRef.current, internalX = _c.internalX, internalY = _c.internalY, internalWidth = _c.internalWidth, internalHeight = _c.internalHeight;
116
+ if (((_a = incomingDimensionRef.current) === null || _a === void 0 ? void 0 : _a.x) === internalX &&
117
+ ((_b = incomingDimensionRef.current) === null || _b === void 0 ? void 0 : _b.y) === internalY) {
54
118
  return;
55
119
  }
56
- onMove === null || onMove === void 0 ? void 0 : onMove(id, data.x, data.y);
120
+ onMove === null || onMove === void 0 ? void 0 : onMove(id, internalX, internalY, internalWidth, internalHeight);
57
121
  }, [onMove, id]);
58
- // Resizing: Update internal state
122
+ // Arrow keys nudge the object by whole pixels, clamped like a drag is
123
+ var handleNudge = (0, react_1.useCallback)(function (dx, dy) {
124
+ var _a = clampToBounds(internalX + dx, internalY + dy, internalWidth, internalHeight, bounds), nextX = _a.x, nextY = _a.y;
125
+ if (nextX === internalX && nextY === internalY) {
126
+ return;
127
+ }
128
+ commit(tslib_1.__assign(tslib_1.__assign({}, appliedRef.current), { internalX: nextX, internalY: nextY }));
129
+ onMove === null || onMove === void 0 ? void 0 : onMove(id, nextX, nextY, internalWidth, internalHeight);
130
+ }, [
131
+ bounds,
132
+ internalX,
133
+ internalY,
134
+ internalWidth,
135
+ internalHeight,
136
+ onMove,
137
+ id,
138
+ commit,
139
+ ]);
140
+ // Starts resizing
141
+ var handleResizeStart = (0, react_1.useCallback)(function (e, _a) {
142
+ var handle = _a.handle;
143
+ gestureRef.current = tslib_1.__assign({}, appliedRef.current);
144
+ setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(e.shiftKey));
145
+ }, []);
146
+ // Resizing: Update internal state; Alt snaps the dragged edges to the cell grid
59
147
  var handleResize = (0, react_1.useCallback)(function (e, _a) {
148
+ var _b, _c, _d, _e;
60
149
  var size = _a.size, handle = _a.handle;
61
- setDimensions(function (prev) {
62
- var internalY = prev.internalY;
63
- var internalX = prev.internalX;
64
- var deltaHeight = size.height - prev.internalHeight;
65
- var deltaWidth = size.width - prev.internalWidth;
66
- if (handle[0] === "n") {
67
- internalY -= deltaHeight;
150
+ var _f = e, altKey = _f.altKey, shiftKey = _f.shiftKey;
151
+ setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(shiftKey));
152
+ // `size` is the rendered size (`dimensions`) plus this event's pointer delta
153
+ var deltaHeight = size.height - dimensions.internalHeight;
154
+ var deltaWidth = size.width - dimensions.internalWidth;
155
+ var raw = gestureRef.current;
156
+ var movesTop = handle[0] === "n";
157
+ var movesLeft = handle[handle.length - 1] === "w";
158
+ raw.internalWidth += deltaWidth;
159
+ raw.internalHeight += deltaHeight;
160
+ if (movesTop) {
161
+ raw.internalY -= deltaHeight;
162
+ }
163
+ if (movesLeft) {
164
+ raw.internalX -= deltaWidth;
165
+ }
166
+ var movesRight = handle[handle.length - 1] === "e";
167
+ var movesBottom = handle[0] === "s";
168
+ // The dragged edges stop at the sheet body; the opposite edges never move
169
+ var rawRight = raw.internalX + raw.internalWidth;
170
+ var rawBottom = raw.internalY + raw.internalHeight;
171
+ var left = movesLeft
172
+ ? clampEdge(raw.internalX, bounds === null || bounds === void 0 ? void 0 : bounds.left, undefined)
173
+ : raw.internalX;
174
+ var top = movesTop
175
+ ? clampEdge(raw.internalY, bounds === null || bounds === void 0 ? void 0 : bounds.top, undefined)
176
+ : raw.internalY;
177
+ var right = movesRight
178
+ ? clampEdge(rawRight, undefined, bounds === null || bounds === void 0 ? void 0 : bounds.right)
179
+ : rawRight;
180
+ var bottom = movesBottom
181
+ ? clampEdge(rawBottom, undefined, bounds === null || bounds === void 0 ? void 0 : bounds.bottom)
182
+ : rawBottom;
183
+ if (altKey && snapToGrid) {
184
+ var snappedLeft = movesLeft ? (_b = snapToGrid(left, top)) === null || _b === void 0 ? void 0 : _b.x : undefined;
185
+ var snappedRight = movesRight ? (_c = snapToGrid(right, top)) === null || _c === void 0 ? void 0 : _c.x : undefined;
186
+ var snappedTop = movesTop ? (_d = snapToGrid(left, top)) === null || _d === void 0 ? void 0 : _d.y : undefined;
187
+ var snappedBottom = movesBottom
188
+ ? (_e = snapToGrid(left, bottom)) === null || _e === void 0 ? void 0 : _e.y
189
+ : undefined;
190
+ // A snap that would collapse the object keeps the unsnapped edge
191
+ if (snappedLeft !== undefined && snappedLeft < right) {
192
+ left = snappedLeft;
193
+ }
194
+ if (snappedRight !== undefined && snappedRight > left) {
195
+ right = snappedRight;
196
+ }
197
+ if (snappedTop !== undefined && snappedTop < bottom) {
198
+ top = snappedTop;
68
199
  }
69
- if (handle[handle.length - 1] === "w") {
70
- internalX -= deltaWidth;
200
+ if (snappedBottom !== undefined && snappedBottom > top) {
201
+ bottom = snappedBottom;
71
202
  }
72
- return tslib_1.__assign(tslib_1.__assign({}, prev), { internalX: internalX, internalY: internalY, internalHeight: size.height, internalWidth: size.width });
203
+ }
204
+ commit({
205
+ internalX: left,
206
+ internalY: top,
207
+ internalWidth: right - left,
208
+ internalHeight: bottom - top,
73
209
  });
74
- }, []);
210
+ }, [dimensions, snapToGrid, commit]);
75
211
  // Resize ends
76
- var handleResizeEnd = (0, react_1.useCallback)(function (e, _a) {
77
- var _b, _c;
78
- var size = _a.size;
79
- if (((_b = incomingDimensionRef.current) === null || _b === void 0 ? void 0 : _b.width) === size.width &&
80
- ((_c = incomingDimensionRef.current) === null || _c === void 0 ? void 0 : _c.height) === size.height) {
212
+ var handleResizeEnd = (0, react_1.useCallback)(function () {
213
+ var _a, _b;
214
+ setShiftLocksAspectRatio(false);
215
+ var _c = appliedRef.current, internalX = _c.internalX, internalY = _c.internalY, internalWidth = _c.internalWidth, internalHeight = _c.internalHeight;
216
+ if (((_a = incomingDimensionRef.current) === null || _a === void 0 ? void 0 : _a.width) === internalWidth &&
217
+ ((_b = incomingDimensionRef.current) === null || _b === void 0 ? void 0 : _b.height) === internalHeight) {
81
218
  return;
82
219
  }
83
- onResize === null || onResize === void 0 ? void 0 : onResize(id, dimensions.internalX, dimensions.internalY, size.width / scale, size.height / scale);
84
- }, [onResize, id, scale, dimensions]);
220
+ onResize === null || onResize === void 0 ? void 0 : onResize(id, internalX, internalY, internalWidth / scale, internalHeight / scale);
221
+ }, [onResize, id, scale]);
85
222
  // When state is saved, update internal state
86
223
  (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
87
224
  incomingDimensionRef.current = {
@@ -90,29 +227,67 @@ var EmbedDraggable = function (_a) {
90
227
  width: width,
91
228
  height: height,
92
229
  };
93
- setDimensions({
230
+ commit({
94
231
  internalX: x,
95
232
  internalY: y,
96
233
  internalHeight: height,
97
234
  internalWidth: width,
98
235
  });
99
- }, [width, height, x, y]);
100
- return (react_1.default.createElement(react_draggable_1.default, { nodeRef: nodeRef, position: {
101
- x: internalX,
102
- y: internalY,
103
- }, bounds: bounds, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore, .plot-container .draglayer", scale: 1, disabled: !draggable },
104
- react_1.default.createElement(react_resizable_1.Resizable, { width: internalWidth, height: internalHeight, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
236
+ }, [width, height, x, y, commit]);
237
+ return (react_1.default.createElement(react_draggable_1.DraggableCore, { nodeRef: nodeRef, onStart: handleMoveStart, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore", scale: 1, disabled: !draggable },
238
+ react_1.default.createElement(react_resizable_1.Resizable, { width: internalWidth, height: internalHeight, onResizeStart: handleResizeStart, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio || shiftLocksAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
105
239
  react_1.default.createElement("div", { className: (0, ui_1.cn)("text-rnc-foreground text-sm pointer-events-auto border border-solid border-transparent flex select-none box-content absolute rnc-embed-component outline-none", isSelected ? "[&_.react-resizable-handle]:bg-[#1a73e8]" : undefined, isSelected ? "rnc-embed-active" : undefined), style: {
106
240
  width: internalWidth,
107
241
  height: internalHeight,
242
+ transform: "translate(".concat(internalX, "px, ").concat(internalY, "px)"),
108
243
  borderColor: borderColor,
109
- zIndex: isSelected ? 1 : undefined,
244
+ zIndex: isSelected
245
+ ? (zIndex !== null && zIndex !== void 0 ? zIndex : 0) + SELECTED_Z_INDEX_LIFT
246
+ : zIndex,
110
247
  }, tabIndex: 0, onKeyDown: function (e) {
111
248
  if (e.key === "Backspace" || e.key === "Delete") {
112
249
  onDelete === null || onDelete === void 0 ? void 0 : onDelete(id);
250
+ return;
113
251
  }
114
- }, ref: nodeRef, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onContextMenu: function (e) {
252
+ if ((e.metaKey || e.ctrlKey) &&
253
+ !e.altKey &&
254
+ !e.shiftKey &&
255
+ e.key.toLowerCase() === "d" &&
256
+ onDuplicate) {
257
+ e.preventDefault();
258
+ onDuplicate(id);
259
+ return;
260
+ }
261
+ if (e.key === "Escape") {
262
+ e.preventDefault();
263
+ onDeselect === null || onDeselect === void 0 ? void 0 : onDeselect(id);
264
+ return;
265
+ }
266
+ if (e.key === "Alt") {
267
+ // Alt is a snap modifier here; keep it from opening the browser menu bar
268
+ e.preventDefault();
269
+ return;
270
+ }
271
+ var delta = ARROW_KEY_DELTAS[e.key];
272
+ if (delta && draggable) {
273
+ // The grid must not scroll while the object is being nudged
274
+ e.preventDefault();
275
+ var step = e.shiftKey ? NUDGE_STEP_SHIFT : NUDGE_STEP;
276
+ handleNudge(delta[0] * step, delta[1] * step);
277
+ return;
278
+ }
279
+ if (e.key === "ContextMenu" || (e.key === "F10" && e.shiftKey)) {
280
+ e.preventDefault();
281
+ var rect = e.currentTarget.getBoundingClientRect();
282
+ onRequestContextMenu === null || onRequestContextMenu === void 0 ? void 0 : onRequestContextMenu(id, rect.left, rect.top, e.currentTarget);
283
+ }
284
+ }, onCopy: onCopy ? function (e) { return onCopy(id, e); } : undefined, onCut: onCut ? function (e) { return onCut(id, e); } : undefined, onPaste: onPaste ? function (e) { return onPaste(id, e); } : undefined, ref: nodeRef, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick ? function () { return onDoubleClick(id); } : undefined, onContextMenu: function (e) {
115
285
  e.stopPropagation();
286
+ if (!onRequestContextMenu) {
287
+ return;
288
+ }
289
+ e.preventDefault();
290
+ onRequestContextMenu(id, e.clientX, e.clientY, e.currentTarget);
116
291
  } }, children(internalWidth, internalHeight)))));
117
292
  };
118
293
  exports.EmbedDraggable = EmbedDraggable;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Excel groups a date column's AutoFilter checklist into a Year → Month → Day
3
+ * tree with tri-state parents. The checklist only knows each cell's DISPLAYED
4
+ * text, so a value is treated as a date when it parses as one AND looks like
5
+ * one — digits separated by `/ - .` or a month name — which keeps plain
6
+ * numbers ("2026") and text out. The tree is built only when every non-blank
7
+ * value in the column is such a date (a mixed column stays a flat list, as a
8
+ * text column would). Newest first at every level, matching Excel.
9
+ */
10
+ export type DateTreeNode = {
11
+ /** Stable key: `y:2026`, `m:2026-09`, `d:2026-09-29`. */
12
+ key: string;
13
+ label: string;
14
+ /** Every checklist value (display text) under this node. */
15
+ values: string[];
16
+ children?: DateTreeNode[];
17
+ };
18
+ /** The calendar date a checklist value displays, or `undefined` when it is not a date. */
19
+ export declare const parseFilterDateValue: (value: string) => Date | undefined;
20
+ /**
21
+ * Year → Month → Day nodes for `values`, or `undefined` when the column is
22
+ * not a date column. `blankLabel` (the "(Blanks)" entry) is skipped; callers
23
+ * render it beside the tree.
24
+ */
25
+ export declare const buildDateTree: (values: readonly string[], blankLabel: string) => DateTreeNode[] | undefined;
26
+ /** `true` all checked, `false` none, `"mixed"` some — the tri-state of a node or the whole list. */
27
+ export declare const triState: (values: readonly string[], isVisible: (value: string) => boolean) => boolean | "mixed";
28
+ //# sourceMappingURL=date-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-tree.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/date-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAqBF,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,IAAI,GAAG,SAS3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,MAAM,EAAE,EACzB,YAAY,MAAM,KACjB,YAAY,EAAE,GAAG,SAgDnB,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,QAAQ,GACnB,QAAQ,SAAS,MAAM,EAAE,EACzB,WAAW,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,KACpC,OAAO,GAAG,OAOZ,CAAC"}