@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,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"}
@@ -1,9 +1,29 @@
1
1
  import { getOwnerDocument, useGridContext } from "@rowsncolumns/grid";
2
2
  import { cn } from "@rowsncolumns/ui";
3
3
  import React, { useCallback, useRef, useState } from "react";
4
- import Draggable from "react-draggable";
4
+ import { DraggableCore } from "react-draggable";
5
5
  import { Resizable } from "react-resizable";
6
6
  import { useIsomorphicLayoutEffect } from "../../hooks/use-isomorphic-layout-effect";
7
+ /** Lifts the selected object over every unselected one (ranks count from 1 per object). */
8
+ const SELECTED_Z_INDEX_LIFT = 100_000;
9
+ const ARROW_KEY_DELTAS = {
10
+ ArrowLeft: [-1, 0],
11
+ ArrowRight: [1, 0],
12
+ ArrowUp: [0, -1],
13
+ ArrowDown: [0, 1],
14
+ };
15
+ /** Excel nudges a selected object 1px per arrow press; Shift makes it a coarse step. */
16
+ const NUDGE_STEP = 1;
17
+ const NUDGE_STEP_SHIFT = 10;
18
+ /** Corner handles are two letters ("ne"); edge handles one ("n"). */
19
+ const isCornerHandle = (handle) => handle.length === 2;
20
+ /** Top-left corner that keeps a `width` × `height` object inside `bounds`; the top-left edges win when it does not fit. */
21
+ const clampToBounds = (x, y, width, height, bounds) => ({
22
+ x: Math.max(bounds?.left ?? -Infinity, Math.min((bounds?.right ?? Infinity) - width, x)),
23
+ y: Math.max(bounds?.top ?? -Infinity, Math.min((bounds?.bottom ?? Infinity) - height, y)),
24
+ });
25
+ /** Clamp one edge of a resize into `[min, max]`. */
26
+ const clampEdge = (value, min, max) => Math.min(max ?? Infinity, Math.max(min ?? -Infinity, value));
7
27
  const resizeHandles = [
8
28
  "se",
9
29
  "n",
@@ -14,11 +34,18 @@ const resizeHandles = [
14
34
  "nw",
15
35
  "sw",
16
36
  ];
17
- export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, resizable = true, draggable = true, children, onMove, onResize, onDelete, onMouseMove, onPointerDown, bounds, anchorCell, }) => {
37
+ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, zIndex, resizable = true, draggable = true, children, onMove, onResize, onDelete, onDuplicate, onCopy, onCut, onPaste, onDeselect, onDoubleClick, snapToGrid, onRequestContextMenu, onMouseMove, onPointerDown, bounds, anchorCell, toCell, toOffsetXPixels = 0, toOffsetYPixels = 0, }) => {
18
38
  const { getCellOffsetFromCoords } = useGridContext();
19
39
  const position = getCellOffsetFromCoords?.(anchorCell);
20
40
  const x = (position?.x ?? 0) + offsetXPixels;
21
41
  const y = (position?.y ?? 0) + offsetYPixels;
42
+ // Two anchors: the frame is whatever lies between them (a collapsed span
43
+ // after a delete draws nothing rather than a negative box)
44
+ const toPosition = toCell ? getCellOffsetFromCoords?.(toCell) : undefined;
45
+ if (toPosition) {
46
+ width = Math.max(0, toPosition.x + toOffsetXPixels - x);
47
+ height = Math.max(0, toPosition.y + toOffsetYPixels - y);
48
+ }
22
49
  const [dimensions, setDimensions] = useState(() => ({
23
50
  internalWidth: width,
24
51
  internalHeight: height,
@@ -28,6 +55,18 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
28
55
  const { internalWidth, internalHeight, internalX, internalY } = dimensions;
29
56
  const incomingDimensionRef = useRef(undefined);
30
57
  const nodeRef = useRef(null);
58
+ // Geometry currently on screen — what the end-of-gesture callbacks report, independent of
59
+ // whether the last `setDimensions` has rendered yet.
60
+ const appliedRef = useRef(dimensions);
61
+ // Where the pointer would have put the object with no snapping. The displayed geometry is
62
+ // derived from it on every event, so a snap never feeds back into the next pointer delta.
63
+ const gestureRef = useRef(dimensions);
64
+ // Shift on a corner handle keeps the aspect ratio for the rest of the gesture
65
+ const [shiftLocksAspectRatio, setShiftLocksAspectRatio] = useState(false);
66
+ const commit = useCallback((next) => {
67
+ appliedRef.current = next;
68
+ setDimensions(next);
69
+ }, []);
31
70
  // Focus if selected index changes
32
71
  useIsomorphicLayoutEffect(() => {
33
72
  if (isSelected &&
@@ -35,52 +74,134 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
35
74
  nodeRef.current?.focus({ preventScroll: true });
36
75
  }
37
76
  }, [isSelected]);
38
- // Handle move. Update internal state
39
- const handleMove = useCallback((e, data) => {
40
- setDimensions((prev) => ({
41
- ...prev,
42
- internalX: data.x,
43
- internalY: data.y,
44
- }));
77
+ // Starts moving
78
+ const handleMoveStart = useCallback((e) => {
79
+ gestureRef.current = { ...appliedRef.current };
80
+ if (e.altKey) {
81
+ // Alt+mousedown must not start a native selection / focus change
82
+ e.preventDefault();
83
+ }
45
84
  }, []);
85
+ // Handle move. Update internal state; Alt snaps the top-left corner to the cell grid
86
+ const handleMove = useCallback((e, data) => {
87
+ const raw = gestureRef.current;
88
+ raw.internalX += data.deltaX;
89
+ raw.internalY += data.deltaY;
90
+ const { internalWidth, internalHeight } = appliedRef.current;
91
+ let next = clampToBounds(raw.internalX, raw.internalY, internalWidth, internalHeight, bounds);
92
+ if (e.altKey && snapToGrid) {
93
+ const snapped = snapToGrid(next.x, next.y);
94
+ if (snapped) {
95
+ next = clampToBounds(snapped.x, snapped.y, internalWidth, internalHeight, bounds);
96
+ }
97
+ }
98
+ commit({ ...appliedRef.current, internalX: next.x, internalY: next.y });
99
+ }, [bounds, snapToGrid, commit]);
46
100
  // Ends moving
47
- const handleMoveEnd = useCallback((e, data) => {
48
- if (incomingDimensionRef.current?.x === data.x &&
49
- incomingDimensionRef.current?.y === data.y) {
101
+ const handleMoveEnd = useCallback(() => {
102
+ const { internalX, internalY, internalWidth, internalHeight } = appliedRef.current;
103
+ if (incomingDimensionRef.current?.x === internalX &&
104
+ incomingDimensionRef.current?.y === internalY) {
50
105
  return;
51
106
  }
52
- onMove?.(id, data.x, data.y);
107
+ onMove?.(id, internalX, internalY, internalWidth, internalHeight);
53
108
  }, [onMove, id]);
54
- // Resizing: Update internal state
109
+ // Arrow keys nudge the object by whole pixels, clamped like a drag is
110
+ const handleNudge = useCallback((dx, dy) => {
111
+ const { x: nextX, y: nextY } = clampToBounds(internalX + dx, internalY + dy, internalWidth, internalHeight, bounds);
112
+ if (nextX === internalX && nextY === internalY) {
113
+ return;
114
+ }
115
+ commit({ ...appliedRef.current, internalX: nextX, internalY: nextY });
116
+ onMove?.(id, nextX, nextY, internalWidth, internalHeight);
117
+ }, [
118
+ bounds,
119
+ internalX,
120
+ internalY,
121
+ internalWidth,
122
+ internalHeight,
123
+ onMove,
124
+ id,
125
+ commit,
126
+ ]);
127
+ // Starts resizing
128
+ const handleResizeStart = useCallback((e, { handle }) => {
129
+ gestureRef.current = { ...appliedRef.current };
130
+ setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(e.shiftKey));
131
+ }, []);
132
+ // Resizing: Update internal state; Alt snaps the dragged edges to the cell grid
55
133
  const handleResize = useCallback((e, { size, handle }) => {
56
- setDimensions((prev) => {
57
- let internalY = prev.internalY;
58
- let internalX = prev.internalX;
59
- const deltaHeight = size.height - prev.internalHeight;
60
- const deltaWidth = size.width - prev.internalWidth;
61
- if (handle[0] === "n") {
62
- internalY -= deltaHeight;
134
+ const { altKey, shiftKey } = e;
135
+ setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(shiftKey));
136
+ // `size` is the rendered size (`dimensions`) plus this event's pointer delta
137
+ const deltaHeight = size.height - dimensions.internalHeight;
138
+ const deltaWidth = size.width - dimensions.internalWidth;
139
+ const raw = gestureRef.current;
140
+ const movesTop = handle[0] === "n";
141
+ const movesLeft = handle[handle.length - 1] === "w";
142
+ raw.internalWidth += deltaWidth;
143
+ raw.internalHeight += deltaHeight;
144
+ if (movesTop) {
145
+ raw.internalY -= deltaHeight;
146
+ }
147
+ if (movesLeft) {
148
+ raw.internalX -= deltaWidth;
149
+ }
150
+ const movesRight = handle[handle.length - 1] === "e";
151
+ const movesBottom = handle[0] === "s";
152
+ // The dragged edges stop at the sheet body; the opposite edges never move
153
+ const rawRight = raw.internalX + raw.internalWidth;
154
+ const rawBottom = raw.internalY + raw.internalHeight;
155
+ let left = movesLeft
156
+ ? clampEdge(raw.internalX, bounds?.left, undefined)
157
+ : raw.internalX;
158
+ let top = movesTop
159
+ ? clampEdge(raw.internalY, bounds?.top, undefined)
160
+ : raw.internalY;
161
+ let right = movesRight
162
+ ? clampEdge(rawRight, undefined, bounds?.right)
163
+ : rawRight;
164
+ let bottom = movesBottom
165
+ ? clampEdge(rawBottom, undefined, bounds?.bottom)
166
+ : rawBottom;
167
+ if (altKey && snapToGrid) {
168
+ const snappedLeft = movesLeft ? snapToGrid(left, top)?.x : undefined;
169
+ const snappedRight = movesRight ? snapToGrid(right, top)?.x : undefined;
170
+ const snappedTop = movesTop ? snapToGrid(left, top)?.y : undefined;
171
+ const snappedBottom = movesBottom
172
+ ? snapToGrid(left, bottom)?.y
173
+ : undefined;
174
+ // A snap that would collapse the object keeps the unsnapped edge
175
+ if (snappedLeft !== undefined && snappedLeft < right) {
176
+ left = snappedLeft;
177
+ }
178
+ if (snappedRight !== undefined && snappedRight > left) {
179
+ right = snappedRight;
180
+ }
181
+ if (snappedTop !== undefined && snappedTop < bottom) {
182
+ top = snappedTop;
63
183
  }
64
- if (handle[handle.length - 1] === "w") {
65
- internalX -= deltaWidth;
184
+ if (snappedBottom !== undefined && snappedBottom > top) {
185
+ bottom = snappedBottom;
66
186
  }
67
- return {
68
- ...prev,
69
- internalX,
70
- internalY,
71
- internalHeight: size.height,
72
- internalWidth: size.width,
73
- };
187
+ }
188
+ commit({
189
+ internalX: left,
190
+ internalY: top,
191
+ internalWidth: right - left,
192
+ internalHeight: bottom - top,
74
193
  });
75
- }, []);
194
+ }, [dimensions, snapToGrid, commit]);
76
195
  // Resize ends
77
- const handleResizeEnd = useCallback((e, { size }) => {
78
- if (incomingDimensionRef.current?.width === size.width &&
79
- incomingDimensionRef.current?.height === size.height) {
196
+ const handleResizeEnd = useCallback(() => {
197
+ setShiftLocksAspectRatio(false);
198
+ const { internalX, internalY, internalWidth, internalHeight } = appliedRef.current;
199
+ if (incomingDimensionRef.current?.width === internalWidth &&
200
+ incomingDimensionRef.current?.height === internalHeight) {
80
201
  return;
81
202
  }
82
- onResize?.(id, dimensions.internalX, dimensions.internalY, size.width / scale, size.height / scale);
83
- }, [onResize, id, scale, dimensions]);
203
+ onResize?.(id, internalX, internalY, internalWidth / scale, internalHeight / scale);
204
+ }, [onResize, id, scale]);
84
205
  // When state is saved, update internal state
85
206
  useIsomorphicLayoutEffect(() => {
86
207
  incomingDimensionRef.current = {
@@ -89,28 +210,66 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
89
210
  width,
90
211
  height,
91
212
  };
92
- setDimensions({
213
+ commit({
93
214
  internalX: x,
94
215
  internalY: y,
95
216
  internalHeight: height,
96
217
  internalWidth: width,
97
218
  });
98
- }, [width, height, x, y]);
99
- return (React.createElement(Draggable, { nodeRef: nodeRef, position: {
100
- x: internalX,
101
- y: internalY,
102
- }, bounds: bounds, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore, .plot-container .draglayer", scale: 1, disabled: !draggable },
103
- React.createElement(Resizable, { width: internalWidth, height: internalHeight, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
219
+ }, [width, height, x, y, commit]);
220
+ return (React.createElement(DraggableCore, { nodeRef: nodeRef, onStart: handleMoveStart, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore", scale: 1, disabled: !draggable },
221
+ React.createElement(Resizable, { width: internalWidth, height: internalHeight, onResizeStart: handleResizeStart, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio || shiftLocksAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
104
222
  React.createElement("div", { className: 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: {
105
223
  width: internalWidth,
106
224
  height: internalHeight,
225
+ transform: `translate(${internalX}px, ${internalY}px)`,
107
226
  borderColor,
108
- zIndex: isSelected ? 1 : undefined,
227
+ zIndex: isSelected
228
+ ? (zIndex ?? 0) + SELECTED_Z_INDEX_LIFT
229
+ : zIndex,
109
230
  }, tabIndex: 0, onKeyDown: (e) => {
110
231
  if (e.key === "Backspace" || e.key === "Delete") {
111
232
  onDelete?.(id);
233
+ return;
234
+ }
235
+ if ((e.metaKey || e.ctrlKey) &&
236
+ !e.altKey &&
237
+ !e.shiftKey &&
238
+ e.key.toLowerCase() === "d" &&
239
+ onDuplicate) {
240
+ e.preventDefault();
241
+ onDuplicate(id);
242
+ return;
112
243
  }
113
- }, ref: nodeRef, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onContextMenu: (e) => {
244
+ if (e.key === "Escape") {
245
+ e.preventDefault();
246
+ onDeselect?.(id);
247
+ return;
248
+ }
249
+ if (e.key === "Alt") {
250
+ // Alt is a snap modifier here; keep it from opening the browser menu bar
251
+ e.preventDefault();
252
+ return;
253
+ }
254
+ const delta = ARROW_KEY_DELTAS[e.key];
255
+ if (delta && draggable) {
256
+ // The grid must not scroll while the object is being nudged
257
+ e.preventDefault();
258
+ const step = e.shiftKey ? NUDGE_STEP_SHIFT : NUDGE_STEP;
259
+ handleNudge(delta[0] * step, delta[1] * step);
260
+ return;
261
+ }
262
+ if (e.key === "ContextMenu" || (e.key === "F10" && e.shiftKey)) {
263
+ e.preventDefault();
264
+ const rect = e.currentTarget.getBoundingClientRect();
265
+ onRequestContextMenu?.(id, rect.left, rect.top, e.currentTarget);
266
+ }
267
+ }, onCopy: onCopy ? (e) => onCopy(id, e) : undefined, onCut: onCut ? (e) => onCut(id, e) : undefined, onPaste: onPaste ? (e) => onPaste(id, e) : undefined, ref: nodeRef, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick ? () => onDoubleClick(id) : undefined, onContextMenu: (e) => {
114
268
  e.stopPropagation();
269
+ if (!onRequestContextMenu) {
270
+ return;
271
+ }
272
+ e.preventDefault();
273
+ onRequestContextMenu(id, e.clientX, e.clientY, e.currentTarget);
115
274
  } }, children(internalWidth, internalHeight)))));
116
275
  };
@@ -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"}
@@ -0,0 +1,107 @@
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
+ const MIN_YEAR = 1900;
11
+ const MAX_YEAR = 2199;
12
+ const DATE_SHAPE = /(\d[/.\-]\d)|([A-Za-z]{3,}.*\d)|(\d.*[A-Za-z]{3,})/;
13
+ const MONTH_NAMES = [
14
+ "January",
15
+ "February",
16
+ "March",
17
+ "April",
18
+ "May",
19
+ "June",
20
+ "July",
21
+ "August",
22
+ "September",
23
+ "October",
24
+ "November",
25
+ "December",
26
+ ];
27
+ /** The calendar date a checklist value displays, or `undefined` when it is not a date. */
28
+ export const parseFilterDateValue = (value) => {
29
+ const trimmed = value.trim();
30
+ if (!trimmed || !DATE_SHAPE.test(trimmed))
31
+ return undefined;
32
+ const parsed = new Date(trimmed);
33
+ const time = parsed.getTime();
34
+ if (Number.isNaN(time))
35
+ return undefined;
36
+ const year = parsed.getFullYear();
37
+ if (year < MIN_YEAR || year > MAX_YEAR)
38
+ return undefined;
39
+ return parsed;
40
+ };
41
+ /**
42
+ * Year → Month → Day nodes for `values`, or `undefined` when the column is
43
+ * not a date column. `blankLabel` (the "(Blanks)" entry) is skipped; callers
44
+ * render it beside the tree.
45
+ */
46
+ export const buildDateTree = (values, blankLabel) => {
47
+ const dated = [];
48
+ for (const value of values) {
49
+ if (value === blankLabel)
50
+ continue;
51
+ const date = parseFilterDateValue(value);
52
+ if (!date)
53
+ return undefined;
54
+ dated.push({ value, date });
55
+ }
56
+ if (!dated.length)
57
+ return undefined;
58
+ const years = new Map();
59
+ for (const { value, date } of dated) {
60
+ const y = date.getFullYear();
61
+ const m = date.getMonth();
62
+ const d = date.getDate();
63
+ const months = years.get(y) ?? new Map();
64
+ years.set(y, months);
65
+ const days = months.get(m) ?? new Map();
66
+ months.set(m, days);
67
+ const bucket = days.get(d) ?? [];
68
+ days.set(d, bucket);
69
+ if (!bucket.includes(value))
70
+ bucket.push(value);
71
+ }
72
+ const desc = (a, b) => b - a;
73
+ return [...years.keys()].sort(desc).map((y) => {
74
+ const months = years.get(y);
75
+ const monthNodes = [...months.keys()].sort(desc).map((m) => {
76
+ const days = months.get(m);
77
+ const dayNodes = [...days.keys()].sort(desc).map((d) => ({
78
+ key: `d:${y}-${m + 1}-${d}`,
79
+ label: String(d),
80
+ values: days.get(d),
81
+ }));
82
+ return {
83
+ key: `m:${y}-${m + 1}`,
84
+ label: MONTH_NAMES[m],
85
+ values: dayNodes.flatMap((node) => node.values),
86
+ children: dayNodes,
87
+ };
88
+ });
89
+ return {
90
+ key: `y:${y}`,
91
+ label: String(y),
92
+ values: monthNodes.flatMap((node) => node.values),
93
+ children: monthNodes,
94
+ };
95
+ });
96
+ };
97
+ /** `true` all checked, `false` none, `"mixed"` some — the tri-state of a node or the whole list. */
98
+ export const triState = (values, isVisible) => {
99
+ let checked = 0;
100
+ for (const value of values) {
101
+ if (isVisible(value))
102
+ checked++;
103
+ }
104
+ if (checked === 0)
105
+ return values.length === 0 ? true : false;
106
+ return checked === values.length ? true : "mixed";
107
+ };
@@ -1,5 +1,8 @@
1
1
  import React from "react";
2
- import type { ConditionType } from "../../types";
2
+ import type { ConditionType, FilterConditionJoin } from "../../types";
3
+ /** Excel's "Top 10…" AutoFilter: the four `NUMBER_TOP_*` / `NUMBER_BOTTOM_*` condition types. */
4
+ export declare const isTop10ConditionType: (type: ConditionType | undefined) => type is "NUMBER_TOP_N" | "NUMBER_BOTTOM_N" | "NUMBER_TOP_PERCENT" | "NUMBER_BOTTOM_PERCENT";
5
+ export declare const top10ConditionType: (direction: "top" | "bottom", unit: "items" | "percent") => ConditionType;
3
6
  type FilterByConditionProps = {
4
7
  conditionType?: ConditionType;
5
8
  fromValue: string;
@@ -7,7 +10,16 @@ type FilterByConditionProps = {
7
10
  onChangeFromValue(value: string): void;
8
11
  onChangeToValue(value: string): void;
9
12
  onChangeConditionType?(type: ConditionType | undefined): void;
13
+ /** Excel's Custom AutoFilter second clause and its And / Or join. */
14
+ condition2Type?: ConditionType;
15
+ condition2From: string;
16
+ condition2To: string;
17
+ conditionJoin: FilterConditionJoin;
18
+ onChangeCondition2Type(type: ConditionType | undefined): void;
19
+ onChangeCondition2From(value: string): void;
20
+ onChangeCondition2To(value: string): void;
21
+ onChangeConditionJoin(join: FilterConditionJoin): void;
10
22
  };
11
- export declare const FilterByCondition: ({ conditionType, fromValue, toValue, onChangeToValue, onChangeFromValue, onChangeConditionType, }: FilterByConditionProps) => React.JSX.Element;
23
+ export declare const FilterByCondition: ({ conditionType, fromValue, toValue, onChangeToValue, onChangeFromValue, onChangeConditionType, condition2Type, condition2From, condition2To, conditionJoin, onChangeCondition2Type, onChangeCondition2From, onChangeCondition2To, onChangeConditionJoin, }: FilterByConditionProps) => React.JSX.Element;
12
24
  export {};
13
25
  //# sourceMappingURL=filter-by-condition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-by-condition.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-condition.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,sBAAsB,GAAG;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,mGAO/B,sBAAsB,sBA2ExB,CAAC"}
1
+ {"version":3,"file":"filter-by-condition.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-condition.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,iGAAiG;AACjG,eAAO,MAAM,oBAAoB,GAAI,MAAM,aAAa,GAAG,SAAS,gGAIlC,CAAC;AAEnC,eAAO,MAAM,kBAAkB,GAC7B,WAAW,KAAK,GAAG,QAAQ,EAC3B,MAAM,OAAO,GAAG,SAAS,KACxB,aAO4B,CAAC;AAchC,KAAK,sBAAsB,GAAG;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9D,qEAAqE;IACrE,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9D,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxD,CAAC;AAsKF,eAAO,MAAM,iBAAiB,GAAI,6PAe/B,sBAAsB,sBAuFxB,CAAC"}