@rowsncolumns/spreadsheet 10.3.1 → 10.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
  2. package/dist/cjs/api/banded-ranges.js +40 -14
  3. package/dist/cjs/api/calculated-column-fill.d.ts +43 -0
  4. package/dist/cjs/api/calculated-column-fill.d.ts.map +1 -0
  5. package/dist/cjs/api/calculated-column-fill.js +16 -0
  6. package/dist/cjs/api/chart-sheet.d.ts +8 -0
  7. package/dist/cjs/api/chart-sheet.d.ts.map +1 -0
  8. package/dist/cjs/api/chart-sheet.js +20 -0
  9. package/dist/cjs/api/chart-source-ranges.d.ts +64 -0
  10. package/dist/cjs/api/chart-source-ranges.d.ts.map +1 -0
  11. package/dist/cjs/api/chart-source-ranges.js +175 -0
  12. package/dist/cjs/api/selections.d.ts +3 -3
  13. package/dist/cjs/api/selections.d.ts.map +1 -1
  14. package/dist/cjs/api/selections.js +28 -2
  15. package/dist/cjs/api/spreadsheet-api.d.ts +16 -3
  16. package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
  17. package/dist/cjs/api/spreadsheet-api.js +22 -2
  18. package/dist/cjs/api/table-auto-expansion.d.ts +37 -0
  19. package/dist/cjs/api/table-auto-expansion.d.ts.map +1 -0
  20. package/dist/cjs/api/table-auto-expansion.js +16 -0
  21. package/dist/cjs/api/table.d.ts +49 -1
  22. package/dist/cjs/api/table.d.ts.map +1 -1
  23. package/dist/cjs/api/table.js +145 -1
  24. package/dist/cjs/api/validation.d.ts +26 -1
  25. package/dist/cjs/api/validation.d.ts.map +1 -1
  26. package/dist/cjs/api/validation.js +127 -9
  27. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts +15 -0
  28. package/dist/cjs/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  29. package/dist/cjs/atoms/calculated-column-fill.atom.js +18 -0
  30. package/dist/cjs/atoms/chart-actions.atom.d.ts +40 -0
  31. package/dist/cjs/atoms/chart-actions.atom.d.ts.map +1 -0
  32. package/dist/cjs/atoms/chart-actions.atom.js +66 -0
  33. package/dist/cjs/atoms/index.d.ts +5 -0
  34. package/dist/cjs/atoms/index.d.ts.map +1 -1
  35. package/dist/cjs/atoms/index.js +5 -0
  36. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts +28 -0
  37. package/dist/cjs/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  38. package/dist/cjs/atoms/move-chart-dialog.atom.js +34 -0
  39. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +9 -1
  40. package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  41. package/dist/cjs/atoms/selected-chart-embed.atom.js +18 -1
  42. package/dist/cjs/atoms/selected-chart-series.atom.d.ts +24 -0
  43. package/dist/cjs/atoms/selected-chart-series.atom.d.ts.map +1 -0
  44. package/dist/cjs/atoms/selected-chart-series.atom.js +11 -0
  45. package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
  46. package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
  47. package/dist/cjs/atoms/sheet-context.atom.js +5 -2
  48. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts +34 -0
  49. package/dist/cjs/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  50. package/dist/cjs/atoms/sparkline-dialog.atom.js +30 -0
  51. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts +14 -0
  52. package/dist/cjs/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  53. package/dist/cjs/atoms/table-auto-expansion.atom.js +17 -0
  54. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts +25 -0
  55. package/dist/cjs/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  56. package/dist/cjs/components/calculated-column-smart-tag/index.js +31 -0
  57. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  58. package/dist/cjs/components/canvas-grid/index.js +393 -72
  59. package/dist/cjs/components/canvas-grid/typings.d.ts +127 -14
  60. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  61. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  62. package/dist/cjs/components/cell/index.js +3 -3
  63. package/dist/cjs/components/cell/typings.d.ts +13 -0
  64. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  65. package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
  66. package/dist/cjs/components/cell-filter/index.js +13 -2
  67. package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  68. package/dist/cjs/components/cell-input/formula-bar-cell-input.js +4 -1
  69. package/dist/cjs/components/cell-structured/sparkline-math.d.ts +28 -5
  70. package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
  71. package/dist/cjs/components/cell-structured/sparkline-math.js +93 -5
  72. package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
  73. package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
  74. package/dist/cjs/components/cell-structured/sparkline.js +3 -3
  75. package/dist/cjs/components/cell-structured/types.d.ts +1 -1
  76. package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
  77. package/dist/cjs/components/chart-sheet-view/index.d.ts +27 -0
  78. package/dist/cjs/components/chart-sheet-view/index.d.ts.map +1 -0
  79. package/dist/cjs/components/chart-sheet-view/index.js +35 -0
  80. package/dist/cjs/components/context-menu/embed-context-menu.d.ts +48 -0
  81. package/dist/cjs/components/context-menu/embed-context-menu.d.ts.map +1 -0
  82. package/dist/cjs/components/context-menu/embed-context-menu.js +123 -0
  83. package/dist/cjs/components/context-menu/index.d.ts +23 -2
  84. package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
  85. package/dist/cjs/components/context-menu/index.js +217 -39
  86. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts +33 -0
  87. package/dist/cjs/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  88. package/dist/cjs/components/context-menu/total-row-function-menu.js +58 -0
  89. package/dist/cjs/components/context-menu/total-row-functions.d.ts +12 -12
  90. package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -1
  91. package/dist/cjs/components/context-menu/total-row-functions.js +39 -39
  92. package/dist/cjs/components/embeds/chart-component.d.ts +17 -0
  93. package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -1
  94. package/dist/cjs/components/embeds/embed-draggable.d.ts +61 -4
  95. package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
  96. package/dist/cjs/components/embeds/embed-draggable.js +214 -39
  97. package/dist/cjs/components/filter-box/date-tree.d.ts +28 -0
  98. package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -0
  99. package/dist/cjs/components/filter-box/date-tree.js +147 -0
  100. package/dist/cjs/components/filter-box/filter-by-condition.d.ts +14 -2
  101. package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
  102. package/dist/cjs/components/filter-box/filter-by-condition.js +95 -19
  103. package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -1
  104. package/dist/cjs/components/filter-box/filter-by-value.js +126 -40
  105. package/dist/cjs/components/filter-box/index.d.ts +7 -1
  106. package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
  107. package/dist/cjs/components/filter-box/index.js +102 -11
  108. package/dist/cjs/components/move-chart-dialog/index.d.ts +34 -0
  109. package/dist/cjs/components/move-chart-dialog/index.d.ts.map +1 -0
  110. package/dist/cjs/components/move-chart-dialog/index.js +96 -0
  111. package/dist/cjs/components/print-preview/page-block.d.ts +9 -1
  112. package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -1
  113. package/dist/cjs/components/print-preview/page-block.js +28 -2
  114. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +8 -1
  115. package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  116. package/dist/cjs/components/print-preview/print-preview-dialog.js +144 -3
  117. package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -1
  118. package/dist/cjs/components/print-preview/run-print.js +19 -7
  119. package/dist/cjs/components/print-preview/use-page-layout.d.ts +47 -0
  120. package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -1
  121. package/dist/cjs/components/print-preview/use-page-layout.js +81 -7
  122. package/dist/cjs/components/selection/index.d.ts +1 -1
  123. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  124. package/dist/cjs/components/selection/index.js +6 -2
  125. package/dist/cjs/components/selection/types.d.ts +15 -0
  126. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  127. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  128. package/dist/cjs/components/sheet-tabs/index.js +2 -2
  129. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
  130. package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  131. package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
  132. package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
  133. package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
  134. package/dist/cjs/components/sparkline-dialog/index.js +127 -0
  135. package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
  136. package/dist/cjs/components/subtotal-dialog/index.js +10 -1
  137. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  138. package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  139. package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
  140. package/dist/cjs/components/toolbar/index.d.ts +1 -0
  141. package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
  142. package/dist/cjs/components/toolbar/index.js +1 -0
  143. package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
  144. package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
  145. package/dist/cjs/components/toolbar/insert-menu.js +24 -1
  146. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
  147. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  148. package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
  149. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
  150. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
  151. package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
  152. package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
  153. package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
  154. package/dist/cjs/components/toolbar/table-actions.js +17 -7
  155. package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
  156. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  157. package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
  158. package/dist/cjs/config.d.ts +2 -0
  159. package/dist/cjs/config.d.ts.map +1 -1
  160. package/dist/cjs/config.js +31 -1
  161. package/dist/cjs/helpers.d.ts +1 -1
  162. package/dist/cjs/helpers.d.ts.map +1 -1
  163. package/dist/cjs/helpers.js +13 -2
  164. package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
  165. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  166. package/dist/cjs/hooks/use-cell-renderer.js +20 -8
  167. package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
  168. package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
  169. package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
  170. package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
  171. package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
  172. package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
  173. package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
  174. package/dist/cjs/hooks/use-context-setter.js +3 -1
  175. package/dist/cjs/hooks/use-editable.d.ts +9 -1
  176. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  177. package/dist/cjs/hooks/use-editable.js +25 -1
  178. package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
  179. package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
  180. package/dist/cjs/hooks/use-embeds-charts.js +412 -41
  181. package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
  182. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  183. package/dist/cjs/hooks/use-grid-children.js +12 -6
  184. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  185. package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
  187. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  188. package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
  189. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
  190. package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  191. package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
  192. package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
  193. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  194. package/dist/cjs/hooks/use-selection-renderer.js +37 -7
  195. package/dist/cjs/hooks/use-selection.d.ts +9 -1
  196. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  197. package/dist/cjs/hooks/use-selection.js +118 -30
  198. package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
  199. package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
  200. package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
  201. package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
  202. package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
  203. package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
  204. package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
  205. package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
  206. package/dist/cjs/hooks/use-table-resizer.js +22 -10
  207. package/dist/cjs/index.d.ts +13 -0
  208. package/dist/cjs/index.d.ts.map +1 -1
  209. package/dist/cjs/index.js +17 -1
  210. package/dist/cjs/release-date.js +1 -1
  211. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  212. package/dist/cjs/types.d.ts +289 -4
  213. package/dist/cjs/types.d.ts.map +1 -1
  214. package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
  215. package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
  216. package/dist/cjs/utils/copy-as-picture.js +70 -0
  217. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
  218. package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  219. package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
  220. package/dist/cjs/utils/z-order.d.ts +47 -0
  221. package/dist/cjs/utils/z-order.d.ts.map +1 -0
  222. package/dist/cjs/utils/z-order.js +124 -0
  223. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  224. package/dist/esm/api/banded-ranges.js +39 -12
  225. package/dist/esm/api/calculated-column-fill.d.ts +43 -0
  226. package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
  227. package/dist/esm/api/calculated-column-fill.js +10 -0
  228. package/dist/esm/api/chart-sheet.d.ts +8 -0
  229. package/dist/esm/api/chart-sheet.d.ts.map +1 -0
  230. package/dist/esm/api/chart-sheet.js +15 -0
  231. package/dist/esm/api/chart-source-ranges.d.ts +64 -0
  232. package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
  233. package/dist/esm/api/chart-source-ranges.js +168 -0
  234. package/dist/esm/api/selections.d.ts +3 -3
  235. package/dist/esm/api/selections.d.ts.map +1 -1
  236. package/dist/esm/api/selections.js +26 -2
  237. package/dist/esm/api/spreadsheet-api.d.ts +16 -3
  238. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  239. package/dist/esm/api/spreadsheet-api.js +18 -2
  240. package/dist/esm/api/table-auto-expansion.d.ts +37 -0
  241. package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
  242. package/dist/esm/api/table-auto-expansion.js +10 -0
  243. package/dist/esm/api/table.d.ts +49 -1
  244. package/dist/esm/api/table.d.ts.map +1 -1
  245. package/dist/esm/api/table.js +138 -1
  246. package/dist/esm/api/validation.d.ts +26 -1
  247. package/dist/esm/api/validation.d.ts.map +1 -1
  248. package/dist/esm/api/validation.js +119 -9
  249. package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
  250. package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
  251. package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
  252. package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
  253. package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
  254. package/dist/esm/atoms/chart-actions.atom.js +58 -0
  255. package/dist/esm/atoms/index.d.ts +5 -0
  256. package/dist/esm/atoms/index.d.ts.map +1 -1
  257. package/dist/esm/atoms/index.js +5 -0
  258. package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
  259. package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
  260. package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
  261. package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
  262. package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
  263. package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
  264. package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
  265. package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
  266. package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
  267. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  268. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  269. package/dist/esm/atoms/sheet-context.atom.js +2 -0
  270. package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
  271. package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
  272. package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
  273. package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
  274. package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
  275. package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
  276. package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
  277. package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
  278. package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
  279. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  280. package/dist/esm/components/canvas-grid/index.js +332 -21
  281. package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
  282. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  283. package/dist/esm/components/cell/index.d.ts.map +1 -1
  284. package/dist/esm/components/cell/index.js +3 -3
  285. package/dist/esm/components/cell/typings.d.ts +13 -0
  286. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  287. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  288. package/dist/esm/components/cell-filter/index.js +14 -3
  289. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  290. package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
  291. package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
  292. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  293. package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
  294. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  295. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  296. package/dist/esm/components/cell-structured/sparkline.js +3 -3
  297. package/dist/esm/components/cell-structured/types.d.ts +1 -1
  298. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  299. package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
  300. package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
  301. package/dist/esm/components/chart-sheet-view/index.js +30 -0
  302. package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
  303. package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
  304. package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
  305. package/dist/esm/components/context-menu/index.d.ts +23 -2
  306. package/dist/esm/components/context-menu/index.d.ts.map +1 -1
  307. package/dist/esm/components/context-menu/index.js +174 -38
  308. package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
  309. package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
  310. package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
  311. package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
  312. package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
  313. package/dist/esm/components/context-menu/total-row-functions.js +29 -31
  314. package/dist/esm/components/embeds/chart-component.d.ts +17 -0
  315. package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
  316. package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
  317. package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
  318. package/dist/esm/components/embeds/embed-draggable.js +204 -45
  319. package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
  320. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
  321. package/dist/esm/components/filter-box/date-tree.js +107 -0
  322. package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
  323. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  324. package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
  325. package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
  326. package/dist/esm/components/filter-box/filter-by-value.js +110 -39
  327. package/dist/esm/components/filter-box/index.d.ts +7 -1
  328. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  329. package/dist/esm/components/filter-box/index.js +88 -2
  330. package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
  331. package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
  332. package/dist/esm/components/move-chart-dialog/index.js +88 -0
  333. package/dist/esm/components/print-preview/page-block.d.ts +9 -1
  334. package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
  335. package/dist/esm/components/print-preview/page-block.js +27 -2
  336. package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
  337. package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
  338. package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
  339. package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
  340. package/dist/esm/components/print-preview/run-print.js +17 -7
  341. package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
  342. package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
  343. package/dist/esm/components/print-preview/use-page-layout.js +55 -0
  344. package/dist/esm/components/selection/index.d.ts +1 -1
  345. package/dist/esm/components/selection/index.d.ts.map +1 -1
  346. package/dist/esm/components/selection/index.js +6 -2
  347. package/dist/esm/components/selection/types.d.ts +15 -0
  348. package/dist/esm/components/selection/types.d.ts.map +1 -1
  349. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  350. package/dist/esm/components/sheet-tabs/index.js +2 -2
  351. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
  352. package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
  353. package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
  354. package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
  355. package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
  356. package/dist/esm/components/sparkline-dialog/index.js +123 -0
  357. package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
  358. package/dist/esm/components/subtotal-dialog/index.js +10 -1
  359. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
  360. package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
  361. package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
  362. package/dist/esm/components/toolbar/index.d.ts +1 -0
  363. package/dist/esm/components/toolbar/index.d.ts.map +1 -1
  364. package/dist/esm/components/toolbar/index.js +1 -0
  365. package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
  366. package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
  367. package/dist/esm/components/toolbar/insert-menu.js +24 -1
  368. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
  369. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  370. package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
  371. package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
  372. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
  373. package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
  374. package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
  375. package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
  376. package/dist/esm/components/toolbar/table-actions.js +15 -7
  377. package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
  378. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  379. package/dist/esm/components/toolbar/table-style-selector.js +210 -399
  380. package/dist/esm/config.d.ts +2 -0
  381. package/dist/esm/config.d.ts.map +1 -1
  382. package/dist/esm/config.js +30 -0
  383. package/dist/esm/helpers.d.ts +1 -1
  384. package/dist/esm/helpers.d.ts.map +1 -1
  385. package/dist/esm/helpers.js +12 -1
  386. package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
  387. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  388. package/dist/esm/hooks/use-cell-renderer.js +14 -4
  389. package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
  390. package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
  391. package/dist/esm/hooks/use-chart-clipboard.js +213 -0
  392. package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
  393. package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
  394. package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
  395. package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
  396. package/dist/esm/hooks/use-context-setter.js +3 -1
  397. package/dist/esm/hooks/use-editable.d.ts +9 -1
  398. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  399. package/dist/esm/hooks/use-editable.js +25 -1
  400. package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
  401. package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
  402. package/dist/esm/hooks/use-embeds-charts.js +394 -39
  403. package/dist/esm/hooks/use-grid-children.d.ts +2 -2
  404. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  405. package/dist/esm/hooks/use-grid-children.js +8 -2
  406. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
  407. package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
  408. package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
  409. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  410. package/dist/esm/hooks/use-keyboard-handler.js +8 -2
  411. package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
  412. package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
  413. package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
  414. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
  415. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  416. package/dist/esm/hooks/use-selection-renderer.js +35 -6
  417. package/dist/esm/hooks/use-selection.d.ts +9 -1
  418. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  419. package/dist/esm/hooks/use-selection.js +122 -30
  420. package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
  421. package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
  422. package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
  423. package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
  424. package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
  425. package/dist/esm/hooks/use-table-hit-zones.js +146 -0
  426. package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
  427. package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
  428. package/dist/esm/hooks/use-table-resizer.js +21 -10
  429. package/dist/esm/index.d.ts +13 -0
  430. package/dist/esm/index.d.ts.map +1 -1
  431. package/dist/esm/index.js +13 -0
  432. package/dist/esm/release-date.js +1 -1
  433. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  434. package/dist/esm/types.d.ts +289 -4
  435. package/dist/esm/types.d.ts.map +1 -1
  436. package/dist/esm/utils/copy-as-picture.d.ts +13 -0
  437. package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
  438. package/dist/esm/utils/copy-as-picture.js +45 -0
  439. package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
  440. package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
  441. package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
  442. package/dist/esm/utils/z-order.d.ts +47 -0
  443. package/dist/esm/utils/z-order.d.ts.map +1 -0
  444. package/dist/esm/utils/z-order.js +111 -0
  445. package/dist/spreadsheet.min.css +1 -1
  446. package/package.json +12 -10
  447. package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
  448. package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
  449. package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
  450. package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
  451. package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
  452. package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Excel groups a date column's AutoFilter checklist into a Year → Month → Day
