@vuu-ui/vuu-filters 2.1.18 → 2.1.19-beta.2

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 (398) hide show
  1. package/package.json +15 -18
  2. package/src/FilterAggregator.js +107 -0
  3. package/src/FilterModel.js +161 -0
  4. package/src/column-filter/ColumnFilter.css.js +52 -0
  5. package/src/column-filter/ColumnFilter.js +59 -0
  6. package/src/column-filter/useColumnFilter.js +130 -0
  7. package/src/column-filter/utils.js +35 -0
  8. package/src/custom-filters/CustomFilters.js +74 -0
  9. package/src/custom-filters/filterBarFocusManagement.js +25 -0
  10. package/src/custom-filters/index.js +1 -0
  11. package/src/custom-filters/useCustomFilters.js +237 -0
  12. package/src/custom-filters/useFilterState.js +123 -0
  13. package/src/filter-bar/FilterBar.css.js +81 -0
  14. package/src/filter-bar/FilterBar.js +97 -0
  15. package/src/filter-bar/FilterBarMenu.js +14 -0
  16. package/src/filter-bar/index.js +1 -0
  17. package/src/filter-bar/useFilterBar.js +28 -0
  18. package/src/filter-clause/ExpandoCombobox.css.js +54 -0
  19. package/src/filter-clause/ExpandoCombobox.js +86 -0
  20. package/src/filter-clause/FilterClause.css.js +101 -0
  21. package/src/filter-clause/FilterClause.js +69 -0
  22. package/src/filter-clause/column-picker/ColumnPicker.js +25 -0
  23. package/src/filter-clause/column-picker/useColumnPicker.js +42 -0
  24. package/src/filter-clause/filterClauseFocusManagement.js +156 -0
  25. package/src/filter-clause/filterClauseTypes.js +0 -0
  26. package/src/filter-clause/index.js +5 -0
  27. package/src/filter-clause/operator-picker/OperatorPicker.js +25 -0
  28. package/src/filter-clause/operator-picker/operator-utils.js +23 -0
  29. package/src/filter-clause/operator-picker/useOperatorPicker.js +42 -0
  30. package/src/filter-clause/useFilterClause.js +135 -0
  31. package/src/filter-clause/value-editors/FilterClauseValueEditor.js +59 -0
  32. package/src/filter-clause/value-editors/FilterClauseValueEditorDate.js +55 -0
  33. package/src/filter-clause/value-editors/FilterClauseValueEditorNumber.js +32 -0
  34. package/src/filter-clause/value-editors/FilterClauseValueEditorText.js +182 -0
  35. package/src/filter-clause/value-editors/FilterClauseValueEditorTime.js +53 -0
  36. package/src/filter-container/ExtendedSingleValueFilterClause.js +35 -0
  37. package/src/filter-container/FilterContainer.css.js +13 -0
  38. package/src/filter-container/FilterContainer.js +121 -0
  39. package/src/filter-container/useFilterContainer.js +82 -0
  40. package/src/filter-context-menu/useFilterContextMenu.js +106 -0
  41. package/src/filter-display/FilterDisplay.css.js +31 -0
  42. package/src/filter-display/FilterDisplay.js +59 -0
  43. package/src/filter-editor/FilterClauseCombinator.css.js +15 -0
  44. package/src/filter-editor/FilterClauseCombinator.js +32 -0
  45. package/src/filter-editor/FilterEditor.css.js +13 -0
  46. package/src/filter-editor/FilterEditor.js +65 -0
  47. package/src/filter-editor/index.js +1 -0
  48. package/src/filter-editor/useFilterEditor.js +193 -0
  49. package/src/filter-panel/FilterPanel.css.js +22 -0
  50. package/src/filter-panel/FilterPanel.js +59 -0
  51. package/src/filter-panel/useFilterPanel.js +58 -0
  52. package/src/filter-pill/FilterMenu.js +48 -0
  53. package/src/filter-pill/FilterPill.css.js +15 -0
  54. package/src/filter-pill/FilterPill.js +114 -0
  55. package/src/filter-pill/FilterPillNext.css.js +12 -0
  56. package/src/filter-pill/FilterPillNext.js +65 -0
  57. package/src/filter-pill/filterAsReactNode.js +28 -0
  58. package/src/filter-pill/getFilterLabel.js +11 -0
  59. package/src/filter-pill/getFilterTooltipText.js +32 -0
  60. package/src/filter-pill/index.js +1 -0
  61. package/src/filter-pill/useFilterPillNext.js +53 -0
  62. package/src/filter-pill-menu/FilterPillMenu.css.js +8 -0
  63. package/src/filter-pill-menu/FilterPillMenu.js +46 -0
  64. package/src/filter-pill-menu/FilterPillMenuOptions.js +26 -0
  65. package/src/filter-pill-menu/index.js +1 -0
  66. package/src/filter-provider/FilterContext.js +71 -0
  67. package/src/filter-provider/FilterProvider.js +188 -0
  68. package/src/filter-provider/filter-descriptor-utils.js +41 -0
  69. package/src/filter-toggle-button/FilterToggleButton.css.js +22 -0
  70. package/src/filter-toggle-button/FilterToggleButton.js +103 -0
  71. package/src/filter-utils.js +300 -0
  72. package/src/index.js +21 -0
  73. package/src/inline-filter/InlineFilter.css.js +89 -0
  74. package/src/inline-filter/InlineFilter.js +56 -0
  75. package/src/inline-filter/index.js +1 -0
  76. package/src/inline-filter/useInlineFilter.js +11 -0
  77. package/src/quick-filters/QuickFilters.css.js +39 -0
  78. package/src/quick-filters/QuickFilters.js +81 -0
  79. package/src/quick-filters/index.js +1 -0
  80. package/src/quick-filters/useQuickFilters.js +108 -0
  81. package/src/saved-filters/DeleteFilterPrompt.js +23 -0
  82. package/src/saved-filters/FilterNamePrompt.css.js +19 -0
  83. package/src/saved-filters/FilterNamePrompt.js +74 -0
  84. package/src/saved-filters/SavedFilterPanel.css.js +21 -0
  85. package/src/saved-filters/SavedFilterPanel.js +53 -0
  86. package/src/saved-filters/useFilterNamePrompt.js +74 -0
  87. package/src/saved-filters/useSavedFilterPanel.js +19 -0
  88. package/src/tabbed-filter-container/TabbedFilterContainer.js +61 -0
  89. package/src/toggle-filter/ToggleFilter.css.js +10 -0
  90. package/src/toggle-filter/ToggleFilter.js +68 -0
  91. package/src/toggle-filter/useToggleFilter.js +57 -0
  92. package/types/filter-clause/column-picker/ColumnPicker.d.ts +1 -1
  93. package/types/filter-clause/operator-picker/OperatorPicker.d.ts +1 -1
  94. package/types/filter-clause/value-editors/FilterClauseValueEditor.d.ts +1 -1
  95. package/cjs/FilterAggregator.js +0 -162
  96. package/cjs/FilterAggregator.js.map +0 -1
  97. package/cjs/FilterModel.js +0 -227
  98. package/cjs/FilterModel.js.map +0 -1
  99. package/cjs/column-filter/ColumnFilter.css.js +0 -6
  100. package/cjs/column-filter/ColumnFilter.css.js.map +0 -1
  101. package/cjs/column-filter/ColumnFilter.js +0 -83
  102. package/cjs/column-filter/ColumnFilter.js.map +0 -1
  103. package/cjs/column-filter/useColumnFilter.js +0 -139
  104. package/cjs/column-filter/useColumnFilter.js.map +0 -1
  105. package/cjs/custom-filters/CustomFilters.js +0 -99
  106. package/cjs/custom-filters/CustomFilters.js.map +0 -1
  107. package/cjs/custom-filters/filterBarFocusManagement.js +0 -35
  108. package/cjs/custom-filters/filterBarFocusManagement.js.map +0 -1
  109. package/cjs/custom-filters/useCustomFilters.js +0 -266
  110. package/cjs/custom-filters/useCustomFilters.js.map +0 -1
  111. package/cjs/custom-filters/useFilterState.js +0 -149
  112. package/cjs/custom-filters/useFilterState.js.map +0 -1
  113. package/cjs/filter-bar/FilterBar.css.js +0 -6
  114. package/cjs/filter-bar/FilterBar.css.js.map +0 -1
  115. package/cjs/filter-bar/FilterBar.js +0 -123
  116. package/cjs/filter-bar/FilterBar.js.map +0 -1
  117. package/cjs/filter-bar/useFilterBar.js +0 -37
  118. package/cjs/filter-bar/useFilterBar.js.map +0 -1
  119. package/cjs/filter-clause/ExpandoCombobox.css.js +0 -6
  120. package/cjs/filter-clause/ExpandoCombobox.css.js.map +0 -1
  121. package/cjs/filter-clause/ExpandoCombobox.js +0 -114
  122. package/cjs/filter-clause/ExpandoCombobox.js.map +0 -1
  123. package/cjs/filter-clause/FilterClause.css.js +0 -6
  124. package/cjs/filter-clause/FilterClause.css.js.map +0 -1
  125. package/cjs/filter-clause/FilterClause.js +0 -102
  126. package/cjs/filter-clause/FilterClause.js.map +0 -1
  127. package/cjs/filter-clause/column-picker/ColumnPicker.js +0 -39
  128. package/cjs/filter-clause/column-picker/ColumnPicker.js.map +0 -1
  129. package/cjs/filter-clause/column-picker/useColumnPicker.js +0 -61
  130. package/cjs/filter-clause/column-picker/useColumnPicker.js.map +0 -1
  131. package/cjs/filter-clause/filterClauseFocusManagement.js +0 -204
  132. package/cjs/filter-clause/filterClauseFocusManagement.js.map +0 -1
  133. package/cjs/filter-clause/operator-picker/OperatorPicker.js +0 -40
  134. package/cjs/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
  135. package/cjs/filter-clause/operator-picker/operator-utils.js +0 -34
  136. package/cjs/filter-clause/operator-picker/operator-utils.js.map +0 -1
  137. package/cjs/filter-clause/operator-picker/useOperatorPicker.js +0 -61
  138. package/cjs/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
  139. package/cjs/filter-clause/useFilterClause.js +0 -172
  140. package/cjs/filter-clause/useFilterClause.js.map +0 -1
  141. package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js +0 -93
  142. package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
  143. package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -64
  144. package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
  145. package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -55
  146. package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
  147. package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -222
  148. package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
  149. package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -62
  150. package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
  151. package/cjs/filter-container/ExtendedSingleValueFilterClause.js +0 -63
  152. package/cjs/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
  153. package/cjs/filter-container/FilterContainer.css.js +0 -6
  154. package/cjs/filter-container/FilterContainer.css.js.map +0 -1
  155. package/cjs/filter-container/FilterContainer.js +0 -145
  156. package/cjs/filter-container/FilterContainer.js.map +0 -1
  157. package/cjs/filter-container/useFilterContainer.js +0 -137
  158. package/cjs/filter-container/useFilterContainer.js.map +0 -1
  159. package/cjs/filter-context-menu/useFilterContextMenu.js +0 -129
  160. package/cjs/filter-context-menu/useFilterContextMenu.js.map +0 -1
  161. package/cjs/filter-display/FilterDisplay.css.js +0 -6
  162. package/cjs/filter-display/FilterDisplay.css.js.map +0 -1
  163. package/cjs/filter-display/FilterDisplay.js +0 -79
  164. package/cjs/filter-display/FilterDisplay.js.map +0 -1
  165. package/cjs/filter-editor/FilterClauseCombinator.css.js +0 -6
  166. package/cjs/filter-editor/FilterClauseCombinator.css.js.map +0 -1
  167. package/cjs/filter-editor/FilterClauseCombinator.js +0 -42
  168. package/cjs/filter-editor/FilterClauseCombinator.js.map +0 -1
  169. package/cjs/filter-editor/FilterEditor.css.js +0 -6
  170. package/cjs/filter-editor/FilterEditor.css.js.map +0 -1
  171. package/cjs/filter-editor/FilterEditor.js +0 -101
  172. package/cjs/filter-editor/FilterEditor.js.map +0 -1
  173. package/cjs/filter-editor/useFilterEditor.js +0 -191
  174. package/cjs/filter-editor/useFilterEditor.js.map +0 -1
  175. package/cjs/filter-panel/FilterPanel.css.js +0 -6
  176. package/cjs/filter-panel/FilterPanel.css.js.map +0 -1
  177. package/cjs/filter-panel/FilterPanel.js +0 -91
  178. package/cjs/filter-panel/FilterPanel.js.map +0 -1
  179. package/cjs/filter-panel/useFilterPanel.js +0 -68
  180. package/cjs/filter-panel/useFilterPanel.js.map +0 -1
  181. package/cjs/filter-pill/FilterMenu.js +0 -63
  182. package/cjs/filter-pill/FilterMenu.js.map +0 -1
  183. package/cjs/filter-pill/FilterPill.css.js +0 -6
  184. package/cjs/filter-pill/FilterPill.css.js.map +0 -1
  185. package/cjs/filter-pill/FilterPill.js +0 -147
  186. package/cjs/filter-pill/FilterPill.js.map +0 -1
  187. package/cjs/filter-pill/FilterPillNext.css.js +0 -6
  188. package/cjs/filter-pill/FilterPillNext.css.js.map +0 -1
  189. package/cjs/filter-pill/FilterPillNext.js +0 -91
  190. package/cjs/filter-pill/FilterPillNext.js.map +0 -1
  191. package/cjs/filter-pill/filterAsReactNode.js +0 -27
  192. package/cjs/filter-pill/filterAsReactNode.js.map +0 -1
  193. package/cjs/filter-pill/getFilterLabel.js +0 -22
  194. package/cjs/filter-pill/getFilterLabel.js.map +0 -1
  195. package/cjs/filter-pill/getFilterTooltipText.js +0 -41
  196. package/cjs/filter-pill/getFilterTooltipText.js.map +0 -1
  197. package/cjs/filter-pill/useFilterPillNext.js +0 -65
  198. package/cjs/filter-pill/useFilterPillNext.js.map +0 -1
  199. package/cjs/filter-pill-menu/FilterPillMenuOptions.js +0 -32
  200. package/cjs/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
  201. package/cjs/filter-provider/FilterContext.js +0 -105
  202. package/cjs/filter-provider/FilterContext.js.map +0 -1
  203. package/cjs/filter-provider/FilterProvider.js +0 -240
  204. package/cjs/filter-provider/FilterProvider.js.map +0 -1
  205. package/cjs/filter-provider/filter-descriptor-utils.js +0 -67
  206. package/cjs/filter-provider/filter-descriptor-utils.js.map +0 -1
  207. package/cjs/filter-utils.js +0 -367
  208. package/cjs/filter-utils.js.map +0 -1
  209. package/cjs/index.js +0 -80
  210. package/cjs/index.js.map +0 -1
  211. package/cjs/inline-filter/InlineFilter.css.js +0 -6
  212. package/cjs/inline-filter/InlineFilter.css.js.map +0 -1
  213. package/cjs/inline-filter/InlineFilter.js +0 -70
  214. package/cjs/inline-filter/InlineFilter.js.map +0 -1
  215. package/cjs/inline-filter/useInlineFilter.js +0 -16
  216. package/cjs/inline-filter/useInlineFilter.js.map +0 -1
  217. package/cjs/quick-filters/QuickFilters.css.js +0 -6
  218. package/cjs/quick-filters/QuickFilters.css.js.map +0 -1
  219. package/cjs/quick-filters/QuickFilters.js +0 -98
  220. package/cjs/quick-filters/QuickFilters.js.map +0 -1
  221. package/cjs/quick-filters/useQuickFilters.js +0 -152
  222. package/cjs/quick-filters/useQuickFilters.js.map +0 -1
  223. package/cjs/saved-filters/DeleteFilterPrompt.js +0 -37
  224. package/cjs/saved-filters/DeleteFilterPrompt.js.map +0 -1
  225. package/cjs/saved-filters/FilterNamePrompt.css.js +0 -6
  226. package/cjs/saved-filters/FilterNamePrompt.css.js.map +0 -1
  227. package/cjs/saved-filters/FilterNamePrompt.js +0 -89
  228. package/cjs/saved-filters/FilterNamePrompt.js.map +0 -1
  229. package/cjs/saved-filters/SavedFilterPanel.css.js +0 -6
  230. package/cjs/saved-filters/SavedFilterPanel.css.js.map +0 -1
  231. package/cjs/saved-filters/SavedFilterPanel.js +0 -62
  232. package/cjs/saved-filters/SavedFilterPanel.js.map +0 -1
  233. package/cjs/saved-filters/useFilterNamePrompt.js +0 -98
  234. package/cjs/saved-filters/useFilterNamePrompt.js.map +0 -1
  235. package/cjs/saved-filters/useSavedFilterPanel.js +0 -29
  236. package/cjs/saved-filters/useSavedFilterPanel.js.map +0 -1
  237. package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js +0 -6
  238. package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
  239. package/cjs/tabbed-filter-container/TabbedFilterContainer.js +0 -57
  240. package/cjs/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
  241. package/cjs/toggle-filter/ToggleFilter.css.js +0 -6
  242. package/cjs/toggle-filter/ToggleFilter.css.js.map +0 -1
  243. package/cjs/toggle-filter/ToggleFilter.js +0 -85
  244. package/cjs/toggle-filter/ToggleFilter.js.map +0 -1
  245. package/cjs/toggle-filter/useToggleFilter.js +0 -67
  246. package/cjs/toggle-filter/useToggleFilter.js.map +0 -1
  247. package/esm/FilterAggregator.js +0 -160
  248. package/esm/FilterAggregator.js.map +0 -1
  249. package/esm/FilterModel.js +0 -224
  250. package/esm/FilterModel.js.map +0 -1
  251. package/esm/column-filter/ColumnFilter.css.js +0 -4
  252. package/esm/column-filter/ColumnFilter.css.js.map +0 -1
  253. package/esm/column-filter/ColumnFilter.js +0 -81
  254. package/esm/column-filter/ColumnFilter.js.map +0 -1
  255. package/esm/column-filter/useColumnFilter.js +0 -137
  256. package/esm/column-filter/useColumnFilter.js.map +0 -1
  257. package/esm/custom-filters/CustomFilters.js +0 -97
  258. package/esm/custom-filters/CustomFilters.js.map +0 -1
  259. package/esm/custom-filters/filterBarFocusManagement.js +0 -33
  260. package/esm/custom-filters/filterBarFocusManagement.js.map +0 -1
  261. package/esm/custom-filters/useCustomFilters.js +0 -263
  262. package/esm/custom-filters/useCustomFilters.js.map +0 -1
  263. package/esm/custom-filters/useFilterState.js +0 -147
  264. package/esm/custom-filters/useFilterState.js.map +0 -1
  265. package/esm/filter-bar/FilterBar.css.js +0 -4
  266. package/esm/filter-bar/FilterBar.css.js.map +0 -1
  267. package/esm/filter-bar/FilterBar.js +0 -121
  268. package/esm/filter-bar/FilterBar.js.map +0 -1
  269. package/esm/filter-bar/useFilterBar.js +0 -35
  270. package/esm/filter-bar/useFilterBar.js.map +0 -1
  271. package/esm/filter-clause/ExpandoCombobox.css.js +0 -4
  272. package/esm/filter-clause/ExpandoCombobox.css.js.map +0 -1
  273. package/esm/filter-clause/ExpandoCombobox.js +0 -112
  274. package/esm/filter-clause/ExpandoCombobox.js.map +0 -1
  275. package/esm/filter-clause/FilterClause.css.js +0 -4
  276. package/esm/filter-clause/FilterClause.css.js.map +0 -1
  277. package/esm/filter-clause/FilterClause.js +0 -100
  278. package/esm/filter-clause/FilterClause.js.map +0 -1
  279. package/esm/filter-clause/column-picker/ColumnPicker.js +0 -37
  280. package/esm/filter-clause/column-picker/ColumnPicker.js.map +0 -1
  281. package/esm/filter-clause/column-picker/useColumnPicker.js +0 -59
  282. package/esm/filter-clause/column-picker/useColumnPicker.js.map +0 -1
  283. package/esm/filter-clause/filterClauseFocusManagement.js +0 -191
  284. package/esm/filter-clause/filterClauseFocusManagement.js.map +0 -1
  285. package/esm/filter-clause/operator-picker/OperatorPicker.js +0 -38
  286. package/esm/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
  287. package/esm/filter-clause/operator-picker/operator-utils.js +0 -30
  288. package/esm/filter-clause/operator-picker/operator-utils.js.map +0 -1
  289. package/esm/filter-clause/operator-picker/useOperatorPicker.js +0 -59
  290. package/esm/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
  291. package/esm/filter-clause/useFilterClause.js +0 -170
  292. package/esm/filter-clause/useFilterClause.js.map +0 -1
  293. package/esm/filter-clause/value-editors/FilterClauseValueEditor.js +0 -91
  294. package/esm/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
  295. package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -62
  296. package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
  297. package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -53
  298. package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
  299. package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -220
  300. package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
  301. package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -60
  302. package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
  303. package/esm/filter-container/ExtendedSingleValueFilterClause.js +0 -60
  304. package/esm/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
  305. package/esm/filter-container/FilterContainer.css.js +0 -4
  306. package/esm/filter-container/FilterContainer.css.js.map +0 -1
  307. package/esm/filter-container/FilterContainer.js +0 -142
  308. package/esm/filter-container/FilterContainer.js.map +0 -1
  309. package/esm/filter-container/useFilterContainer.js +0 -133
  310. package/esm/filter-container/useFilterContainer.js.map +0 -1
  311. package/esm/filter-context-menu/useFilterContextMenu.js +0 -127
  312. package/esm/filter-context-menu/useFilterContextMenu.js.map +0 -1
  313. package/esm/filter-display/FilterDisplay.css.js +0 -4
  314. package/esm/filter-display/FilterDisplay.css.js.map +0 -1
  315. package/esm/filter-display/FilterDisplay.js +0 -77
  316. package/esm/filter-display/FilterDisplay.js.map +0 -1
  317. package/esm/filter-editor/FilterClauseCombinator.css.js +0 -4
  318. package/esm/filter-editor/FilterClauseCombinator.css.js.map +0 -1
  319. package/esm/filter-editor/FilterClauseCombinator.js +0 -40
  320. package/esm/filter-editor/FilterClauseCombinator.js.map +0 -1
  321. package/esm/filter-editor/FilterEditor.css.js +0 -4
  322. package/esm/filter-editor/FilterEditor.css.js.map +0 -1
  323. package/esm/filter-editor/FilterEditor.js +0 -99
  324. package/esm/filter-editor/FilterEditor.js.map +0 -1
  325. package/esm/filter-editor/useFilterEditor.js +0 -189
  326. package/esm/filter-editor/useFilterEditor.js.map +0 -1
  327. package/esm/filter-panel/FilterPanel.css.js +0 -4
  328. package/esm/filter-panel/FilterPanel.css.js.map +0 -1
  329. package/esm/filter-panel/FilterPanel.js +0 -89
  330. package/esm/filter-panel/FilterPanel.js.map +0 -1
  331. package/esm/filter-panel/useFilterPanel.js +0 -66
  332. package/esm/filter-panel/useFilterPanel.js.map +0 -1
  333. package/esm/filter-pill/FilterMenu.js +0 -61
  334. package/esm/filter-pill/FilterMenu.js.map +0 -1
  335. package/esm/filter-pill/FilterPill.css.js +0 -4
  336. package/esm/filter-pill/FilterPill.css.js.map +0 -1
  337. package/esm/filter-pill/FilterPill.js +0 -145
  338. package/esm/filter-pill/FilterPill.js.map +0 -1
  339. package/esm/filter-pill/FilterPillNext.css.js +0 -4
  340. package/esm/filter-pill/FilterPillNext.css.js.map +0 -1
  341. package/esm/filter-pill/FilterPillNext.js +0 -89
  342. package/esm/filter-pill/FilterPillNext.js.map +0 -1
  343. package/esm/filter-pill/filterAsReactNode.js +0 -25
  344. package/esm/filter-pill/filterAsReactNode.js.map +0 -1
  345. package/esm/filter-pill/getFilterLabel.js +0 -20
  346. package/esm/filter-pill/getFilterLabel.js.map +0 -1
  347. package/esm/filter-pill/getFilterTooltipText.js +0 -39
  348. package/esm/filter-pill/getFilterTooltipText.js.map +0 -1
  349. package/esm/filter-pill/useFilterPillNext.js +0 -63
  350. package/esm/filter-pill/useFilterPillNext.js.map +0 -1
  351. package/esm/filter-pill-menu/FilterPillMenuOptions.js +0 -27
  352. package/esm/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
  353. package/esm/filter-provider/FilterContext.js +0 -94
  354. package/esm/filter-provider/FilterContext.js.map +0 -1
  355. package/esm/filter-provider/FilterProvider.js +0 -238
  356. package/esm/filter-provider/FilterProvider.js.map +0 -1
  357. package/esm/filter-provider/filter-descriptor-utils.js +0 -61
  358. package/esm/filter-provider/filter-descriptor-utils.js.map +0 -1
  359. package/esm/filter-utils.js +0 -344
  360. package/esm/filter-utils.js.map +0 -1
  361. package/esm/index.js +0 -26
  362. package/esm/index.js.map +0 -1
  363. package/esm/inline-filter/InlineFilter.css.js +0 -4
  364. package/esm/inline-filter/InlineFilter.css.js.map +0 -1
  365. package/esm/inline-filter/InlineFilter.js +0 -68
  366. package/esm/inline-filter/InlineFilter.js.map +0 -1
  367. package/esm/inline-filter/useInlineFilter.js +0 -14
  368. package/esm/inline-filter/useInlineFilter.js.map +0 -1
  369. package/esm/quick-filters/QuickFilters.css.js +0 -4
  370. package/esm/quick-filters/QuickFilters.css.js.map +0 -1
  371. package/esm/quick-filters/QuickFilters.js +0 -96
  372. package/esm/quick-filters/QuickFilters.js.map +0 -1
  373. package/esm/quick-filters/useQuickFilters.js +0 -150
  374. package/esm/quick-filters/useQuickFilters.js.map +0 -1
  375. package/esm/saved-filters/DeleteFilterPrompt.js +0 -35
  376. package/esm/saved-filters/DeleteFilterPrompt.js.map +0 -1
  377. package/esm/saved-filters/FilterNamePrompt.css.js +0 -4
  378. package/esm/saved-filters/FilterNamePrompt.css.js.map +0 -1
  379. package/esm/saved-filters/FilterNamePrompt.js +0 -87
  380. package/esm/saved-filters/FilterNamePrompt.js.map +0 -1
  381. package/esm/saved-filters/SavedFilterPanel.css.js +0 -4
  382. package/esm/saved-filters/SavedFilterPanel.css.js.map +0 -1
  383. package/esm/saved-filters/SavedFilterPanel.js +0 -60
  384. package/esm/saved-filters/SavedFilterPanel.js.map +0 -1
  385. package/esm/saved-filters/useFilterNamePrompt.js +0 -95
  386. package/esm/saved-filters/useFilterNamePrompt.js.map +0 -1
  387. package/esm/saved-filters/useSavedFilterPanel.js +0 -27
  388. package/esm/saved-filters/useSavedFilterPanel.js.map +0 -1
  389. package/esm/tabbed-filter-container/TabbedFilterContainer.css.js +0 -4
  390. package/esm/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
  391. package/esm/tabbed-filter-container/TabbedFilterContainer.js +0 -55
  392. package/esm/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
  393. package/esm/toggle-filter/ToggleFilter.css.js +0 -4
  394. package/esm/toggle-filter/ToggleFilter.css.js.map +0 -1
  395. package/esm/toggle-filter/ToggleFilter.js +0 -83
  396. package/esm/toggle-filter/ToggleFilter.js.map +0 -1
  397. package/esm/toggle-filter/useToggleFilter.js +0 -65
  398. package/esm/toggle-filter/useToggleFilter.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { getElementByDataIndex, getElementDataIndex, queryClosest } from "@vuu-ui/vuu-utils";