4
+ * tree with tri-state parents. The checklist only knows each cell's DISPLAYED
5
+ * text, so a value is treated as a date when it parses as one AND looks like
6
+ * one — digits separated by `/ - .` or a month name — which keeps plain
7
+ * numbers ("2026") and text out. The tree is built only when every non-blank
8
+ * value in the column is such a date (a mixed column stays a flat list, as a
9
+ * text column would). Newest first at every level, matching Excel.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.triState = exports.buildDateTree = exports.parseFilterDateValue = void 0;
13
+ var tslib_1 = require("tslib");
14
+ var MIN_YEAR = 1900;
15
+ var MAX_YEAR = 2199;
16
+ var DATE_SHAPE = /(\d[/.\-]\d)|([A-Za-z]{3,}.*\d)|(\d.*[A-Za-z]{3,})/;
17
+ var MONTH_NAMES = [
18
+ "January",
19
+ "February",
20
+ "March",
21
+ "April",
22
+ "May",
23
+ "June",
24
+ "July",
25
+ "August",
26
+ "September",
27
+ "October",
28
+ "November",
29
+ "December",
30
+ ];
31
+ /** The calendar date a checklist value displays, or `undefined` when it is not a date. */
32
+ var parseFilterDateValue = function (value) {
33
+ var trimmed = value.trim();
34
+ if (!trimmed || !DATE_SHAPE.test(trimmed))
35
+ return undefined;
36
+ var parsed = new Date(trimmed);
37
+ var time = parsed.getTime();
38
+ if (Number.isNaN(time))
39
+ return undefined;
40
+ var year = parsed.getFullYear();
41
+ if (year < MIN_YEAR || year > MAX_YEAR)
42
+ return undefined;
43
+ return parsed;
44
+ };
45
+ exports.parseFilterDateValue = parseFilterDateValue;
46
+ /**
47
+ * Year → Month → Day nodes for `values`, or `undefined` when the column is
48
+ * not a date column. `blankLabel` (the "(Blanks)" entry) is skipped; callers
49
+ * render it beside the tree.
50
+ */
51
+ var buildDateTree = function (values, blankLabel) {
52
+ var e_1, _a, e_2, _b;
53
+ var _c, _d, _e;
54
+ var dated = [];
55
+ try {
56
+ for (var values_1 = tslib_1.__values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
57
+ var value = values_1_1.value;
58
+ if (value === blankLabel)
59
+ continue;
60
+ var date = (0, exports.parseFilterDateValue)(value);
61
+ if (!date)
62
+ return undefined;
63
+ dated.push({ value: value, date: date });
64
+ }
65
+ }
66
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
67
+ finally {
68
+ try {
69
+ if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
70
+ }
71
+ finally { if (e_1) throw e_1.error; }
72
+ }
73
+ if (!dated.length)
74
+ return undefined;
75
+ var years = new Map();
76
+ try {
77
+ for (var dated_1 = tslib_1.__values(dated), dated_1_1 = dated_1.next(); !dated_1_1.done; dated_1_1 = dated_1.next()) {
78
+ var _f = dated_1_1.value, value = _f.value, date = _f.date;
79
+ var y = date.getFullYear();
80
+ var m = date.getMonth();
81
+ var d = date.getDate();
82
+ var months = (_c = years.get(y)) !== null && _c !== void 0 ? _c : new Map();
83
+ years.set(y, months);
84
+ var days = (_d = months.get(m)) !== null && _d !== void 0 ? _d : new Map();
85
+ months.set(m, days);
86
+ var bucket = (_e = days.get(d)) !== null && _e !== void 0 ? _e : [];
87
+ days.set(d, bucket);
88
+ if (!bucket.includes(value))
89
+ bucket.push(value);
90
+ }
91
+ }
92
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
93
+ finally {
94
+ try {
95
+ if (dated_1_1 && !dated_1_1.done && (_b = dated_1.return)) _b.call(dated_1);
96
+ }
97
+ finally { if (e_2) throw e_2.error; }
98
+ }
99
+ var desc = function (a, b) { return b - a; };
100
+ return tslib_1.__spreadArray([], tslib_1.__read(years.keys()), false).sort(desc).map(function (y) {
101
+ var months = years.get(y);
102
+ var monthNodes = tslib_1.__spreadArray([], tslib_1.__read(months.keys()), false).sort(desc).map(function (m) {
103
+ var days = months.get(m);
104
+ var dayNodes = tslib_1.__spreadArray([], tslib_1.__read(days.keys()), false).sort(desc).map(function (d) { return ({
105
+ key: "d:".concat(y, "-").concat(m + 1, "-").concat(d),
106
+ label: String(d),
107
+ values: days.get(d),
108
+ }); });
109
+ return {
110
+ key: "m:".concat(y, "-").concat(m + 1),
111
+ label: MONTH_NAMES[m],
112
+ values: dayNodes.flatMap(function (node) { return node.values; }),
113
+ children: dayNodes,
114
+ };
115
+ });
116
+ return {
117
+ key: "y:".concat(y),
118
+ label: String(y),
119
+ values: monthNodes.flatMap(function (node) { return node.values; }),
120
+ children: monthNodes,
121
+ };
122
+ });
123
+ };
124
+ exports.buildDateTree = buildDateTree;
125
+ /** `true` all checked, `false` none, `"mixed"` some — the tri-state of a node or the whole list. */
126
+ var triState = function (values, isVisible) {
127
+ var e_3, _a;
128
+ var checked = 0;
129
+ try {
130
+ for (var values_2 = tslib_1.__values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {
131
+ var value = values_2_1.value;
132
+ if (isVisible(value))
133
+ checked++;
134
+ }
135
+ }
136
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
137
+ finally {
138
+ try {
139
+ if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);
140
+ }
141
+ finally { if (e_3) throw e_3.error; }
142
+ }
143
+ if (checked === 0)
144
+ return values.length === 0 ? true : false;
145
+ return checked === values.length ? true : "mixed";
146
+ };
147
+ exports.triState = triState;
@@ -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"}
@@ -1,14 +1,58 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FilterByCondition = void 0;
3
+ exports.FilterByCondition = exports.top10ConditionType = exports.isTop10ConditionType = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var ui_1 = require("@rowsncolumns/ui");
6
6
  var react_1 = tslib_1.__importStar(require("react"));
7
7
  var config_1 = require("../../config");
8
8
  var helpers_1 = require("../../helpers");
9
9
  var use_isomorphic_layout_effect_1 = require("../../hooks/use-isomorphic-layout-effect");
10
- var FilterByCondition = function (_a) {
11
- var conditionType = _a.conditionType, fromValue = _a.fromValue, toValue = _a.toValue, onChangeToValue = _a.onChangeToValue, onChangeFromValue = _a.onChangeFromValue, onChangeConditionType = _a.onChangeConditionType;
10
+ /** Excel's "Top 10…" AutoFilter: the four `NUMBER_TOP_*` / `NUMBER_BOTTOM_*` condition types. */
11
+ var isTop10ConditionType = function (type) {
12
+ return type === "NUMBER_TOP_N" ||
13
+ type === "NUMBER_BOTTOM_N" ||
14
+ type === "NUMBER_TOP_PERCENT" ||
15
+ type === "NUMBER_BOTTOM_PERCENT";
16
+ };
17
+ exports.isTop10ConditionType = isTop10ConditionType;
18
+ var top10ConditionType = function (direction, unit) {
19
+ return direction === "top"
20
+ ? unit === "items"
21
+ ? "NUMBER_TOP_N"
22
+ : "NUMBER_TOP_PERCENT"
23
+ : unit === "items"
24
+ ? "NUMBER_BOTTOM_N"
25
+ : "NUMBER_BOTTOM_PERCENT";
26
+ };
27
+ exports.top10ConditionType = top10ConditionType;
28
+ /**
29
+ * Conditions Excel's Custom AutoFilter offers for its second clause: the
30
+ * per-cell comparisons. Column-ranked filters (Top 10, above / below
31
+ * average) are whole-column criteria and can't be And/Or-ed with another.
32
+ */
33
+ var SECOND_CLAUSE_LABELS = config_1.CONDITION_LABELS.filter(function (_a) {
34
+ var condition = _a.condition;
35
+ return !(0, exports.isTop10ConditionType)(condition) &&
36
+ condition !== "NUMBER_ABOVE_AVERAGE" &&
37
+ condition !== "NUMBER_BELOW_AVERAGE";
38
+ });
39
+ var ConditionSelect = function (_a) {
40
+ var value = _a.value, labels = _a.labels, onChange = _a.onChange, ariaLabel = _a.ariaLabel;
41
+ return (react_1.default.createElement(ui_1.Select, { value: value !== null && value !== void 0 ? value : config_1.CONDITION_NONE, onValueChange: function (next) {
42
+ return onChange(next === config_1.CONDITION_NONE ? undefined : next);
43
+ } },
44
+ react_1.default.createElement(ui_1.SelectTrigger, { className: "mb-1", "aria-label": ariaLabel },
45
+ react_1.default.createElement(ui_1.SelectValue, { placeholder: "None" })),
46
+ react_1.default.createElement(ui_1.SelectPortal, null,
47
+ react_1.default.createElement(ui_1.SelectContent, null,
48
+ react_1.default.createElement(ui_1.SelectItem, { value: config_1.CONDITION_NONE }, "None"),
49
+ labels.map(function (_a) {
50
+ var condition = _a.condition, label = _a.label;
51
+ return (react_1.default.createElement(ui_1.SelectItem, { key: condition, value: condition }, label));
52
+ })))));
53
+ };
54
+ var ValueInputs = function (_a) {
55
+ var conditionType = _a.conditionType, fromValue = _a.fromValue, toValue = _a.toValue, onChangeFromValue = _a.onChangeFromValue, onChangeToValue = _a.onChangeToValue, namePrefix = _a.namePrefix;
12
56
  var _b = tslib_1.__read((0, react_1.useState)(function () {
13
57
  return (0, helpers_1.shouldShowToValue)(conditionType);
14
58
  }), 2), showToValue = _b[0], setShowToValue = _b[1];
@@ -24,24 +68,56 @@ var FilterByCondition = function (_a) {
24
68
  onChangeToValue("");
25
69
  }
26
70
  }, [conditionType, onChangeToValue, onChangeFromValue]);