2
+ const QUERY_ADD_BUTTON = '.saltButton:has([aria-label="Add filter"])';
3
+ const navigateToNextItem = (el, direction = "fwd")=>{
4
+ const pill = queryClosest(el, ".vuuFilterPill");
5
+ if (pill) {
6
+ const index = getElementDataIndex(pill);
7
+ if ("number" == typeof index) {
8
+ const target = "fwd" === direction ? getElementByDataIndex(pill.parentElement, index + 1) : getElementByDataIndex(pill.parentElement, index - 1);
9
+ if (target) target.focus();
10
+ else if ("fwd" === direction) {
11
+ const filterBar = queryClosest(el, ".vuuFilterBar");
12
+ const addButton = filterBar?.querySelector(QUERY_ADD_BUTTON);
13
+ addButton?.focus();
14
+ }
15
+ }
16
+ } else {
17
+ const button = queryClosest(el, QUERY_ADD_BUTTON);
18
+ if (button) {
19
+ const filterBar = queryClosest(el, ".vuuFilterBar");
20
+ const target = filterBar?.querySelector(".vuuFilterPill:last-child");
21
+ target?.focus();
22
+ }
23
+ }
24
+ };
25
+ export { navigateToNextItem };
@@ -0,0 +1 @@
1
+ export * from "./CustomFilters.js";
@@ -0,0 +1,237 @@
1
+ import { NullEditAPI } from "@vuu-ui/vuu-ui-controls";
2
+ import { getElementDataIndex, queryClosest } from "@vuu-ui/vuu-utils";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { navigateToNextItem } from "./filterBarFocusManagement.js";
5
+ import { useFilterState } from "./useFilterState.js";
6
+ const isEditFilterState = (filterState)=>"edit" === filterState || "create" === filterState;
7
+ const useCustomFilters = ({ columnDescriptors, containerRef, defaultFilterState, filterState, onApplyFilter, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged })=>{
8
+ const addButtonRef = useRef(null);
9
+ const [interactedFilterState, setInteractedFilterState] = useState();
10
+ const [promptProps, setPromptProps] = useState(null);
11
+ const editPillLabelAPI = useRef(NullEditAPI);
12
+ const columnsByName = useMemo(()=>columnDescriptorsByName(columnDescriptors), [
13
+ columnDescriptors
14
+ ]);
15
+ const { activeFilterIndex, filters, onAddFilter, onChangeFilter, onDeleteFilter, onRenameFilter, onToggleFilterActive } = useFilterState({
16
+ defaultFilterState,
17
+ filterState,
18
+ onFilterDeleted,
19
+ onFilterRenamed,
20
+ onFilterStateChanged
21
+ });
22
+ useEffect(()=>{
23
+ const activeFilters = activeFilterIndex.map((i)=>filters[i]);
24
+ const applyFilter = (filter)=>{
25
+ if (filter) onApplyFilter(filter);
26
+ else onClearFilter();
27
+ };
28
+ if (0 === activeFilters.length) applyFilter();
29
+ else if (1 === activeFilters.length) {
30
+ const [filter] = activeFilters;
31
+ applyFilter(filter);
32
+ } else applyFilter({
33
+ op: "and",
34
+ filters: activeFilters
35
+ });
36
+ }, [
37
+ activeFilterIndex,
38
+ columnsByName,
39
+ filters,
40
+ onApplyFilter,
41
+ onClearFilter
42
+ ]);
43
+ const editPillLabel = useCallback((index, filter)=>{
44
+ setTimeout(()=>{
45
+ setInteractedFilterState({
46
+ filter,
47
+ index,
48
+ state: "rename"
49
+ });
50
+ }, 100);
51
+ }, []);
52
+ const focusFilterPill = useCallback((index = 0)=>{
53
+ requestAnimationFrame(()=>{
54
+ const target = containerRef.current?.querySelector(`.vuuFilterPill[data-index="${index}"] button`);
55
+ if (target) target.focus();
56
+ });
57
+ }, [
58
+ containerRef
59
+ ]);
60
+ const deleteConfirmed = useCallback((filter)=>{
61
+ onDeleteFilter(filter);
62
+ requestAnimationFrame(()=>{
63
+ if (filters.length) focusFilterPill(0);
64
+ });
65
+ }, [
66
+ filters.length,
67
+ focusFilterPill,
68
+ onDeleteFilter
69
+ ]);
70
+ const getDeletePrompt = useMemo(()=>(filter)=>{
71
+ const close = ()=>{
72
+ setPromptProps(null);
73
+ focusFilterPill();
74
+ };
75
+ return {
76
+ className: "vuuFilterDeletePrompt",
77
+ confirmButtonLabel: "Remove",
78
+ icon: "warn-triangle",
79
+ initialFocusedItem: "confirm",
80
+ onCancel: close,
81
+ onClose: close,
82
+ onConfirm: ()=>{
83
+ setPromptProps(null);
84
+ deleteConfirmed(filter);
85
+ },
86
+ children: `Are you sure you want to delete filter '${filter.name}'`,
87
+ title: "Remove Filter",
88
+ status: "warning"
89
+ };
90
+ }, [
91
+ deleteConfirmed,
92
+ focusFilterPill
93
+ ]);
94
+ const deleteFilter = useCallback((filter, withPrompt)=>{
95
+ if (withPrompt) setPromptProps(getDeletePrompt(filter));
96
+ else deleteConfirmed(filter);
97
+ }, [
98
+ deleteConfirmed,
99
+ getDeletePrompt
100
+ ]);
101
+ const handleExitEditFilterName = useCallback((_, editedValue = "")=>{
102
+ if (interactedFilterState?.state === "rename" && interactedFilterState.filter) {
103
+ const { filter } = interactedFilterState;
104
+ const indexOfEditedFilter = onRenameFilter(filter, editedValue);
105
+ setInteractedFilterState(void 0);
106
+ focusFilterPill(indexOfEditedFilter);
107
+ }
108
+ setInteractedFilterState(void 0);
109
+ }, [
110
+ focusFilterPill,
111
+ interactedFilterState,
112
+ onRenameFilter
113
+ ]);
114
+ const handlePillMenuAction = useCallback((menuId, options)=>{
115
+ switch(menuId){
116
+ case "delete-filter":
117
+ {
118
+ const { filter } = options;
119
+ deleteFilter(filter, true);
120
+ return true;
121
+ }
122
+ case "rename-filter":
123
+ {
124
+ const { filter } = options;
125
+ const index = filters.indexOf(filter);
126
+ editPillLabel(index, filter);
127
+ return true;
128
+ }
129
+ case "edit-filter":
130
+ {
131
+ const { filter } = options;
132
+ setInteractedFilterState({
133
+ filter,
134
+ index: filters.indexOf(filter),
135
+ state: "edit"
136
+ });
137
+ return true;
138
+ }
139
+ default:
140
+ return false;
141
+ }
142
+ }, [
143
+ deleteFilter,
144
+ editPillLabel,
145
+ filters
146
+ ]);
147
+ const handlePillKeyDown = useCallback((e)=>{
148
+ if ("ArrowRight" === e.key || "ArrowLeft" === e.key) navigateToNextItem(e.target, "ArrowLeft" === e.key ? "bwd" : "fwd");
149
+ }, []);
150
+ const addIfNewElseUpdate = useCallback((newOrUpdatedFilter, existing)=>{
151
+ if (void 0 === existing) {
152
+ const idx = onAddFilter(newOrUpdatedFilter);
153
+ focusFilterPill(idx);
154
+ editPillLabel(idx, newOrUpdatedFilter);
155
+ } else {
156
+ const idx = onChangeFilter(existing, newOrUpdatedFilter);
157
+ focusFilterPill(idx);
158
+ }
159
+ }, [
160
+ editPillLabel,
161
+ focusFilterPill,
162
+ onAddFilter,
163
+ onChangeFilter
164
+ ]);
165
+ const filterSaveHandler = useCallback((filter)=>{
166
+ if (interactedFilterState) {
167
+ const { filter: existingFilter } = interactedFilterState;
168
+ setInteractedFilterState(void 0);
169
+ addIfNewElseUpdate(filter, existingFilter);
170
+ }
171
+ }, [
172
+ addIfNewElseUpdate,
173
+ interactedFilterState
174
+ ]);
175
+ const handlePillClick = useCallback((e)=>{
176
+ const isEditing = e.target.querySelector(".vuuEditableLabel-editing");
177
+ if (!isEditing) {
178
+ const pill = queryClosest(e.target, ".vuuFilterPill");
179
+ if (pill) {
180
+ const index = getElementDataIndex(pill);
181
+ onToggleFilterActive(index, e.shiftKey);
182
+ }
183
+ }
184
+ }, [
185
+ onToggleFilterActive
186
+ ]);
187
+ const FilterPillProps = {
188
+ editLabelApiRef: editPillLabelAPI,
189
+ onClick: handlePillClick,
190
+ onKeyDown: handlePillKeyDown,
191
+ onMenuAction: handlePillMenuAction,
192
+ onExitEditMode: handleExitEditFilterName
193
+ };
194
+ const handleClickAddButton = useCallback(()=>{
195
+ setInteractedFilterState({
196
+ index: -1,
197
+ state: "create"
198
+ });
199
+ }, []);
200
+ const handleKeyDownAddButton = useCallback((evt)=>{
201
+ if ("ArrowLeft" === evt.key) navigateToNextItem(evt.target, "bwd");
202
+ }, []);
203
+ const handleCancelEdit = useCallback(()=>{
204
+ if (interactedFilterState) {
205
+ const { index } = interactedFilterState;
206
+ if (-1 === index) addButtonRef.current?.focus();
207
+ else focusFilterPill(index);
208
+ setInteractedFilterState(void 0);
209
+ }
210
+ }, [
211
+ focusFilterPill,
212
+ interactedFilterState
213
+ ]);
214
+ const addButtonProps = {
215
+ ref: addButtonRef,
216
+ onClick: handleClickAddButton,
217
+ onKeyDown: handleKeyDownAddButton
218
+ };
219
+ return {
220
+ FilterPillProps,
221
+ activeFilterIndex,
222
+ addButtonProps,
223
+ columnsByName,
224
+ filters,
225
+ interactedFilterState,
226
+ onCancelEdit: handleCancelEdit,
227
+ onSave: filterSaveHandler,
228
+ promptProps
229
+ };
230
+ };
231
+ function columnDescriptorsByName(columns) {
232
+ return columns.reduce((m, col)=>({
233
+ ...m,
234
+ [col.name]: col
235
+ }), {});
236
+ }
237
+ export { isEditFilterState, useCustomFilters };
@@ -0,0 +1,123 @@
1
+ import { useCallback } from "react";
2
+ import { useControlled } from "@vuu-ui/vuu-ui-controls";
3
+ const getActiveIndices = (indices, toggledIndex, preserveExisting)=>{
4
+ const isActive = indices.includes(toggledIndex);
5
+ if (isActive) if (preserveExisting) return indices.filter((i)=>i !== toggledIndex);
6
+ else return [];
7
+ if (preserveExisting) return indices.concat(toggledIndex);
8
+ return [
9
+ toggledIndex
10
+ ];
11
+ };
12
+ const useFilterState = ({ defaultFilterState, onFilterDeleted, onFilterRenamed, onFilterStateChanged, filterState: filterStateProp })=>{
13
+ const [filterState, setFilterState] = useControlled({
14
+ controlled: filterStateProp,
15
+ default: defaultFilterState ?? {
16
+ filters: [],
17
+ activeIndices: []
18
+ },
19
+ name: "useFilterState",
20
+ state: "FilterState"
21
+ });
22
+ const handleFilterStateChange = useCallback((s)=>{
23
+ setFilterState(s);
24
+ onFilterStateChanged?.(s);
25
+ }, [
26
+ onFilterStateChanged,
27
+ setFilterState
28
+ ]);
29
+ const handleAddFilter = useCallback((filter)=>{
30
+ const index = filterState.filters.length;
31
+ const newFilters = filterState.filters.concat(filter);
32
+ const newIndices = appendIfNotPresent(filterState.activeIndices, index);
33
+ handleFilterStateChange({
34
+ filters: newFilters,
35
+ activeIndices: newIndices
36
+ });
37
+ return index;
38
+ }, [
39
+ filterState,
40
+ handleFilterStateChange
41
+ ]);
42
+ const handleDeleteFilter = useCallback((filter)=>{
43
+ let index = -1;
44
+ const newFilters = filterState.filters.filter((f, i)=>{
45
+ if (f !== filter) return true;
46
+ index = i;
47
+ return false;
48
+ });
49
+ const newIndices = removeIndexAndDecrementLarger(filterState.activeIndices, index);
50
+ handleFilterStateChange({
51
+ filters: newFilters,
52
+ activeIndices: newIndices
53
+ });
54
+ onFilterDeleted?.(filter);
55
+ return index;
56
+ }, [
57
+ filterState.filters,
58
+ filterState.activeIndices,
59
+ handleFilterStateChange,
60
+ onFilterDeleted
61
+ ]);
62
+ const handleRenameFilter = useCallback((filter, name)=>{
63
+ let index = -1;
64
+ const newFilters = filterState.filters.map((f, i)=>{
65
+ if (f !== filter) return f;
66
+ index = i;
67
+ return {
68
+ ...filter,
69
+ name
70
+ };
71
+ });
72
+ handleFilterStateChange({
73
+ ...filterState,
74
+ filters: newFilters
75
+ });
76
+ onFilterRenamed?.(filter, name);
77
+ return index;
78
+ }, [
79
+ filterState,
80
+ handleFilterStateChange,
81
+ onFilterRenamed
82
+ ]);
83
+ const handleChangeFilter = useCallback((oldFilter, newFilter)=>{
84
+ let index = -1;
85
+ const newFilters = filterState.filters.map((f, i)=>{
86
+ if (f !== oldFilter) return f;
87
+ index = i;
88
+ return newFilter;
89
+ });
90
+ handleFilterStateChange({
91
+ ...filterState,
92
+ filters: newFilters
93
+ });
94
+ return index;
95
+ }, [
96
+ filterState,
97
+ handleFilterStateChange
98
+ ]);
99
+ const handleToggleFilterActive = useCallback((filterIndex, preserveRemainingFilters = false)=>{
100
+ handleFilterStateChange({
101
+ ...filterState,
102
+ activeIndices: getActiveIndices(filterState.activeIndices, filterIndex, preserveRemainingFilters)
103
+ });
104
+ }, [
105
+ filterState,
106
+ handleFilterStateChange
107
+ ]);
108
+ return {
109
+ activeFilterIndex: filterState.activeIndices,
110
+ filters: filterState.filters,
111
+ onToggleFilterActive: handleToggleFilterActive,
112
+ onAddFilter: handleAddFilter,
113
+ onChangeFilter: handleChangeFilter,
114
+ onDeleteFilter: handleDeleteFilter,
115
+ onRenameFilter: handleRenameFilter
116
+ };
117
+ };
118
+ const appendIfNotPresent = (ns, n)=>ns.includes(n) ? ns : ns.concat(n);
119
+ const removeIndexAndDecrementLarger = (indices, idxToRemove)=>indices.reduce((res, i)=>{
120
+ if (i === idxToRemove) return res;
121
+ return res.concat(i > idxToRemove ? i - 1 : i);
122
+ }, []);
123
+ export { useFilterState };
@@ -0,0 +1,81 @@
1
+ const css = `
2
+ .vuuFilterBar {
3
+ --vuu-svg-grid: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6.00004H4.66667V3.33337H3.33333C2.6 3.33337 2 3.93337 2 4.66671V6.00004ZM2 9.33337H4.66667V6.66671H2V9.33337ZM5.33333 9.33337H8V6.66671H5.33333V9.33337ZM8.66667 9.33337H11.3333V6.66671H8.66667V9.33337ZM5.33333 6.00004H8V3.33337H5.33333V6.00004ZM8.66667 3.33337V6.00004H11.3333V3.33337H8.66667ZM12 9.33337H14.6667V6.66671H12V9.33337ZM3.33333 12.6667H4.66667V10H2V11.3334C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3334V10H12V12.6667ZM12 3.33337V6.00004H14.6667V4.66671C14.6667 3.93337 14.0667 3.33337 13.3333 3.33337H12Z\"/></svg>");
4
+ --vuuOverflowContainer-minWidth: 0;
5
+ --filterbar-height: var(--vuuFilterBar-height, calc(var(--salt-size-base) + var(--salt-spacing-300)));
6
+ --vuuFilterEditor-height: var(--filterbar-height);
7
+ --icon-container-height: auto;
8
+ --flexbar-gap: var(--salt-spacing-100);
9
+ --icon-marginTop: 0;
10
+ background-color: var(--salt-container-secondary-background);
11
+ border-color: var(--salt-separable-secondary-borderColor);
12
+ border-style: var(--vuuFilterBar-borderStyle, none none solid none);
13
+ flex: var(--vuuFilterBar-flex);
14
+ align-items: center;
15
+ gap: var(--flexbar-gap);
16
+ height: var(--filterbar-height);
17
+ padding: var(--salt-spacing-100) var(--salt-spacing-200);
18
+ border-width: 1px;
19
+ flex-wrap: wrap;
20
+ grid-template-columns: 70px 1fr 28px;
21
+ grid-auto-rows: 28px 0;
22
+ display: inline-flex;
23
+ overflow: hidden;
24
+ }
25
+
26
+ .vuuFilterBar-quick-filter-mode {
27
+ --icon-container-height: 100%;
28
+ --icon-marginTop: 20px;
29
+ --filterbar-height: var(--vuuFilterBar-height, calc(2 * var(--salt-size-base)));
30
+ padding: var(--salt-spacing-100) var(--salt-spacing-200);
31
+ align-items: flex-end;
32
+ }
33
+
34
+ .vuuFilterBar:has(.vuuFilterEditor) {
35
+ height: calc(1px + var(--flexbar-gap) + (2 * var(--filterbar-height)));
36
+ grid-template-rows: 28px 28px;
37
+ }
38
+
39
+ .vuuFilterBar-iconContainer {
40
+ height: var(--icon-container-height);
41
+
42
+ & .saltToggleButtonGroup {
43
+ margin-top: var(--icon-marginTop);
44
+ transition: margin-top .1s ease-in;
45
+ }
46
+ }
47
+
48
+ .vuuFilterbar-icon {
49
+ width: 16px;
50
+ height: 16px;
51
+ display: inline-block;
52
+ }
53
+
54
+ .vuuFilterBar [data-icon="grid"] {
55
+ --vuu-icon-size: 16px;
56
+ --vuu-icon-svg: var(--vuu-svg-grid);
57
+ }
58
+
59
+ .vuuFilterBar [data-icon="plus"] {
60
+ --vuu-icon-size: 16px;
61
+ }
62
+
63
+ .vuuFilterBar .vuuToolbar {
64
+ flex: 0 auto;
65
+ }
66
+
67
+ .vuuFilterBar-Editor {
68
+ align-items: center;
69
+ gap: var(--salt-spacing-100);
70
+ flex-direction: row;
71
+ display: flex;
72
+ }
73
+
74
+ .vuuCustomFilters, .vuuCustomFilters-filters {
75
+ gap: var(--salt-spacing-100);
76
+ display: flex;
77
+ }
78
+
79
+
80
+ `;
81
+ export default css;
@@ -0,0 +1,97 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Icon } from "@vuu-ui/vuu-ui-controls";
3
+ import { ToggleButton, ToggleButtonGroup } from "@salt-ds/core";
4
+ import { useComponentCssInjection } from "@salt-ds/styles";
5
+ import { useWindow } from "@salt-ds/window";
6
+ import clsx from "clsx";
7
+ import { useMemo } from "react";
8
+ import { CustomFilters } from "../custom-filters/index.js";
9
+ import { QuickFilters } from "../quick-filters/index.js";
10
+ import { useFilterBar } from "./useFilterBar.js";
11
+ import FilterBar from "./FilterBar.css";
12
+ const classBase = "vuuFilterBar";
13
+ const FilterBar_FilterBar = ({ QuickFilterProps, className: classNameProp, columnDescriptors, defaultFilterMode, defaultFilterState, filterMode: filterModeProp, filterState, onApplyFilter, onChangeFilterMode: onChangeFilterModeProp, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, variant = "custom-filters-only", ...htmlAttributes })=>{
14
+ const targetWindow = useWindow();
15
+ useComponentCssInjection({
16
+ testId: "vuu-filter-bar",
17
+ css: FilterBar,
18
+ window: targetWindow
19
+ });
20
+ const allowCustomFilters = "quick-filters-only" !== variant;
21
+ const allowQuickFilters = "custom-filters-only" !== variant;
22
+ const controlledFilterMode = allowCustomFilters ? allowQuickFilters ? filterModeProp : "custom-filter" : "quick-filter";
23
+ const { filterMode, onChangeFilterMode } = useFilterBar({
24
+ defaultFilterMode,
25
+ filterMode: controlledFilterMode,
26
+ onChangeFilterMode: onChangeFilterModeProp
27
+ });
28
+ const className = clsx(classBase, classNameProp);
29
+ const startAdornment = useMemo(()=>{
30
+ if (!allowQuickFilters) return /*#__PURE__*/ jsx(Icon, {
31
+ name: "sliders",
32
+ size: 16,
33
+ style: {
34
+ top: 2
35
+ }
36
+ });
37
+ return /*#__PURE__*/ jsxs(ToggleButtonGroup, {
38
+ "data-variant": "secondary",
39
+ onChange: onChangeFilterMode,
40
+ value: filterMode,
41
+ children: [
42
+ /*#__PURE__*/ jsx(ToggleButton, {
43
+ className: "vuuIconToggleButton",
44
+ value: "custom-filter",
45
+ "aria-label": "Custom filters",
46
+ tabIndex: -1,
47
+ children: /*#__PURE__*/ jsx(Icon, {
48
+ name: "grid",
49
+ size: 16
50
+ })
51
+ }, "custom-filter"),
52
+ /*#__PURE__*/ jsx(ToggleButton, {
53
+ className: "vuuIconToggleButton",
54
+ value: "quick-filter",
55
+ "aria-label": "Quick filters",
56
+ tabIndex: -1,
57
+ children: /*#__PURE__*/ jsx(Icon, {
58
+ name: "tune",
59
+ size: 16
60
+ })
61
+ }, "quick-filter")
62
+ ]
63
+ });
64
+ }, [
65
+ allowQuickFilters,
66
+ filterMode,
67
+ onChangeFilterMode
68
+ ]);
69
+ return /*#__PURE__*/ jsxs("div", {
70
+ ...htmlAttributes,
71
+ className: clsx(className, `${classBase}-${filterMode}-mode`),
72
+ children: [
73
+ "quick-filters-only" === variant ? null : /*#__PURE__*/ jsx("div", {
74
+ className: `${classBase}-iconContainer`,
75
+ children: startAdornment
76
+ }),
77
+ "custom-filter" === filterMode ? /*#__PURE__*/ jsx(CustomFilters, {
78
+ columnDescriptors: columnDescriptors,
79
+ defaultFilterState: defaultFilterState,
80
+ filterState: filterState,
81
+ onApplyFilter: onApplyFilter,
82
+ onClearFilter: onClearFilter,
83
+ onFilterDeleted: onFilterDeleted,
84
+ onFilterRenamed: onFilterRenamed,
85
+ onFilterStateChanged: onFilterStateChanged,
86
+ vuuTable: vuuTable
87
+ }) : /*#__PURE__*/ jsx(QuickFilters, {
88
+ ...QuickFilterProps,
89
+ availableColumns: columnDescriptors,
90
+ onApplyFilter: onApplyFilter,
91
+ onClearFilter: onClearFilter,
92
+ vuuTable: vuuTable
93
+ })
94
+ ]
95
+ });
96
+ };
97
+ export { FilterBar_FilterBar as FilterBar };
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { PopupMenu } from "@vuu-ui/vuu-popups";
3
+ const FilterBarMenu = ()=>{
4
+ const classBase = "vuuFilterBarMenu";
5
+ return /*#__PURE__*/ jsx("div", {
6
+ className: classBase,
7
+ children: /*#__PURE__*/ jsx(PopupMenu, {
8
+ icon: "tune",
9
+ menuLocation: "filter-bar-menu",
10
+ tabIndex: -1
11
+ })
12
+ });
13
+ };
14
+ export { FilterBarMenu };
@@ -0,0 +1 @@
1
+ export * from "./FilterBar.js";
@@ -0,0 +1,28 @@
1
+ import { queryClosest } from "@vuu-ui/vuu-utils";
2
+ import { useControlled } from "@salt-ds/core";
3
+ import { useCallback } from "react";
4
+ const isFilterMode = (value)=>"custom-filter" === value || "quick-filter" === value;
5
+ const useFilterBar = ({ defaultFilterMode, filterMode: filterModeProp, onChangeFilterMode })=>{
6
+ const [filterMode, setFilterMode] = useControlled({
7
+ controlled: filterModeProp,
8
+ default: defaultFilterMode ?? "custom-filter",
9
+ name: "useFilterBar",
10
+ state: "filterMode"
11
+ });
12
+ const handleChangeFilterMode = useCallback((e)=>{
13
+ const button = queryClosest(e.target, "button");
14
+ const newFilterMode = button?.value;
15
+ if (isFilterMode(newFilterMode)) {
16
+ setFilterMode(newFilterMode);
17
+ onChangeFilterMode?.(newFilterMode);
18
+ }
19
+ }, [
20
+ onChangeFilterMode,
21
+ setFilterMode
22
+ ]);
23
+ return {
24
+ filterMode,
25
+ onChangeFilterMode: handleChangeFilterMode
26
+ };
27
+ };
28
+ export { useFilterBar };
@@ -0,0 +1,54 @@
1
+ const css = `
2
+ .vuuExpandoCombobox {
3
+ --expando-combobox-height: var(--vuuExpandoCombobox-height, var(--salt-size-base));
4
+ --expando-combobox-fontSize: var(--vuuExpandoCombobox-fontSize, 12px);
5
+ --saltPillInput-paddingLeft: 0px;
6
+ --saltPillInput-paddingRight: 0px;
7
+ height: var(--expando-combobox-height);
8
+ flex-direction: column;
9
+ min-width: 4px;
10
+ padding: 0;
11
+ display: inline-flex;
12
+
13
+ & .saltPill {
14
+ height: 100%;
15
+ padding-block: 0;
16
+ }
17
+
18
+ & .saltPillInput {
19
+ min-height: var(--expando-combobox-height);
20
+ min-width: 0;
21
+ }
22
+
23
+ & .saltPillInput-inputWrapper {
24
+ height: 100%;
25
+ padding: 0;
26
+ }
27
+
28
+ & .saltPillInput-input {
29
+ width: 0;
30
+ }
31
+
32
+ & .saltPillInput-endAdornmentContainer, & .saltPillInput-activationIndicator {
33
+ display: none;
34
+ }
35
+ }
36
+
37
+ .vuuExpandoOption {
38
+ min-width: calc(var(--salt-size-base) * 2);
39
+ padding-left: var(--salt-spacing-200);
40
+ padding-right: var(--salt-spacing-200);
41
+ }
42
+
43
+ .vuuExpandoCombobox:before {
44
+ content: attr(data-text);
45
+ font-size: var(--expando-combobox-fontSize);
46
+ white-space: pre-wrap;
47
+ height: 0;
48
+ display: block;
49
+ overflow: hidden;
50
+ }
51
+
52
+
53
+ `;
54
+ export default css;