27
- return (react_1.default.createElement(react_1.default.Fragment, null,
28
- react_1.default.createElement("label", { className: "text-sm font-semibold pb-1 block" }, "Filter by condition"),
29
- react_1.default.createElement(ui_1.Select, { value: conditionType !== null && conditionType !== void 0 ? conditionType : config_1.CONDITION_NONE, onValueChange: function (value) {
30
- return onChangeConditionType === null || onChangeConditionType === void 0 ? void 0 : onChangeConditionType(value === config_1.CONDITION_NONE
31
- ? undefined
32
- : value);
71
+ return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1" },
72
+ showFromValue ? (react_1.default.createElement(ui_1.Input, { value: fromValue, type: "text", name: "".concat(namePrefix, "fromValue"), onChange: function (e) { return onChangeFromValue === null || onChangeFromValue === void 0 ? void 0 : onChangeFromValue(e.target.value); }, className: "text-xs", placeholder: "Enter value" })) : null,
73
+ showToValue ? (react_1.default.createElement(ui_1.Input, { value: toValue, type: "text", name: "".concat(namePrefix, "toValue"), onChange: function (e) { return onChangeToValue === null || onChangeToValue === void 0 ? void 0 : onChangeToValue(e.target.value); }, className: "text-xs", placeholder: "" })) : null));
74
+ };
75
+ /** Excel's Top 10 AutoFilter dialog: [Top | Bottom] [N] [Items | Percent]. */
76
+ var Top10Fields = function (_a) {
77
+ var conditionType = _a.conditionType, count = _a.count, onChangeConditionType = _a.onChangeConditionType, onChangeCount = _a.onChangeCount;
78
+ var direction = conditionType === "NUMBER_TOP_N" || conditionType === "NUMBER_TOP_PERCENT"
79
+ ? "top"
80
+ : "bottom";
81
+ var unit = conditionType === "NUMBER_TOP_PERCENT" ||
82
+ conditionType === "NUMBER_BOTTOM_PERCENT"
83
+ ? "percent"
84
+ : "items";
85
+ return (react_1.default.createElement(ui_1.Stack, { className: "gap-1 items-center" },
86
+ react_1.default.createElement(ui_1.Select, { value: direction, onValueChange: function (next) {
87
+ return onChangeConditionType((0, exports.top10ConditionType)(next === "bottom" ? "bottom" : "top", unit));
33
88
  } },
34
- react_1.default.createElement(ui_1.SelectTrigger, { className: "mb-1" },
35
- react_1.default.createElement(ui_1.SelectValue, { placeholder: "None" })),
89
+ react_1.default.createElement(ui_1.SelectTrigger, { className: "w-24", "aria-label": "Top or bottom" },
90
+ react_1.default.createElement(ui_1.SelectValue, null)),
36
91
  react_1.default.createElement(ui_1.SelectPortal, null,
37
92
  react_1.default.createElement(ui_1.SelectContent, null,
38
- react_1.default.createElement(ui_1.SelectItem, { value: config_1.CONDITION_NONE }, "None"),
39
- config_1.CONDITION_LABELS.map(function (_a) {
40
- var condition = _a.condition, label = _a.label;
41
- return (react_1.default.createElement(ui_1.SelectItem, { key: condition, value: condition }, label));
42
- })))),
43
- react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1" },
44
- showFromValue ? (react_1.default.createElement(ui_1.Input, { value: fromValue, type: "text", name: "fromValue", onChange: function (e) { return onChangeFromValue === null || onChangeFromValue === void 0 ? void 0 : onChangeFromValue(e.target.value); }, className: "text-xs", placeholder: "Enter value" })) : null,
45
- showToValue ? (react_1.default.createElement(ui_1.Input, { value: toValue, type: "text", name: "toValue", onChange: function (e) { return onChangeToValue === null || onChangeToValue === void 0 ? void 0 : onChangeToValue(e.target.value); }, className: "text-xs", placeholder: "" })) : null)));
93
+ react_1.default.createElement(ui_1.SelectItem, { value: "top" }, "Top"),
94
+ react_1.default.createElement(ui_1.SelectItem, { value: "bottom" }, "Bottom")))),
95
+ react_1.default.createElement(ui_1.Input, { value: count, type: "number", min: 1, name: "top10Count", "aria-label": "Top 10 count", onChange: function (e) { return onChangeCount(e.target.value); }, className: "text-xs w-16" }),
96
+ react_1.default.createElement(ui_1.Select, { value: unit, onValueChange: function (next) {
97
+ return onChangeConditionType((0, exports.top10ConditionType)(direction, next === "percent" ? "percent" : "items"));
98
+ } },
99
+ react_1.default.createElement(ui_1.SelectTrigger, { className: "w-24", "aria-label": "Items or percent" },
100
+ react_1.default.createElement(ui_1.SelectValue, null)),
101
+ react_1.default.createElement(ui_1.SelectPortal, null,
102
+ react_1.default.createElement(ui_1.SelectContent, null,
103
+ react_1.default.createElement(ui_1.SelectItem, { value: "items" }, "Items"),
104
+ react_1.default.createElement(ui_1.SelectItem, { value: "percent" }, "Percent"))))));
105
+ };
106
+ var FilterByCondition = function (_a) {
107
+ var conditionType = _a.conditionType, fromValue = _a.fromValue, toValue = _a.toValue, onChangeToValue = _a.onChangeToValue, onChangeFromValue = _a.onChangeFromValue, onChangeConditionType = _a.onChangeConditionType, condition2Type = _a.condition2Type, condition2From = _a.condition2From, condition2To = _a.condition2To, conditionJoin = _a.conditionJoin, onChangeCondition2Type = _a.onChangeCondition2Type, onChangeCondition2From = _a.onChangeCondition2From, onChangeCondition2To = _a.onChangeCondition2To, onChangeConditionJoin = _a.onChangeConditionJoin;
108
+ // Excel's Custom AutoFilter shows the second clause row only on request;
109
+ // it stays open while a second clause is stored on the column.
110
+ var _b = tslib_1.__read((0, react_1.useState)(function () { return condition2Type !== undefined; }), 2), showSecondClause = _b[0], setShowSecondClause = _b[1];
111
+ var isTop10 = (0, exports.isTop10ConditionType)(conditionType);
112
+ return (react_1.default.createElement(react_1.default.Fragment, null,
113
+ react_1.default.createElement("label", { className: "text-sm font-semibold pb-1 block" }, "Filter by condition"),
114
+ react_1.default.createElement(ConditionSelect, { value: conditionType, labels: config_1.CONDITION_LABELS, onChange: function (type) { return onChangeConditionType === null || onChangeConditionType === void 0 ? void 0 : onChangeConditionType(type); }, ariaLabel: "Condition" }),
115
+ isTop10 && conditionType ? (react_1.default.createElement(Top10Fields, { conditionType: conditionType, count: fromValue, onChangeConditionType: function (type) { return onChangeConditionType === null || onChangeConditionType === void 0 ? void 0 : onChangeConditionType(type); }, onChangeCount: onChangeFromValue })) : (react_1.default.createElement(ValueInputs, { conditionType: conditionType, fromValue: fromValue, toValue: toValue, onChangeFromValue: onChangeFromValue, onChangeToValue: onChangeToValue, namePrefix: "" })),
116
+ conditionType && !isTop10 ? (showSecondClause ? (react_1.default.createElement("div", { className: "mt-1 flex flex-col gap-1" },
117
+ react_1.default.createElement("div", { role: "radiogroup", "aria-label": "Combine conditions", className: "flex gap-3 text-xs px-1" }, ["AND", "OR"].map(function (join) { return (react_1.default.createElement("label", { key: join, className: "flex items-center gap-1 cursor-pointer" },
118
+ react_1.default.createElement("input", { type: "radio", name: "conditionJoin", value: join, checked: conditionJoin === join, onChange: function () { return onChangeConditionJoin(join); } }),
119
+ join === "AND" ? "And" : "Or")); })),
120
+ react_1.default.createElement(ConditionSelect, { value: condition2Type, labels: SECOND_CLAUSE_LABELS, onChange: onChangeCondition2Type, ariaLabel: "Second condition" }),
121
+ react_1.default.createElement(ValueInputs, { conditionType: condition2Type, fromValue: condition2From, toValue: condition2To, onChangeFromValue: onChangeCondition2From, onChangeToValue: onChangeCondition2To, namePrefix: "second" }))) : (react_1.default.createElement(ui_1.Button, { type: "button", variant: "link", className: "text-xs px-1 mt-1 self-start", onClick: function () { return setShowSecondClause(true); } }, "Custom filter (And / Or)\u2026"))) : null));
46
122
  };
47
123
  exports.FilterByCondition = FilterByCondition;
@@ -1 +1 @@
1
- {"version":3,"file":"filter-by-value.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-value.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAOvC,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IAC5C,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CACnC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAClD,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,mDAI3B,kBAAkB,sBA8GpB,CAAC"}
1
+ {"version":3,"file":"filter-by-value.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-value.tsx"],"names":[],"mappings":"AASA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAKtE,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IAC5C,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CACnC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAClD,CAAC;CACH,CAAC;AAcF,eAAO,MAAM,aAAa,GAAI,mDAI3B,kBAAkB,sBA+PpB,CAAC"}
@@ -4,73 +4,159 @@ exports.FilterByValue = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var icons_1 = require("@rowsncolumns/icons");
6
6
  var ui_1 = require("@rowsncolumns/ui");
7
- var ui_2 = require("@rowsncolumns/ui");
8
7
  var utils_1 = require("@rowsncolumns/utils");
9
8
  var react_virtual_1 = require("@tanstack/react-virtual");
10
9
  var react_1 = tslib_1.__importStar(require("react"));
11
- var react_2 = require("react");
12
- var react_3 = require("react");
13
- var react_4 = require("react");
14
10
  var config_1 = require("../../config");
11
+ var date_tree_1 = require("./date-tree");
12
+ /** Excel's checklist glyph: checked, unchecked, or the "some children" dash. */
13
+ var TriStateMark = function (_a) {
14
+ var state = _a.state;
15
+ return (react_1.default.createElement("span", { className: "min-w-[15px] h-[15px] block leading-none border border-gray-400 rounded-sm text-center shrink-0", "aria-hidden": true }, state === true ? react_1.default.createElement(icons_1.CheckIcon, null) : state === "mixed" ? react_1.default.createElement(icons_1.DividerHorizontalIcon, null) : null));
16
+ };
17
+ var rowClassName = "justify-start px-2 py-0 gap-1 text-sm text-left w-full h-6";
15
18
  var FilterByValue = function (_a) {
16
19
  var visibleValues = _a.visibleValues, _b = _a.values, values = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, onChangeVisibleValues = _a.onChangeVisibleValues;
17
- var _c = tslib_1.__read((0, react_4.useState)(""), 2), query = _c[0], setQuery = _c[1];
18
- var parentRef = (0, react_3.useRef)(null);
20
+ var _c = tslib_1.__read((0, react_1.useState)(""), 2), query = _c[0], setQuery = _c[1];
21
+ // Excel's "Add current selection to filter": while searching, checking the
22
+ // results ADDS them to the values already shown instead of replacing them.
23
+ var _d = tslib_1.__read((0, react_1.useState)(false), 2), addToSelection = _d[0], setAddToSelection = _d[1];
24
+ var _e = tslib_1.__read((0, react_1.useState)(function () { return new Set(); }), 2), expanded = _e[0], setExpanded = _e[1];
25
+ var parentRef = (0, react_1.useRef)(null);
19
26
  var filteredValues = (0, react_1.useMemo)(function () {
20
27
  var regex = new RegExp((0, utils_1.escapeCharacters)(query), "i");
21
- return values.filter(function (value) {
22
- return regex.test(String(value));
23
- });
28
+ return values.filter(function (value) { return regex.test(String(value)); });
24
29
  }, [values, query]);
30
+ // A date column's checklist is a Year → Month → Day tree; a search flattens
31
+ // it to the matching values, as Excel does.
32
+ var dateTree = (0, react_1.useMemo)(function () { return (query ? undefined : (0, date_tree_1.buildDateTree)(values, config_1.BLANK_LABEL)); }, [values, query]);
33
+ var hasBlank = values.includes(config_1.BLANK_LABEL);
34
+ var visibleSet = (0, react_1.useMemo)(function () { return (visibleValues ? new Set(visibleValues) : undefined); }, [visibleValues]);
35
+ var isVisible = (0, react_1.useCallback)(function (value) { return !visibleSet || visibleSet.has(value); }, [visibleSet]);
36
+ // `undefined` visible values = everything shown; collapse back to it once
37
+ // every value is checked so a full checklist never becomes a whitelist.
38
+ var normalize = (0, react_1.useCallback)(function (next) {
39
+ return values.every(function (value) { return next.has(value); }) ? undefined : tslib_1.__spreadArray([], tslib_1.__read(next), false);
40
+ }, [values]);
41
+ var setChecked = (0, react_1.useCallback)(function (targets, checked) {
42
+ onChangeVisibleValues(function (prev) {
43
+ var e_1, _a;
44
+ var next = new Set(prev !== null && prev !== void 0 ? prev : values);
45
+ try {
46
+ for (var targets_1 = tslib_1.__values(targets), targets_1_1 = targets_1.next(); !targets_1_1.done; targets_1_1 = targets_1.next()) {
47
+ var value = targets_1_1.value;
48
+ if (checked)
49
+ next.add(value);
50
+ else
51
+ next.delete(value);
52
+ }
53
+ }
54
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
55
+ finally {
56
+ try {
57
+ if (targets_1_1 && !targets_1_1.done && (_a = targets_1.return)) _a.call(targets_1);
58
+ }
59
+ finally { if (e_1) throw e_1.error; }
60
+ }
61
+ return normalize(next);
62
+ });
63
+ }, [onChangeVisibleValues, values, normalize]);
64
+ var selectAllState = (0, date_tree_1.triState)(filteredValues, isVisible);
65
+ var onToggleSelectAll = (0, react_1.useCallback)(function () {
66
+ if (selectAllState === true) {
67
+ setChecked(filteredValues, false);
68
+ return;
69
+ }
70
+ if (query && !addToSelection) {
71
+ // Checking the search results shows ONLY them (Excel replaces the
72
+ // selection unless "Add current selection to filter" is on).
73
+ onChangeVisibleValues(normalize(new Set(filteredValues)));
74
+ return;
75
+ }
76
+ setChecked(filteredValues, true);
77
+ }, [
78
+ selectAllState,
79
+ setChecked,
80
+ filteredValues,
81
+ query,
82
+ addToSelection,
83
+ onChangeVisibleValues,
84
+ normalize,
85
+ ]);
25
86
  var rowVirtualizer = (0, react_virtual_1.useVirtualizer)({
26
87
  count: filteredValues.length,
27
88
  getScrollElement: function () { return parentRef.current; },
28
- estimateSize: (0, react_2.useCallback)(function () { return 24; }, []),
89
+ estimateSize: (0, react_1.useCallback)(function () { return 24; }, []),
29
90
  overscan: 5,
30
91
  });
31
- var onCheck = function (value) {
32
- onChangeVisibleValues(function (prev) {
33
- if (prev === void 0) { prev = []; }
34
- var newVisibleValues = prev === null || prev === void 0 ? void 0 : prev.concat(value);
35
- if ((newVisibleValues === null || newVisibleValues === void 0 ? void 0 : newVisibleValues.length) === values.length) {
36
- return undefined;
37
- }
38
- return newVisibleValues;
92
+ var toggleExpanded = function (key) {
93
+ return setExpanded(function (prev) {
94
+ var next = new Set(prev);
95
+ if (next.has(key))
96
+ next.delete(key);
97
+ else
98
+ next.add(key);
99
+ return next;
39
100
  });
40
101
  };
41
- var onUnCheck = function (value) {
42
- onChangeVisibleValues(function (prev) {
43
- if (prev === void 0) { prev = values; }
44
- return prev === null || prev === void 0 ? void 0 : prev.filter(function (cur) { return cur !== value; });
45
- });
102
+ var renderTreeNode = function (node, depth) {
103
+ var _a;
104
+ var state = (0, date_tree_1.triState)(node.values, isVisible);
105
+ var isExpanded = expanded.has(node.key);
106
+ return (react_1.default.createElement(react_1.default.Fragment, { key: node.key },
107
+ react_1.default.createElement("div", { className: "flex items-center", style: { paddingLeft: depth * 14 } },
108
+ node.children ? (react_1.default.createElement("button", { type: "button", "aria-expanded": isExpanded, "aria-label": "".concat(isExpanded ? "Collapse" : "Expand", " ").concat(node.label), className: "w-4 h-4 flex items-center justify-center shrink-0", onClick: function (e) {
109
+ e.stopPropagation();
110
+ toggleExpanded(node.key);
111
+ } }, isExpanded ? react_1.default.createElement(icons_1.ChevronDownIcon, null) : react_1.default.createElement(icons_1.ChevronRightIcon, null))) : (react_1.default.createElement("span", { className: "w-4 shrink-0" })),
112
+ react_1.default.createElement(ui_1.Button, { type: "button", role: "checkbox", "aria-checked": state, onMouseDown: function (e) { return e.stopPropagation(); }, onClick: function (e) {
113
+ e.preventDefault();
114
+ e.stopPropagation();
115
+ setChecked(node.values, state !== true);
116
+ }, className: rowClassName, title: node.label },
117
+ react_1.default.createElement(TriStateMark, { state: state }),
118
+ react_1.default.createElement("span", { className: "whitespace-nowrap overflow-hidden text-ellipsis" }, node.label))),
119
+ isExpanded
120
+ ? (_a = node.children) === null || _a === void 0 ? void 0 : _a.map(function (child) { return renderTreeNode(child, depth + 1); })
121
+ : null));
46
122
  };
47
123
  return (react_1.default.createElement(react_1.default.Fragment, null,
48
124
  react_1.default.createElement("label", { className: "text-sm font-semibold pb-1 block" }, "Filter by value"),
49
- react_1.default.createElement(ui_2.Stack, { className: "pb-2 gap-2" },
50
- react_1.default.createElement(ui_2.Button, { variant: "link", onClick: function () { return onChangeVisibleValues(undefined); } }, "Select all"),
51
- react_1.default.createElement(ui_2.Button, { variant: "link", onClick: function () { return onChangeVisibleValues([]); } }, "Clear")),
52
- react_1.default.createElement(ui_1.Input, { type: "text", value: query, onChange: function (e) { return setQuery(e.target.value); }, className: "text-xs" }),
53
- react_1.default.createElement("div", { className: "overflow-auto mt-1", style: { maxHeight: 160 }, ref: parentRef },
125
+ react_1.default.createElement(ui_1.Input, { type: "text", value: query, onChange: function (e) { return setQuery(e.target.value); }, placeholder: "Search", "aria-label": "Search values", className: "text-xs" }),
126
+ react_1.default.createElement(ui_1.Button, { type: "button", role: "checkbox", "aria-checked": selectAllState, onMouseDown: function (e) { return e.stopPropagation(); }, onClick: function (e) {
127
+ e.preventDefault();
128
+ e.stopPropagation();
129
+ onToggleSelectAll();
130
+ }, className: "".concat(rowClassName, " mt-1 font-medium") },
131
+ react_1.default.createElement(TriStateMark, { state: selectAllState }),
132
+ react_1.default.createElement("span", null, query ? "(Select All Search Results)" : "(Select All)")),
133
+ query ? (react_1.default.createElement("label", { className: "flex items-center gap-2 text-xs px-2 py-0.5 select-none cursor-pointer" },
134
+ react_1.default.createElement("input", { type: "checkbox", checked: addToSelection, onChange: function (e) { return setAddToSelection(e.target.checked); } }),
135
+ "Add current selection to filter")) : null,
136
+ dateTree ? (react_1.default.createElement("div", { className: "overflow-auto mt-1 flex flex-col", style: { maxHeight: 160 } },
137
+ dateTree.map(function (node) { return renderTreeNode(node, 0); }),
138
+ hasBlank ? (react_1.default.createElement("div", { className: "flex items-center" },
139
+ react_1.default.createElement("span", { className: "w-4 shrink-0" }),
140
+ react_1.default.createElement(ui_1.Button, { type: "button", role: "checkbox", "aria-checked": isVisible(config_1.BLANK_LABEL), onMouseDown: function (e) { return e.stopPropagation(); }, onClick: function (e) {
141
+ e.preventDefault();
142
+ e.stopPropagation();
143
+ setChecked([config_1.BLANK_LABEL], !isVisible(config_1.BLANK_LABEL));
144
+ }, className: rowClassName, title: config_1.BLANK_LABEL },
145
+ react_1.default.createElement(TriStateMark, { state: isVisible(config_1.BLANK_LABEL) }),
146
+ react_1.default.createElement("span", null, config_1.BLANK_LABEL)))) : null)) : (react_1.default.createElement("div", { className: "overflow-auto mt-1", style: { maxHeight: 160 }, ref: parentRef },
54
147
  react_1.default.createElement("div", { style: {
55
148
  height: "".concat(rowVirtualizer.getTotalSize(), "px"),
56
149
  width: "100%",
57
150
  position: "relative",
58
151
  } }, rowVirtualizer.getVirtualItems().map(function (virtualItem) {
59
152
  var value = filteredValues[virtualItem.index];
60
- var isVisible = visibleValues
61
- ? visibleValues.indexOf(value) !== -1
62
- : true;
63
- return (react_1.default.createElement(ui_2.Button, { key: virtualItem.key, type: "button", onMouseDown: function (e) {
153
+ var checked = isVisible(value);
154
+ return (react_1.default.createElement(ui_1.Button, { key: virtualItem.key, type: "button", role: "checkbox", "aria-checked": checked, onMouseDown: function (e) {
64
155
  e.stopPropagation();
65
156
  }, onClick: function (e) {
66
157
  e.preventDefault();
67
158
  e.stopPropagation();
68
- if (isVisible) {
69
- onUnCheck(value);
70
- }
71
- else {
72
- onCheck(value);
73
- }
159
+ setChecked([value], !checked);
74
160
  }, className: "justify-start px-2 py-0 gap-1 text-sm text-left", title: value, style: {
75
161
  position: "absolute",
76
162
  top: 0,
@@ -79,8 +165,8 @@ var FilterByValue = function (_a) {
79
165
  height: "".concat(virtualItem.size, "px"),
80
166
  transform: "translateY(".concat(virtualItem.start, "px)"),
81
167
  } },
82
- react_1.default.createElement("span", { className: "min-w-[15px] block leading-none" }, isVisible ? react_1.default.createElement(icons_1.CheckIcon, null) : null),
168
+ react_1.default.createElement(TriStateMark, { state: checked }),
83
169
  react_1.default.createElement("div", { className: "whitespace-nowrap overflow-hidden text-ellipsis" }, String(value))));
84
- })))));
170
+ }))))));
85
171
  };
86
172
  exports.FilterByValue = FilterByValue;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import type { UseFilterProps } from "../../hooks/use-filter";
3
- import type { FilterView, TableView } from "../../types";
3
+ import type { FilterCriteria, FilterView, TableView } from "../../types";
4
4
  import type { AvailableIcon } from "./filter-by-color";
5
5
  export type { AvailableIcon } from "./filter-by-color";
6
6
  export type FilterBoxBaseProps = {
@@ -32,6 +32,12 @@ export type FilterBoxBaseProps = {
32
32
  customLists?: string[][];
33
33
  };
34
34
  export declare const isTableView: (filter: FilterView | TableView) => filter is TableView;
35
+ /**
36
+ * Whether a column's stored criteria still filter anything — what enables
37
+ * Excel's "Clear Filter From <column>" item. Same test as the state layer's
38
+ * `isFilterCriteriaActive`.
39
+ */
40
+ export declare const hasActiveFilterCriteria: (criteria: FilterCriteria | undefined) => boolean;
35
41
  export declare const FilterBoxWrapper: React.MemoExoticComponent<({ dimensionIndex, onOpenChange, onSort, onFilter, onDeleteTableColumn, onInsertTableColumn, sheetId, filter, values, availableCellColors, availableFontColors, availableIcons, customLists, }: FilterBoxProps) => React.JSX.Element>;
36
42
  export type FilterBoxProps = FilterBoxBaseProps & {
37
43
  sheetId: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAIV,UAAU,EAGV,SAAS,EACV,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC1C,mBAAmB,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,mBAAmB,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAGF,eAAO,MAAM,WAAW,GACtB,QAAQ,UAAU,GAAG,SAAS,KAC7B,MAAM,IAAI,SAEZ,CAAC;AA0BF,eAAO,MAAM,gBAAgB,4NAexB,cAAc,uBAkalB,CAAC;AAIF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;YAAW,cAAc;;CAuC9C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/index.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAMV,cAAc,EACd,UAAU,EAGV,SAAS,EACV,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC1C,mBAAmB,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,mBAAmB,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAGF,eAAO,MAAM,WAAW,GACtB,QAAQ,UAAU,GAAG,SAAS,KAC7B,MAAM,IAAI,SAEZ,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,cAAc,GAAG,SAAS,KACnC,OAQA,CAAC;AA0BJ,eAAO,MAAM,gBAAgB,4NAexB,cAAc,uBA4kBlB,CAAC;AAIF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;YAAW,cAAc;;CAuC9C,CAAC"}