@vuu-ui/vuu-filters 0.13.45 → 0.13.46

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 (376) hide show
  1. package/cjs/column-filter/ColumnFilter.js +4 -1
  2. package/cjs/column-filter/ColumnFilter.js.map +1 -1
  3. package/cjs/column-filter/useColumnFilter.js.map +1 -1
  4. package/cjs/filter-container/FilterContainer.css.js +6 -0
  5. package/cjs/filter-container/FilterContainer.css.js.map +1 -0
  6. package/cjs/filter-container/FilterContainer.js +14 -4
  7. package/cjs/filter-container/FilterContainer.js.map +1 -1
  8. package/cjs/filter-container/useFilterContainer.js.map +1 -1
  9. package/cjs/filter-display/FilterDisplay.js.map +1 -1
  10. package/cjs/filter-panel/FilterPanel.css.js +1 -1
  11. package/cjs/filter-panel/useFilterPanel.js +7 -9
  12. package/cjs/filter-panel/useFilterPanel.js.map +1 -1
  13. package/cjs/filter-pill/FilterPillNext.js +2 -1
  14. package/cjs/filter-pill/FilterPillNext.js.map +1 -1
  15. package/cjs/filter-pill/useFilterPillNext.js.map +1 -1
  16. package/cjs/filter-provider/FilterContext.js +67 -0
  17. package/cjs/filter-provider/FilterContext.js.map +1 -0
  18. package/cjs/filter-provider/FilterProvider.js +46 -76
  19. package/cjs/filter-provider/FilterProvider.js.map +1 -1
  20. package/cjs/filter-utils.js +9 -1
  21. package/cjs/filter-utils.js.map +1 -1
  22. package/cjs/index.js +11 -7
  23. package/cjs/index.js.map +1 -1
  24. package/cjs/inline-filter/InlineFilter.js +1 -1
  25. package/cjs/inline-filter/InlineFilter.js.map +1 -1
  26. package/cjs/saved-filters/FilterNamePrompt.css.js +6 -0
  27. package/cjs/saved-filters/FilterNamePrompt.css.js.map +1 -0
  28. package/cjs/saved-filters/FilterNamePrompt.js +50 -48
  29. package/cjs/saved-filters/FilterNamePrompt.js.map +1 -1
  30. package/cjs/saved-filters/SavedFilterPanel.js +4 -2
  31. package/cjs/saved-filters/SavedFilterPanel.js.map +1 -1
  32. package/cjs/saved-filters/useFilterNamePrompt.js +98 -0
  33. package/cjs/saved-filters/useFilterNamePrompt.js.map +1 -0
  34. package/cjs/saved-filters/useSavedFilterPanel.js +2 -2
  35. package/cjs/saved-filters/useSavedFilterPanel.js.map +1 -1
  36. package/cjs/tabbed-filter-container/TabbedFilterContainer.js +2 -1
  37. package/cjs/tabbed-filter-container/TabbedFilterContainer.js.map +1 -1
  38. package/cjs/toggle-filter/ToggleFilter.js +69 -0
  39. package/cjs/toggle-filter/ToggleFilter.js.map +1 -0
  40. package/esm/column-filter/ColumnFilter.js +4 -1
  41. package/esm/column-filter/ColumnFilter.js.map +1 -1
  42. package/esm/column-filter/useColumnFilter.js.map +1 -1
  43. package/esm/filter-container/FilterContainer.css.js +4 -0
  44. package/esm/filter-container/FilterContainer.css.js.map +1 -0
  45. package/esm/filter-container/FilterContainer.js +13 -3
  46. package/esm/filter-container/FilterContainer.js.map +1 -1
  47. package/esm/filter-container/useFilterContainer.js.map +1 -1
  48. package/esm/filter-display/FilterDisplay.js.map +1 -1
  49. package/esm/filter-panel/FilterPanel.css.js +1 -1
  50. package/esm/filter-panel/useFilterPanel.js +3 -5
  51. package/esm/filter-panel/useFilterPanel.js.map +1 -1
  52. package/esm/filter-pill/FilterPillNext.js +2 -1
  53. package/esm/filter-pill/FilterPillNext.js.map +1 -1
  54. package/esm/filter-pill/useFilterPillNext.js.map +1 -1
  55. package/esm/filter-provider/FilterContext.js +57 -0
  56. package/esm/filter-provider/FilterContext.js.map +1 -0
  57. package/esm/filter-provider/FilterProvider.js +42 -65
  58. package/esm/filter-provider/FilterProvider.js.map +1 -1
  59. package/esm/filter-utils.js +10 -3
  60. package/esm/filter-utils.js.map +1 -1
  61. package/esm/index.js +6 -4
  62. package/esm/index.js.map +1 -1
  63. package/esm/inline-filter/InlineFilter.js +2 -2
  64. package/esm/inline-filter/InlineFilter.js.map +1 -1
  65. package/esm/saved-filters/FilterNamePrompt.css.js +4 -0
  66. package/esm/saved-filters/FilterNamePrompt.css.js.map +1 -0
  67. package/esm/saved-filters/FilterNamePrompt.js +53 -51
  68. package/esm/saved-filters/FilterNamePrompt.js.map +1 -1
  69. package/esm/saved-filters/SavedFilterPanel.js +4 -2
  70. package/esm/saved-filters/SavedFilterPanel.js.map +1 -1
  71. package/esm/saved-filters/useFilterNamePrompt.js +95 -0
  72. package/esm/saved-filters/useFilterNamePrompt.js.map +1 -0
  73. package/esm/saved-filters/useSavedFilterPanel.js +1 -1
  74. package/esm/saved-filters/useSavedFilterPanel.js.map +1 -1
  75. package/esm/tabbed-filter-container/TabbedFilterContainer.js +2 -1
  76. package/esm/tabbed-filter-container/TabbedFilterContainer.js.map +1 -1
  77. package/esm/toggle-filter/ToggleFilter.js +67 -0
  78. package/esm/toggle-filter/ToggleFilter.js.map +1 -0
  79. package/package.json +11 -11
  80. package/types/vuu-context-menu/src/ContextMenu.d.ts +10 -0
  81. package/types/vuu-context-menu/src/ContextMenuProvider.d.ts +16 -0
  82. package/types/vuu-context-menu/src/index.d.ts +3 -0
  83. package/types/vuu-context-menu/src/menu-utils.d.ts +17 -0
  84. package/types/vuu-context-menu/src/useContextMenu.d.ts +10 -0
  85. package/types/{column-filter → vuu-filters/src/column-filter}/ColumnFilter.d.ts +1 -1
  86. package/types/{column-filter → vuu-filters/src/column-filter}/useColumnFilter.d.ts +1 -2
  87. package/types/{filter-clause → vuu-filters/src/filter-clause}/useFilterClause.d.ts +1 -1
  88. package/types/{filter-clause → vuu-filters/src/filter-clause}/value-editors/FilterClauseValueEditor.d.ts +1 -1
  89. package/types/{filter-container → vuu-filters/src/filter-container}/FilterContainer.d.ts +2 -2
  90. package/types/{filter-container → vuu-filters/src/filter-container}/useFilterContainer.d.ts +1 -3
  91. package/types/{filter-display → vuu-filters/src/filter-display}/FilterDisplay.d.ts +2 -2
  92. package/types/vuu-filters/src/filter-pill/FilterPillNext.d.ts +15 -0
  93. package/types/{filter-pill → vuu-filters/src/filter-pill}/useFilterPillNext.d.ts +2 -2
  94. package/types/{filter-provider/FilterProvider.d.ts → vuu-filters/src/filter-provider/FilterContext.d.ts} +7 -12
  95. package/types/vuu-filters/src/filter-provider/FilterProvider.d.ts +9 -0
  96. package/types/{filter-utils.d.ts → vuu-filters/src/filter-utils.d.ts} +12 -2
  97. package/types/{index.d.ts → vuu-filters/src/index.d.ts} +7 -4
  98. package/types/{inline-filter → vuu-filters/src/inline-filter}/useInlineFilter.d.ts +1 -1
  99. package/types/vuu-filters/src/saved-filters/FilterNamePrompt.d.ts +6 -0
  100. package/types/vuu-filters/src/saved-filters/SavedFilterPanel.d.ts +13 -0
  101. package/types/vuu-filters/src/saved-filters/useFilterNamePrompt.d.ts +27 -0
  102. package/types/{saved-filters → vuu-filters/src/saved-filters}/useSavedFilterPanel.d.ts +1 -1
  103. package/types/vuu-filters/src/tabbed-filter-container/TabbedFilterContainer.d.ts +7 -0
  104. package/types/vuu-filters/src/toggle-filter/ToggleFilter.d.ts +10 -0
  105. package/types/vuu-popups/src/index.d.ts +5 -0
  106. package/types/vuu-popups/src/notifications/NotificationsCenter.d.ts +5 -0
  107. package/types/vuu-popups/src/notifications/NotificationsContext.d.ts +36 -0
  108. package/types/vuu-popups/src/notifications/NotificationsProvider.d.ts +9 -0
  109. package/types/vuu-popups/src/notifications/ToastNotification.d.ts +7 -0
  110. package/types/vuu-popups/src/notifications/WorkspaceNotification.d.ts +5 -0
  111. package/types/vuu-popups/src/notifications/index.d.ts +3 -0
  112. package/types/vuu-popups/src/popup/Popup.d.ts +12 -0
  113. package/types/vuu-popups/src/popup/getPositionRelativeToAnchor.d.ts +19 -0
  114. package/types/vuu-popups/src/popup/index.d.ts +2 -0
  115. package/types/vuu-popups/src/popup/useAnchoredPosition.d.ts +7 -0
  116. package/types/vuu-popups/src/popup-menu/PopupMenu.d.ts +45 -0
  117. package/types/vuu-popups/src/popup-menu/index.d.ts +1 -0
  118. package/types/vuu-popups/src/popup-menu/usePopupMenu.d.ts +19 -0
  119. package/types/vuu-popups/src/portal/Portal.d.ts +42 -0
  120. package/types/vuu-popups/src/portal/index.d.ts +1 -0
  121. package/types/vuu-popups/src/tooltip/Tooltip.d.ts +15 -0
  122. package/types/vuu-popups/src/tooltip/index.d.ts +2 -0
  123. package/types/vuu-popups/src/tooltip/useTooltip.d.ts +19 -0
  124. package/types/vuu-popups/src/tooltip/useTooltipAnchoredPosition.d.ts +7 -0
  125. package/types/vuu-ui-controls/src/calendar/Calendar.d.ts +13 -0
  126. package/types/vuu-ui-controls/src/calendar/index.d.ts +4 -0
  127. package/types/vuu-ui-controls/src/calendar/internal/CalendarCarousel.d.ts +3 -0
  128. package/types/vuu-ui-controls/src/calendar/internal/CalendarContext.d.ts +8 -0
  129. package/types/vuu-ui-controls/src/calendar/internal/CalendarDay.d.ts +14 -0
  130. package/types/vuu-ui-controls/src/calendar/internal/CalendarMonth.d.ts +10 -0
  131. package/types/vuu-ui-controls/src/calendar/internal/CalendarNavigation.d.ts +16 -0
  132. package/types/vuu-ui-controls/src/calendar/internal/CalendarWeekHeader.d.ts +3 -0
  133. package/types/vuu-ui-controls/src/calendar/internal/useFocusManagement.d.ts +9 -0
  134. package/types/vuu-ui-controls/src/calendar/internal/utils.d.ts +15 -0
  135. package/types/vuu-ui-controls/src/calendar/useCalendar.d.ts +54 -0
  136. package/types/vuu-ui-controls/src/calendar/useCalendarDay.d.ts +22 -0
  137. package/types/vuu-ui-controls/src/calendar/useSelection.d.ts +78 -0
  138. package/types/vuu-ui-controls/src/column-picker/ColumnPicker.d.ts +7 -0
  139. package/types/vuu-ui-controls/src/column-picker/ColumnSearch.d.ts +12 -0
  140. package/types/vuu-ui-controls/src/column-picker/index.d.ts +2 -0
  141. package/types/vuu-ui-controls/src/common-hooks/index.d.ts +3 -0
  142. package/types/vuu-ui-controls/src/common-hooks/selectionTypes.d.ts +70 -0
  143. package/types/vuu-ui-controls/src/common-hooks/use-resize-observer.d.ts +16 -0
  144. package/types/vuu-ui-controls/src/common-hooks/useControlled.d.ts +24 -0
  145. package/types/vuu-ui-controls/src/context-panel-provider/ContextPanelProvider.d.ts +17 -0
  146. package/types/vuu-ui-controls/src/cycle-state-button/CycleStateButton.d.ts +11 -0
  147. package/types/vuu-ui-controls/src/cycle-state-button/index.d.ts +1 -0
  148. package/types/vuu-ui-controls/src/date-input/DateInput.d.ts +60 -0
  149. package/types/vuu-ui-controls/src/date-input/index.d.ts +1 -0
  150. package/types/vuu-ui-controls/src/date-picker/DatePicker.d.ts +66 -0
  151. package/types/vuu-ui-controls/src/date-picker/DatePickerContext.d.ts +19 -0
  152. package/types/vuu-ui-controls/src/date-picker/DatePickerPanel.d.ts +10 -0
  153. package/types/vuu-ui-controls/src/date-picker/index.d.ts +1 -0
  154. package/types/vuu-ui-controls/src/drag-drop/DragDropProvider.d.ts +38 -0
  155. package/types/vuu-ui-controls/src/drag-drop/DragDropState.d.ts +15 -0
  156. package/types/vuu-ui-controls/src/drag-drop/Draggable.d.ts +13 -0
  157. package/types/vuu-ui-controls/src/drag-drop/dragDropTypes.d.ts +100 -0
  158. package/types/vuu-ui-controls/src/drag-drop/drop-target-utils.d.ts +82 -0
  159. package/types/vuu-ui-controls/src/drag-drop/index.d.ts +6 -0
  160. package/types/vuu-ui-controls/src/drag-drop/useAutoScroll.d.ts +11 -0
  161. package/types/vuu-ui-controls/src/drag-drop/useDragDisplacers.d.ts +17 -0
  162. package/types/vuu-ui-controls/src/drag-drop/useDragDrop.d.ts +2 -0
  163. package/types/vuu-ui-controls/src/drag-drop/useDragDropCopy.d.ts +6 -0
  164. package/types/vuu-ui-controls/src/drag-drop/useDragDropIndicator.d.ts +2 -0
  165. package/types/vuu-ui-controls/src/drag-drop/useDragDropNaturalMovement.d.ts +2 -0
  166. package/types/vuu-ui-controls/src/drag-drop/useDropIndicator.d.ts +8 -0
  167. package/types/vuu-ui-controls/src/drag-drop/useGlobalDragDrop.d.ts +11 -0
  168. package/types/vuu-ui-controls/src/editable/index.d.ts +1 -0
  169. package/types/vuu-ui-controls/src/editable/useEditableText.d.ts +19 -0
  170. package/types/vuu-ui-controls/src/editable-label/EditableLabel.d.ts +19 -0
  171. package/types/vuu-ui-controls/src/editable-label/index.d.ts +1 -0
  172. package/types/vuu-ui-controls/src/expando-input/ExpandoInput.d.ts +6 -0
  173. package/types/vuu-ui-controls/src/expando-input/index.d.ts +1 -0
  174. package/types/vuu-ui-controls/src/icon-button/Icon.d.ts +6 -0
  175. package/types/vuu-ui-controls/src/icon-button/IconButton.d.ts +6 -0
  176. package/types/vuu-ui-controls/src/icon-button/ToggleIconButton.d.ts +5 -0
  177. package/types/vuu-ui-controls/src/icon-button/index.d.ts +3 -0
  178. package/types/vuu-ui-controls/src/index.d.ts +30 -0
  179. package/types/vuu-ui-controls/src/instrument-picker/TablePicker.d.ts +10 -0
  180. package/types/vuu-ui-controls/src/instrument-picker/index.d.ts +1 -0
  181. package/types/vuu-ui-controls/src/instrument-picker/useTablePicker.d.ts +47 -0
  182. package/types/vuu-ui-controls/src/measured-container/MeasuredContainer.d.ts +14 -0
  183. package/types/vuu-ui-controls/src/measured-container/index.d.ts +2 -0
  184. package/types/vuu-ui-controls/src/measured-container/useMeasuredContainer.d.ts +23 -0
  185. package/types/vuu-ui-controls/src/measured-container/useResizeObserver.d.ts +15 -0
  186. package/types/vuu-ui-controls/src/modal-provider/ModalProvider.d.ts +13 -0
  187. package/types/vuu-ui-controls/src/overflow-container/OverflowContainer.d.ts +15 -0
  188. package/types/vuu-ui-controls/src/overflow-container/index.d.ts +2 -0
  189. package/types/vuu-ui-controls/src/overflow-container/overflow-utils.d.ts +48 -0
  190. package/types/vuu-ui-controls/src/overflow-container/useOverflowContainer.d.ts +19 -0
  191. package/types/vuu-ui-controls/src/price-ticker/PriceTicker.d.ts +7 -0
  192. package/types/vuu-ui-controls/src/price-ticker/index.d.ts +1 -0
  193. package/types/vuu-ui-controls/src/prompt/Prompt.d.ts +48 -0
  194. package/types/vuu-ui-controls/src/sortable-list/SortableList.d.ts +8 -0
  195. package/types/vuu-ui-controls/src/split-button/SplitButton.d.ts +11 -0
  196. package/types/vuu-ui-controls/src/split-button/SplitStateButton.d.ts +5 -0
  197. package/types/vuu-ui-controls/src/split-button/index.d.ts +2 -0
  198. package/types/vuu-ui-controls/src/split-button/useSplitButton.d.ts +311 -0
  199. package/types/vuu-ui-controls/src/table-search/SearchCell.d.ts +2 -0
  200. package/types/vuu-ui-controls/src/table-search/TableSearch.d.ts +9 -0
  201. package/types/vuu-ui-controls/src/table-search/index.d.ts +1 -0
  202. package/types/vuu-ui-controls/src/table-search/useTableSearch.d.ts +15 -0
  203. package/types/vuu-ui-controls/src/tabs-next/TabBar.d.ts +12 -0
  204. package/types/vuu-ui-controls/src/tabs-next/TabListNext.d.ts +12 -0
  205. package/types/vuu-ui-controls/src/tabs-next/TabNext.d.ts +12 -0
  206. package/types/vuu-ui-controls/src/tabs-next/TabNextAction.d.ts +5 -0
  207. package/types/vuu-ui-controls/src/tabs-next/TabNextContext.d.ts +12 -0
  208. package/types/vuu-ui-controls/src/tabs-next/TabNextPanel.d.ts +8 -0
  209. package/types/vuu-ui-controls/src/tabs-next/TabNextTrigger.d.ts +5 -0
  210. package/types/vuu-ui-controls/src/tabs-next/TabOverflowList.d.ts +11 -0
  211. package/types/vuu-ui-controls/src/tabs-next/TabsNext.d.ts +17 -0
  212. package/types/vuu-ui-controls/src/tabs-next/TabsNextContext.d.ts +21 -0
  213. package/types/vuu-ui-controls/src/tabs-next/hooks/useCollection.d.ts +18 -0
  214. package/types/vuu-ui-controls/src/tabs-next/hooks/useFocusOutside.d.ts +2 -0
  215. package/types/vuu-ui-controls/src/tabs-next/hooks/useOverflow.d.ts +11 -0
  216. package/types/vuu-ui-controls/src/tabs-next/index.d.ts +7 -0
  217. package/types/vuu-ui-controls/src/tabstrip/Tab.d.ts +27 -0
  218. package/types/vuu-ui-controls/src/tabstrip/TabMenu.d.ts +23 -0
  219. package/types/vuu-ui-controls/src/tabstrip/TabMenuOptions.d.ts +10 -0
  220. package/types/vuu-ui-controls/src/tabstrip/TabsTypes.d.ts +127 -0
  221. package/types/vuu-ui-controls/src/tabstrip/Tabstrip.d.ts +2 -0
  222. package/types/vuu-ui-controls/src/tabstrip/index.d.ts +5 -0
  223. package/types/vuu-ui-controls/src/tabstrip/tabstrip-dom-utils.d.ts +2 -0
  224. package/types/vuu-ui-controls/src/tabstrip/useAnimatedSelectionThumb.d.ts +7 -0
  225. package/types/vuu-ui-controls/src/tabstrip/useKeyboardNavigation.d.ts +29 -0
  226. package/types/vuu-ui-controls/src/tabstrip/useSelection.d.ts +13 -0
  227. package/types/vuu-ui-controls/src/tabstrip/useTabstrip.d.ts +55 -0
  228. package/types/vuu-ui-controls/src/time-input/MaskedInput.d.ts +49 -0
  229. package/types/vuu-ui-controls/src/time-input/TimeInput.d.ts +5 -0
  230. package/types/vuu-ui-controls/src/time-input/useTimeInput.d.ts +21 -0
  231. package/types/vuu-ui-controls/src/toolbar/Toolbar.d.ts +19 -0
  232. package/types/vuu-ui-controls/src/toolbar/index.d.ts +1 -0
  233. package/types/vuu-ui-controls/src/toolbar/toolbar-dom-utils.d.ts +3 -0
  234. package/types/vuu-ui-controls/src/toolbar/useKeyboardNavigation.d.ts +32 -0
  235. package/types/vuu-ui-controls/src/toolbar/useSelection.d.ts +22 -0
  236. package/types/vuu-ui-controls/src/toolbar/useToolbar.d.ts +28 -0
  237. package/types/vuu-ui-controls/src/utils/deprecated-types.d.ts +2 -0
  238. package/types/vuu-ui-controls/src/utils/escapeRegExp.d.ts +1 -0
  239. package/types/vuu-ui-controls/src/utils/forwardCallbackProps.d.ts +3 -0
  240. package/types/vuu-ui-controls/src/utils/index.d.ts +5 -0
  241. package/types/vuu-ui-controls/src/utils/isOverflowElement.d.ts +1 -0
  242. package/types/vuu-ui-controls/src/utils/isPlainObject.d.ts +1 -0
  243. package/types/vuu-ui-controls/src/vuu-date-picker/VuuDatePicker.d.ts +7 -0
  244. package/types/vuu-ui-controls/src/vuu-date-picker/index.d.ts +1 -0
  245. package/types/vuu-ui-controls/src/vuu-input/VuuInput.d.ts +18 -0
  246. package/types/vuu-ui-controls/src/vuu-input/index.d.ts +1 -0
  247. package/types/vuu-ui-controls/src/vuu-time-picker/VuuTimePicker.d.ts +7 -0
  248. package/types/vuu-ui-controls/src/vuu-typeahead-input/VuuTypeaheadInput.d.ts +6 -0
  249. package/types/vuu-ui-controls/src/vuu-typeahead-input/index.d.ts +1 -0
  250. package/types/vuu-ui-controls/src/vuu-typeahead-input/useVuuTypeaheadInput.d.ts +49 -0
  251. package/types/vuu-utils/src/Clock.d.ts +20 -0
  252. package/types/vuu-utils/src/DataWindow.d.ts +39 -0
  253. package/types/vuu-utils/src/ShellContext.d.ts +11 -0
  254. package/types/vuu-utils/src/ThemeProvider.d.ts +32 -0
  255. package/types/vuu-utils/src/array-utils.d.ts +8 -0
  256. package/types/vuu-utils/src/box-utils.d.ts +24 -0
  257. package/types/vuu-utils/src/broadcast-channel.d.ts +16 -0
  258. package/types/vuu-utils/src/column-utils.d.ts +181 -0
  259. package/types/vuu-utils/src/common-types.d.ts +6 -0
  260. package/types/vuu-utils/src/component-registry.d.ts +65 -0
  261. package/types/vuu-utils/src/context-definitions/DataContext.d.ts +18 -0
  262. package/types/vuu-utils/src/context-definitions/DataProvider.d.ts +7 -0
  263. package/types/vuu-utils/src/context-definitions/DataSourceProvider.d.ts +12 -0
  264. package/types/vuu-utils/src/context-definitions/WorkspaceContext.d.ts +17 -0
  265. package/types/vuu-utils/src/cookie-utils.d.ts +1 -0
  266. package/types/vuu-utils/src/css-utils.d.ts +1 -0
  267. package/types/vuu-utils/src/data-utils.d.ts +19 -0
  268. package/types/vuu-utils/src/datasource/BaseDataSource.d.ts +60 -0
  269. package/types/vuu-utils/src/datasource/datasource-action-utils.d.ts +7 -0
  270. package/types/vuu-utils/src/datasource/datasource-filter-utils.d.ts +2 -0
  271. package/types/vuu-utils/src/datasource/datasource-utils.d.ts +49 -0
  272. package/types/vuu-utils/src/date/date-utils.d.ts +36 -0
  273. package/types/vuu-utils/src/date/dateTimePattern.d.ts +8 -0
  274. package/types/vuu-utils/src/date/formatter.d.ts +4 -0
  275. package/types/vuu-utils/src/date/index.d.ts +4 -0
  276. package/types/vuu-utils/src/date/types.d.ts +24 -0
  277. package/types/vuu-utils/src/debug-utils.d.ts +9 -0
  278. package/types/vuu-utils/src/event-emitter.d.ts +21 -0
  279. package/types/vuu-utils/src/feature-utils.d.ts +110 -0
  280. package/types/vuu-utils/src/filters/filter-utils.d.ts +82 -0
  281. package/types/vuu-utils/src/filters/filterAsQuery.d.ts +7 -0
  282. package/types/vuu-utils/src/filters/index.d.ts +2 -0
  283. package/types/vuu-utils/src/form-utils.d.ts +23 -0
  284. package/types/vuu-utils/src/formatting-utils.d.ts +14 -0
  285. package/types/vuu-utils/src/getUniqueId.d.ts +1 -0
  286. package/types/vuu-utils/src/group-utils.d.ts +10 -0
  287. package/types/vuu-utils/src/html-utils.d.ts +21 -0
  288. package/types/vuu-utils/src/index.d.ts +74 -0
  289. package/types/vuu-utils/src/input-utils.d.ts +2 -0
  290. package/types/vuu-utils/src/invariant.d.ts +1 -0
  291. package/types/vuu-utils/src/itemToString.d.ts +2 -0
  292. package/types/vuu-utils/src/json-types.d.ts +52 -0
  293. package/types/vuu-utils/src/json-utils.d.ts +6 -0
  294. package/types/vuu-utils/src/keyboard-utils.d.ts +15 -0
  295. package/types/vuu-utils/src/keyset.d.ts +16 -0
  296. package/types/vuu-utils/src/layout-types.d.ts +22 -0
  297. package/types/vuu-utils/src/list-utils.d.ts +2 -0
  298. package/types/vuu-utils/src/local-storage-utils.d.ts +3 -0
  299. package/types/vuu-utils/src/logging-utils.d.ts +45 -0
  300. package/types/vuu-utils/src/menu-utils.d.ts +6 -0
  301. package/types/vuu-utils/src/module-utils.d.ts +8 -0
  302. package/types/vuu-utils/src/moving-window.d.ts +18 -0
  303. package/types/vuu-utils/src/nanoid/index.d.ts +1 -0
  304. package/types/vuu-utils/src/perf-utils.d.ts +5 -0
  305. package/types/vuu-utils/src/promise-utils.d.ts +8 -0
  306. package/types/vuu-utils/src/protocol-message-utils.d.ts +34 -0
  307. package/types/vuu-utils/src/range-utils.d.ts +31 -0
  308. package/types/vuu-utils/src/react-utils.d.ts +8 -0
  309. package/types/vuu-utils/src/round-decimal.d.ts +1 -0
  310. package/types/vuu-utils/src/row-utils.d.ts +27 -0
  311. package/types/vuu-utils/src/selection-utils.d.ts +4 -0
  312. package/types/vuu-utils/src/shell-layout-types.d.ts +15 -0
  313. package/types/vuu-utils/src/sort-utils.d.ts +11 -0
  314. package/types/vuu-utils/src/table-schema-utils.d.ts +3 -0
  315. package/types/vuu-utils/src/text-utils.d.ts +2 -0
  316. package/types/vuu-utils/src/tree-types.d.ts +9 -0
  317. package/types/vuu-utils/src/tree-utils.d.ts +9 -0
  318. package/types/vuu-utils/src/ts-utils.d.ts +20 -0
  319. package/types/vuu-utils/src/typeahead-utils.d.ts +1 -0
  320. package/types/vuu-utils/src/url-utils.d.ts +2 -0
  321. package/types/vuu-utils/src/useId.d.ts +1 -0
  322. package/types/vuu-utils/src/useLayoutEffectSkipFirst.d.ts +2 -0
  323. package/types/vuu-utils/src/useStateRef.d.ts +2 -0
  324. package/types/vuu-utils/src/user-types.d.ts +4 -0
  325. package/types/filter-pill/FilterPillNext.d.ts +0 -9
  326. package/types/saved-filters/FilterNamePrompt.d.ts +0 -7
  327. package/types/saved-filters/SavedFilterPanel.d.ts +0 -5
  328. package/types/tabbed-filter-container/TabbedFilterContainer.d.ts +0 -6
  329. /package/types/{FilterModel.d.ts → vuu-filters/src/FilterModel.d.ts} +0 -0
  330. /package/types/{column-filter → vuu-filters/src/column-filter}/utils.d.ts +0 -0
  331. /package/types/{custom-filters → vuu-filters/src/custom-filters}/CustomFilters.d.ts +0 -0
  332. /package/types/{custom-filters → vuu-filters/src/custom-filters}/filterBarFocusManagement.d.ts +0 -0
  333. /package/types/{custom-filters → vuu-filters/src/custom-filters}/index.d.ts +0 -0
  334. /package/types/{custom-filters → vuu-filters/src/custom-filters}/useCustomFilters.d.ts +0 -0
  335. /package/types/{custom-filters → vuu-filters/src/custom-filters}/useFilterState.d.ts +0 -0
  336. /package/types/{filter-bar → vuu-filters/src/filter-bar}/FilterBar.d.ts +0 -0
  337. /package/types/{filter-bar → vuu-filters/src/filter-bar}/FilterBarMenu.d.ts +0 -0
  338. /package/types/{filter-bar → vuu-filters/src/filter-bar}/index.d.ts +0 -0
  339. /package/types/{filter-bar → vuu-filters/src/filter-bar}/useFilterBar.d.ts +0 -0
  340. /package/types/{filter-clause → vuu-filters/src/filter-clause}/ColumnPicker.d.ts +0 -0
  341. /package/types/{filter-clause → vuu-filters/src/filter-clause}/ExpandoCombobox.d.ts +0 -0
  342. /package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterClause.d.ts +0 -0
  343. /package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterMenu.d.ts +0 -0
  344. /package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterMenuOptions.d.ts +0 -0
  345. /package/types/{filter-clause → vuu-filters/src/filter-clause}/OperatorPicker.d.ts +0 -0
  346. /package/types/{filter-clause → vuu-filters/src/filter-clause}/filterClauseFocusManagement.d.ts +0 -0
  347. /package/types/{filter-clause → vuu-filters/src/filter-clause}/filterClauseTypes.d.ts +0 -0
  348. /package/types/{filter-clause → vuu-filters/src/filter-clause}/index.d.ts +0 -0
  349. /package/types/{filter-clause → vuu-filters/src/filter-clause}/operator-utils.d.ts +0 -0
  350. /package/types/{filter-clause → vuu-filters/src/filter-clause}/useExpandoCombobox.d.ts +0 -0
  351. /package/types/{filter-clause → vuu-filters/src/filter-clause}/value-editors/FilterClauseValueEditorDate.d.ts +0 -0
  352. /package/types/{filter-clause → vuu-filters/src/filter-clause}/value-editors/FilterClauseValueEditorNumber.d.ts +0 -0
  353. /package/types/{filter-clause → vuu-filters/src/filter-clause}/value-editors/FilterClauseValueEditorText.d.ts +0 -0
  354. /package/types/{filter-clause → vuu-filters/src/filter-clause}/value-editors/FilterClauseValueEditorTime.d.ts +0 -0
  355. /package/types/{filter-editor → vuu-filters/src/filter-editor}/FilterClauseCombinator.d.ts +0 -0
  356. /package/types/{filter-editor → vuu-filters/src/filter-editor}/FilterEditor.d.ts +0 -0
  357. /package/types/{filter-editor → vuu-filters/src/filter-editor}/index.d.ts +0 -0
  358. /package/types/{filter-editor → vuu-filters/src/filter-editor}/useFilterEditor.d.ts +0 -0
  359. /package/types/{filter-panel → vuu-filters/src/filter-panel}/FilterPanel.d.ts +0 -0
  360. /package/types/{filter-panel → vuu-filters/src/filter-panel}/useFilterPanel.d.ts +0 -0
  361. /package/types/{filter-pill → vuu-filters/src/filter-pill}/FilterMenu.d.ts +0 -0
  362. /package/types/{filter-pill → vuu-filters/src/filter-pill}/FilterPill.d.ts +0 -0
  363. /package/types/{filter-pill → vuu-filters/src/filter-pill}/filterAsReactNode.d.ts +0 -0
  364. /package/types/{filter-pill → vuu-filters/src/filter-pill}/getFilterLabel.d.ts +0 -0
  365. /package/types/{filter-pill → vuu-filters/src/filter-pill}/getFilterTooltipText.d.ts +0 -0
  366. /package/types/{filter-pill → vuu-filters/src/filter-pill}/index.d.ts +0 -0
  367. /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/FilterPillMenu.d.ts +0 -0
  368. /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/FilterPillMenuOptions.d.ts +0 -0
  369. /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/index.d.ts +0 -0
  370. /package/types/{filter-provider → vuu-filters/src/filter-provider}/filter-descriptor-utils.d.ts +0 -0
  371. /package/types/{inline-filter → vuu-filters/src/inline-filter}/InlineFilter.d.ts +0 -0
  372. /package/types/{inline-filter → vuu-filters/src/inline-filter}/index.d.ts +0 -0
  373. /package/types/{quick-filters → vuu-filters/src/quick-filters}/QuickFilters.d.ts +0 -0
  374. /package/types/{quick-filters → vuu-filters/src/quick-filters}/index.d.ts +0 -0
  375. /package/types/{quick-filters → vuu-filters/src/quick-filters}/useQuickFilters.d.ts +0 -0
  376. /package/types/{saved-filters → vuu-filters/src/saved-filters}/DeleteFilterPrompt.d.ts +0 -0
@@ -20,6 +20,7 @@ const ColumnFilter = react.forwardRef(function ColumnFilter2({
20
20
  operator = "=",
21
21
  table,
22
22
  value: valueProp,
23
+ values,
23
24
  variant,
24
25
  ...buttonGroupProps
25
26
  }, forwardRef2) {
@@ -46,7 +47,9 @@ const ColumnFilter = react.forwardRef(function ColumnFilter2({
46
47
  commitWhenCleared: true,
47
48
  dataDescriptor: column,
48
49
  onCommit,
49
- table
50
+ table,
51
+ values,
52
+ variant
50
53
  }),
51
54
  operator === "between" ? vuuDataReact.getDataItemEditControl({
52
55
  InputProps: InputPropsRange,
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n SegmentedButtonGroup,\n type SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport {\n DataItemEditControlProps,\n getDataItemEditControl,\n} from \"@vuu-ui/vuu-data-react\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { ColumnFilterHookProps, useColumnFilter } from \"./useColumnFilter\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends ColumnFilterHookProps,\n Omit<SegmentedButtonGroupProps, \"defaultValue\">,\n Pick<DataItemEditControlProps, \"TypeaheadProps\" | \"table\" | \"variant\"> {}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n InputProps: InputPropsProp,\n TypeaheadProps,\n className,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit: onCommitProp,\n operator = \"=\",\n table,\n value: valueProp,\n variant,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const { InputProps, InputPropsRange, onCommit, onCommitRange } =\n useColumnFilter({\n InputProps: InputPropsProp,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit: onCommitProp,\n operator,\n value: valueProp,\n });\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {getDataItemEditControl({\n InputProps,\n TypeaheadProps,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n })}\n {operator === \"between\"\n ? getDataItemEditControl({\n InputProps: InputPropsRange,\n className: `${classBase}-rangeHigh`,\n commitWhenCleared: true,\n variant,\n dataDescriptor: column,\n onCommit: onCommitRange,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n});\n"],"names":["forwardRef","ColumnFilter","useColumnFilter","jsxs","SegmentedButtonGroup","getDataItemEditControl"],"mappings":";;;;;;;;;AAYA,MAAM,SAAY,GAAA,iBAAA;AAOL,MAAA,YAAA,GAAeA,gBAAW,CAAA,SAASC,aAC9C,CAAA;AAAA,EACE,UAAY,EAAA,cAAA;AAAA,EACZ,cAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,QAAW,GAAA,GAAA;AAAA,EACX,KAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EACAD,WACA,EAAA;AACA,EAAA,MAAM,EAAE,UAAY,EAAA,eAAA,EAAiB,QAAU,EAAA,aAAA,KAC7CE,+BAAgB,CAAA;AAAA,IACd,UAAY,EAAA,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA,KAAO,EAAA;AAAA,GACR,CAAA;AAEH,EACE,uBAAAC,eAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKJ,EAAAA,WAAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAuBK,mCAAA,CAAA;AAAA,UACtB,UAAA;AAAA,UACA,cAAA;AAAA,UACA,iBAAmB,EAAA,IAAA;AAAA,UACnB,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,QACA,QAAA,KAAa,YACVA,mCAAuB,CAAA;AAAA,UACrB,UAAY,EAAA,eAAA;AAAA,UACZ,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,UACvB,iBAAmB,EAAA,IAAA;AAAA,UACnB,OAAA;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAU,EAAA,aAAA;AAAA,UACV;AAAA,SACD,CACD,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n SegmentedButtonGroup,\n type SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport {\n DataItemEditControlProps,\n getDataItemEditControl,\n} from \"@vuu-ui/vuu-data-react\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { ColumnFilterHookProps, useColumnFilter } from \"./useColumnFilter\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends ColumnFilterHookProps,\n Omit<SegmentedButtonGroupProps, \"defaultValue\">,\n Pick<\n DataItemEditControlProps,\n \"TypeaheadProps\" | \"table\" | \"values\" | \"variant\"\n > {}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n InputProps: InputPropsProp,\n TypeaheadProps,\n className,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit: onCommitProp,\n operator = \"=\",\n table,\n value: valueProp,\n values,\n variant,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const { InputProps, InputPropsRange, onCommit, onCommitRange } =\n useColumnFilter({\n InputProps: InputPropsProp,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit: onCommitProp,\n operator,\n value: valueProp,\n });\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {getDataItemEditControl({\n InputProps,\n TypeaheadProps,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n values,\n variant,\n })}\n {operator === \"between\"\n ? getDataItemEditControl({\n InputProps: InputPropsRange,\n className: `${classBase}-rangeHigh`,\n commitWhenCleared: true,\n variant,\n dataDescriptor: column,\n onCommit: onCommitRange,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n});\n"],"names":["forwardRef","ColumnFilter","useColumnFilter","jsxs","SegmentedButtonGroup","getDataItemEditControl"],"mappings":";;;;;;;;;AAYA,MAAM,SAAY,GAAA,iBAAA;AAUL,MAAA,YAAA,GAAeA,gBAAW,CAAA,SAASC,aAC9C,CAAA;AAAA,EACE,UAAY,EAAA,cAAA;AAAA,EACZ,cAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,QAAW,GAAA,GAAA;AAAA,EACX,KAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,MAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EACAD,WACA,EAAA;AACA,EAAA,MAAM,EAAE,UAAY,EAAA,eAAA,EAAiB,QAAU,EAAA,aAAA,KAC7CE,+BAAgB,CAAA;AAAA,IACd,UAAY,EAAA,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA,KAAO,EAAA;AAAA,GACR,CAAA;AAEH,EACE,uBAAAC,eAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKJ,EAAAA,WAAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAuBK,mCAAA,CAAA;AAAA,UACtB,UAAA;AAAA,UACA,cAAA;AAAA,UACA,iBAAmB,EAAA,IAAA;AAAA,UACnB,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,QACA,QAAA,KAAa,YACVA,mCAAuB,CAAA;AAAA,UACrB,UAAY,EAAA,eAAA;AAAA,UACZ,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,UACvB,iBAAmB,EAAA,IAAA;AAAA,UACnB,OAAA;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAU,EAAA,aAAA;AAAA,UACV;AAAA,SACD,CACD,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n FilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { InputProps, useControlled } from \"@salt-ds/core\";\nimport { ChangeEventHandler, useCallback, useMemo } from \"react\";\nimport { CommitHandler } from \"@vuu-ui/vuu-utils\";\nimport { DataItemEditControlProps } from \"@vuu-ui/vuu-data-react\";\n\nexport type ColumnFilterCommitHandler = (\n column: ColumnDescriptor,\n op: FilterClauseOp | \"between\",\n value: ColumnFilterValue,\n) => void;\n\nconst injectInputProps = (\n InputProps: InputProps | undefined,\n inputProps: InputProps[\"inputProps\"],\n): InputProps => {\n if (InputProps === undefined) {\n return {\n inputProps,\n };\n } else {\n return {\n ...InputProps,\n inputProps: {\n ...InputProps.inputProps,\n ...inputProps,\n },\n };\n }\n};\n\nexport interface ColumnFilterHookProps\n extends Pick<DataItemEditControlProps, \"InputProps\"> {\n column: ColumnDescriptor;\n /**\n * Filter defaultValue. Pair of values expected when operator is\n * 'between'. If provided, component is uncontrolled\n */\n\n defaultValue?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n /**\n * Filter change events on second control in range filter\n */\n onColumnRangeFilterChange?: ColumnFilterChangeHandler;\n /**\n * Called when user 'commits' filter value, either by pressing enter,\n * tabbing away from control or making selection from list\n */\n onCommit: ColumnFilterCommitHandler;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'. If provided, component is controlled.\n */\n value?: ColumnFilterValue;\n}\n\nexport const useColumnFilter = ({\n InputProps: InputPropsProp,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit,\n operator = \"=\",\n value: valueProp,\n}: ColumnFilterHookProps) => {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"ColumnFilterNext\",\n state: \"value\",\n });\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n setValue([`${newValue}`, value[1]]);\n onCommit?.(column, operator, [`${newValue}`, value[1]]);\n } else {\n setValue(newValue as ColumnFilterValue);\n onCommit?.(column, operator, `${newValue}`);\n }\n },\n [value, setValue, onCommit, column, operator],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n const [firstValue] = value as [string, string];\n setValue([value[0], `${newValue}`]);\n onCommit?.(column, operator, [firstValue, `${newValue}`]);\n } else if (value !== \"\") {\n // If we have already committed the first value, filter has been\n // saved as a single value '='.\n const currentValue = `${value}`;\n setValue([currentValue, `${newValue}`]);\n onCommit?.(column, operator, [currentValue, `${newValue}`]);\n } else {\n throw Error(\n `[useColumnFilterNext] value has been initialised incorrectly for range filter`,\n );\n }\n },\n [value, setValue, onCommit, column, operator],\n );\n\n const onChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [value, v[1]] : value));\n onColumnFilterChange?.(e.target.value, column, operator);\n },\n [column, onColumnFilterChange, operator, setValue],\n );\n\n const onRangeInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [v[0], value] : value));\n\n onColumnRangeFilterChange?.(value, column, operator);\n },\n [setValue, onColumnRangeFilterChange, column, operator],\n );\n\n const InputProps = useMemo(\n () =>\n injectInputProps(InputPropsProp, {\n onChange,\n value: Array.isArray(value) ? value[0] : value,\n }),\n [InputPropsProp, onChange, value],\n );\n\n const InputPropsRange = useMemo(\n () =>\n injectInputProps(\n InputPropsProp,\n Array.isArray(value)\n ? {\n onChange: onRangeInputChange,\n value: value[1],\n }\n : undefined,\n ),\n [InputPropsProp, onRangeInputChange, value],\n );\n\n return {\n InputProps,\n InputPropsRange,\n onCommit: handleCommit,\n onCommitRange: handleRangeCommit,\n };\n};\n"],"names":["InputProps","useControlled","useCallback","value","useMemo"],"mappings":"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"}
1
+ {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { InputProps, useControlled } from \"@salt-ds/core\";\nimport { ChangeEventHandler, useCallback, useMemo } from \"react\";\nimport { CommitHandler } from \"@vuu-ui/vuu-utils\";\nimport { DataItemEditControlProps } from \"@vuu-ui/vuu-data-react\";\n\nconst injectInputProps = (\n InputProps: InputProps | undefined,\n inputProps: InputProps[\"inputProps\"],\n): InputProps => {\n if (InputProps === undefined) {\n return {\n inputProps,\n };\n } else {\n return {\n ...InputProps,\n inputProps: {\n ...InputProps.inputProps,\n ...inputProps,\n },\n };\n }\n};\n\nexport interface ColumnFilterHookProps\n extends Pick<DataItemEditControlProps, \"InputProps\"> {\n column: ColumnDescriptor;\n /**\n * Filter defaultValue. Pair of values expected when operator is\n * 'between'. If provided, component is uncontrolled\n */\n\n defaultValue?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n /**\n * Filter change events on second control in range filter\n */\n onColumnRangeFilterChange?: ColumnFilterChangeHandler;\n /**\n * Called when user 'commits' filter value, either by pressing enter,\n * tabbing away from control or making selection from list\n */\n onCommit: ColumnFilterCommitHandler;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'. If provided, component is controlled.\n */\n value?: ColumnFilterValue;\n}\n\nexport const useColumnFilter = ({\n InputProps: InputPropsProp,\n column,\n defaultValue,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit,\n operator = \"=\",\n value: valueProp,\n}: ColumnFilterHookProps) => {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"ColumnFilterNext\",\n state: \"value\",\n });\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n setValue([`${newValue}`, value[1]]);\n onCommit?.(column, operator, [`${newValue}`, value[1]]);\n } else {\n setValue(newValue as ColumnFilterValue);\n onCommit?.(column, operator, `${newValue}`);\n }\n },\n [value, setValue, onCommit, column, operator],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n const [firstValue] = value as [string, string];\n setValue([value[0], `${newValue}`]);\n onCommit?.(column, operator, [firstValue, `${newValue}`]);\n } else if (value !== \"\") {\n // If we have already committed the first value, filter has been\n // saved as a single value '='.\n const currentValue = `${value}`;\n setValue([currentValue, `${newValue}`]);\n onCommit?.(column, operator, [currentValue, `${newValue}`]);\n } else {\n throw Error(\n `[useColumnFilterNext] value has been initialised incorrectly for range filter`,\n );\n }\n },\n [value, setValue, onCommit, column, operator],\n );\n\n const onChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [value, v[1]] : value));\n onColumnFilterChange?.(e.target.value, column, operator);\n },\n [column, onColumnFilterChange, operator, setValue],\n );\n\n const onRangeInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [v[0], value] : value));\n\n onColumnRangeFilterChange?.(value, column, operator);\n },\n [setValue, onColumnRangeFilterChange, column, operator],\n );\n\n const InputProps = useMemo(\n () =>\n injectInputProps(InputPropsProp, {\n onChange,\n value: Array.isArray(value) ? value[0] : value,\n }),\n [InputPropsProp, onChange, value],\n );\n\n const InputPropsRange = useMemo(\n () =>\n injectInputProps(\n InputPropsProp,\n Array.isArray(value)\n ? {\n onChange: onRangeInputChange,\n value: value[1],\n }\n : undefined,\n ),\n [InputPropsProp, onRangeInputChange, value],\n );\n\n return {\n InputProps,\n InputPropsRange,\n onCommit: handleCommit,\n onCommitRange: handleRangeCommit,\n };\n};\n"],"names":["InputProps","useControlled","useCallback","value","useMemo"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var filterContainerCss = ".vuuFilterContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-100)\n\n}";
4
+
5
+ module.exports = filterContainerCss;
6
+ //# sourceMappingURL=FilterContainer.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterContainer.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -6,15 +6,25 @@ var react = require('react');
6
6
  var useFilterContainer = require('./useFilterContainer.js');
7
7
  var ColumnFilter = require('../column-filter/ColumnFilter.js');
8
8
  var FilterProvider = require('../filter-provider/FilterProvider.js');
9
+ var FilterContext = require('../filter-provider/FilterContext.js');
9
10
  var vuuUtils = require('@vuu-ui/vuu-utils');
11
+ var styles = require('@salt-ds/styles');
12
+ var window = require('@salt-ds/window');
13
+ var FilterContainer$1 = require('./FilterContainer.css.js');
10
14
 
11
15
  const classBase = "vuuFilterContainer";
12
16
  const notEmpty = (value) => Array.isArray(value) ? value[0] !== "" && value[1] !== "" : value !== "";
13
- const FilterContainerFilter = ({
17
+ const FilterContainerColumnFilter = ({
14
18
  column,
15
19
  operator = "=",
16
20
  ...props
17
21
  }) => {
22
+ const targetWindow = window.useWindow();
23
+ styles.useComponentCssInjection({
24
+ testId: "vuu-filter-container",
25
+ css: FilterContainer$1,
26
+ window: targetWindow
27
+ });
18
28
  const {
19
29
  onChange: onFilterContextChange,
20
30
  onCommit: onFilterContextCommit,
@@ -26,12 +36,12 @@ const FilterContainerFilter = ({
26
36
  );
27
37
  const [value, setValue] = react.useState(initialValue);
28
38
  const valueRef = react.useRef(initialValue);
29
- const { currentFilter } = FilterProvider.useCurrentFilter();
39
+ const { currentFilter } = FilterContext.useCurrentFilter();
30
40
  const currentFilterRef = react.useRef(currentFilter.id);
31
41
  react.useMemo(() => {
32
42
  if (currentFilterRef.current !== currentFilter.id) {
33
43
  currentFilterRef.current = currentFilter.id;
34
- if (FilterProvider.isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
44
+ if (FilterContext.isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
35
45
  valueRef.current = Array.isArray(valueRef.current) ? ["", ""] : "";
36
46
  setValue(valueRef.current);
37
47
  } else if (FilterProvider.filterDescriptorHasFilter(currentFilter)) {
@@ -111,5 +121,5 @@ const FilterContainer = ({
111
121
  };
112
122
 
113
123
  exports.FilterContainer = FilterContainer;
114
- exports.FilterContainerFilter = FilterContainerFilter;
124
+ exports.FilterContainerColumnFilter = FilterContainerColumnFilter;
115
125
  //# sourceMappingURL=FilterContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport { ColumnFilterCommitHandler } from \"../column-filter/useColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useCurrentFilter,\n} from \"../filter-provider/FilterProvider\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n}\n\nexport interface FilterContainerFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerFilter = ({\n column,\n operator = \"=\",\n ...props\n}: FilterContainerFilterProps) => {\n const {\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useCurrentFilter();\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n valueRef.current = Array.isArray(valueRef.current) ? [\"\", \"\"] : \"\";\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const filterContextProps = useFilterContainer({\n filter,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div {...htmlAttributes} className={cx(classBase, className)}>\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["useFilterContext","useMemo","useState","useRef","useCurrentFilter","isNullFilter","filterDescriptorHasFilter","getColumnValueFromFilter","useCallback","column","value","jsx","ColumnFilter","useFilterContainer","ColumnFilterContext"],"mappings":";;;;;;;;;;AA4BA,MAAM,SAAY,GAAA,oBAAA;AAElB,MAAM,QAAW,GAAA,CAAC,KAChB,KAAA,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,KAAM,CAAA,CAAC,MAAM,EAAM,IAAA,KAAA,CAAM,CAAC,CAAA,KAAM,KAAK,KAAU,KAAA,EAAA;AAajE,MAAM,wBAAwB,CAAC;AAAA,EACpC,MAAA;AAAA,EACA,QAAW,GAAA,GAAA;AAAA,EACX,GAAG;AACL,CAAkC,KAAA;AAChC,EAAM,MAAA;AAAA,IACJ,QAAU,EAAA,qBAAA;AAAA,IACV,QAAU,EAAA,qBAAA;AAAA,IACV;AAAA,GACF,GAAIA,mCAAiB,CAAA,MAAA,EAAQ,IAAI,CAAA;AAEjC,EAAA,MAAM,YAAe,GAAAC,aAAA;AAAA,IACnB,MAAM,QAAS,CAAA,MAAA,EAAQ,QAAQ,CAAA;AAAA,IAC/B,CAAC,MAAQ,EAAA,QAAA,EAAU,QAAQ;AAAA,GAC7B;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAS,YAAY,CAAA;AAC/C,EAAM,MAAA,QAAA,GAAWC,aAA0B,YAAY,CAAA;AACvD,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIC,+BAAiB,EAAA;AAI3C,EAAM,MAAA,gBAAA,GAAmBD,YAAO,CAAA,aAAA,CAAc,EAAE,CAAA;AAEhD,EAAAF,aAAA,CAAQ,MAAM;AACZ,IAAI,IAAA,gBAAA,CAAiB,OAAY,KAAA,aAAA,CAAc,EAAI,EAAA;AACjD,MAAA,gBAAA,CAAiB,UAAU,aAAc,CAAA,EAAA;AAEzC,MAAA,IAAII,4BAAa,aAAa,CAAA,IAAK,QAAS,CAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AAC7D,QAAS,QAAA,CAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,QAAA,CAAS,OAAO,CAAI,GAAA,CAAC,EAAI,EAAA,EAAE,CAAI,GAAA,EAAA;AAChE,QAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAA,OAC3B,MAAA,IAAWC,wCAA0B,CAAA,aAAa,CAAG,EAAA;AACnD,QAAA,MAAM,CAAI,GAAAC,iCAAA;AAAA,UACR,MAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAc,CAAA;AAAA,SAChB;AACA,QACE,IAAA,QAAA,KAAa,SACb,IAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,IAChB,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,OAAO,CAC9B,EAAA;AAGA,UAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,QAAS,CAAA,OAAA;AAC1B,UAAA,IAAI,CAAG,EAAA,CAAC,CAAO,CAAA,KAAA,EAAA,IAAM,OAAO,EAAI,EAAA;AAC9B,YAAA;AAAA,WACK,MAAA;AACL,YAAA,QAAA,CAAS,OAAU,GAAA,CAAC,CAAG,EAAA,CAAC,IAAI,EAAE,CAAA;AAC9B,YAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAA;AAC3B,SACF,MAAA,IAAW,CAAM,KAAA,QAAA,CAAS,OAAS,EAAA;AACjC,UAAA,QAAA,CAAS,OAAU,GAAA,CAAA;AACnB,UAAA,QAAA,CAAS,CAAC,CAAA;AAAA;AACZ;AACF;AACF,GAIC,EAAA,CAAC,MAAQ,EAAA,aAAA,CAAc,EAAE,CAAC,CAAA;AAE7B,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAACC,OAAQ,EAAA,EAAA,EAAIC,MAAU,KAAA;AACrB,MAAA,QAAA,CAAS,OAAUA,GAAAA,MAAAA;AACnB,MAAA,QAAA,CAASA,MAAK,CAAA;AACd,MAAsBD,qBAAAA,CAAAA,OAAAA,EAAQ,IAAIC,MAAK,CAAA;AAAA,KACzC;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAEA,EAAA,MAAM,wBAA2B,GAAAF,iBAAA;AAAA,IAC/B,CAACE,MAAOD,EAAAA,OAAAA,EAAQ,EAAO,KAAA;AACrB,MAAM,MAAA,EAAE,OAAS,EAAA,CAAA,EAAM,GAAA,QAAA;AACvB,MAAA,QAAA,CAAS,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAC,CAAGC,EAAAA,MAAK,CAAI,CAAA,EAAA,CAAA,CAAE,CAAC,CAAC,CAAIA,GAAAA,MAAAA;AAC3D,MAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AACzB,MAAsB,qBAAA,CAAA,QAAA,CAAS,OAASD,EAAAA,OAAAA,EAAQ,EAAE,CAAA;AAAA,KACpD;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAEA,EAAA,MAAM,6BAAgC,GAAAD,iBAAA;AAAA,IACpC,CAACE,MAAOD,EAAAA,OAAAA,EAAQ,EAAO,KAAA;AACrB,MAAM,MAAA,EAAE,OAAS,EAAA,CAAA,EAAM,GAAA,QAAA;AACvB,MAAA,QAAA,CAAS,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAC,CAAE,CAAA,CAAC,CAAG,EAAA,CAAA,EAAGC,MAAK,CAAA,CAAE,CAAIA,GAAAA,MAAAA;AAC3D,MAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AACzB,MAAsB,qBAAA,CAAA,QAAA,CAAS,OAASD,EAAAA,OAAAA,EAAQ,EAAE,CAAA;AAAA,KACpD;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAEA,EACE,uBAAAE,cAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,MAAA;AAAA,MACA,oBAAsB,EAAA,wBAAA;AAAA,MACtB,yBAA2B,EAAA,6BAAA;AAAA,MAC3B,QAAU,EAAA,YAAA;AAAA,MACV,QAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAYO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAG;AACL,CAA4B,KAAA;AAC1B,EAAA,MAAM,qBAAqBC,qCAAmB,CAAA;AAAA,IAC5C,MAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,sCACGC,sCAAoB,CAAA,QAAA,EAApB,EAA6B,KAAA,EAAO,oBACnC,QAAC,kBAAAH,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA,EACxD,UACH,CACF,EAAA,CAAA;AAEJ;;;;;"}
1
+ {"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport { filterDescriptorHasFilter } from \"../filter-provider/FilterProvider\";\nimport {\n isNullFilter,\n useCurrentFilter,\n} from \"../filter-provider/FilterContext\";\nimport { getColumnValueFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n ...props\n}: FilterContainerColumnFilterProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n const {\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useCurrentFilter();\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter.id);\n\n useMemo(() => {\n if (currentFilterRef.current !== currentFilter.id) {\n currentFilterRef.current = currentFilter.id;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n valueRef.current = Array.isArray(valueRef.current) ? [\"\", \"\"] : \"\";\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n operator === \"between\" &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter.id]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const filterContextProps = useFilterContainer({\n filter,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div {...htmlAttributes} className={cx(classBase, className)}>\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","filterContainerCss","useFilterContext","useMemo","useState","useRef","useCurrentFilter","isNullFilter","filterDescriptorHasFilter","getColumnValueFromFilter","useCallback","column","value","jsx","ColumnFilter","useFilterContainer","ColumnFilterContext"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/useFilterContainer.ts"],"sourcesContent":["import {\n ColumnFilterOp,\n ColumnFilterValue,\n Filter,\n FilterContainerFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { createContext, useCallback, useContext, useMemo, useRef } from \"react\";\nimport { ColumnFilterCommitHandler } from \"../column-filter/useColumnFilter\";\nimport {\n FilterAggregator,\n getColumnValueFromFilter,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\n\nexport type ColumnFilterChangeHandler = (\n value: ColumnFilterValue,\n column: ColumnDescriptor,\n op: ColumnFilterOp,\n) => void;\n\nexport interface ColumnFilterContextProps {\n filterContainerInstalled: boolean;\n onChange?: ColumnFilterChangeHandler;\n onCommit?: ColumnFilterCommitHandler;\n register?: (\n column: ColumnDescriptor,\n operator: ColumnFilterOp,\n ) => ColumnFilterValue;\n getValue?: (column: ColumnDescriptor) => ColumnFilterValue;\n}\n\nexport const ColumnFilterContext = createContext<ColumnFilterContextProps>({\n filterContainerInstalled: false,\n});\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore type-check incorrectly flags this as error, its perfectly valid\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer?: false,\n): ColumnFilterContextProps;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer: true,\n): Required<ColumnFilterContextProps>;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer = false,\n) {\n const ctx = useContext(ColumnFilterContext);\n if (ctx) {\n return {\n register: ctx.register,\n getValue: ctx.getValue,\n onChange: ctx.onChange,\n onCommit: ctx.onCommit,\n };\n } else if (throwIfNoContainer) {\n throw Error(\n `[useColumnFilterContainer:useFilterContext] no FilterContainer installed`,\n );\n } else {\n return { filterContainerInstalled: false };\n }\n}\n\nexport type FilterAppliedHandler<F extends Filter = Filter> = (\n filter: F,\n) => void;\nexport type ColumnFilterContainerHookProps = {\n filter?: FilterContainerFilter;\n onFilterApplied?: FilterAppliedHandler<FilterContainerFilter>;\n onFilterCleared?: () => void;\n};\n\ntype ColumnFilterValueMap = Record<string, ColumnFilterValue>;\n\nexport const EmptyTuple: ColumnFilterValue = [\"\", \"\"];\n\nexport const useFilterContainer = ({\n filter,\n onFilterApplied,\n onFilterCleared,\n}: ColumnFilterContainerHookProps): ColumnFilterContextProps => {\n const valueRef = useRef<ColumnFilterValueMap>({});\n\n const filterAggregator = useMemo(\n () => new FilterAggregator(filter),\n [filter],\n );\n\n const register = useCallback(\n (column: ColumnDescriptor, op: ColumnFilterOp) =>\n (valueRef.current[column.name] = getColumnValueFromFilter(\n column,\n op,\n filter,\n )),\n [filter],\n );\n\n const getValue = useCallback(\n (column: ColumnDescriptor, fallbackValue?: ColumnFilterValue) => {\n const value = valueRef.current[column.name];\n if (value !== undefined) {\n return value;\n } else if (fallbackValue !== undefined) {\n return fallbackValue;\n } else {\n throw Error(\n `[useColumnFilterContainer] column ${column.name} has not been registered`,\n );\n }\n },\n [],\n );\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value = \"\") => {\n if (Array.isArray(value)) {\n if (op !== \"between\") {\n throw Error(\n `[useInlineFilter] array value is not valid for operator ${op}`,\n );\n }\n if (value[0] === \"\" && value[1] === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value[0] === \"string\" && typeof value[1] === \"string\") {\n filterAggregator.add(column, value);\n } else {\n throw Error(\n `[useInlineFilter] handleCommit value [${typeof value[0]},${typeof value[1]}] for operator ${op} supports [string,string] only`,\n );\n }\n }\n } else if (value === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n filterAggregator.add(column, value);\n } else {\n throw Error(\n `[useInlineFilter] handleCommit value ${typeof value} supports string, number only`,\n );\n }\n }\n const { filter } = filterAggregator;\n if (filter) {\n onFilterApplied?.(filter);\n } else {\n onFilterCleared?.();\n }\n },\n [filterAggregator, onFilterApplied, onFilterCleared],\n );\n\n const handleInputChange = useCallback<ColumnFilterChangeHandler>(\n (value, column) => {\n // If the filterAggregator has this column, then the value has previously been committed.\n // As soon as user starts editing the value, we un-commit.\n if (filterAggregator.has(column)) {\n if (Array.isArray(value)) {\n // TODO check whether first value has been changed\n const filter = filterAggregator.get(column);\n if (isSingleValueFilter(filter)) {\n // do nothing, the first value has been committed\n } else {\n handleCommit(column, \"between\", [\"\", \"\"]);\n }\n } else {\n handleCommit(column, \"=\", \"\");\n }\n }\n valueRef.current[column.name] = value;\n },\n [filterAggregator, handleCommit],\n );\n\n return {\n filterContainerInstalled: true,\n onChange: handleInputChange,\n onCommit: handleCommit,\n getValue,\n register,\n };\n};\n"],"names":["createContext","useContext","useRef","useMemo","FilterAggregator","useCallback","getColumnValueFromFilter","filter","isSingleValueFilter"],"mappings":";;;;;AAgCO,MAAM,sBAAsBA,mBAAwC,CAAA;AAAA,EACzE,wBAA0B,EAAA;AAC5B,CAAC;AAYe,SAAA,gBAAA,CACd,MACA,EAAA,kBAAA,GAAqB,KACrB,EAAA;AACA,EAAM,MAAA,GAAA,GAAMC,iBAAW,mBAAmB,CAAA;AAC1C,EAAA,IAAI,GAAK,EAAA;AACP,IAAO,OAAA;AAAA,MACL,UAAU,GAAI,CAAA,QAAA;AAAA,MACd,UAAU,GAAI,CAAA,QAAA;AAAA,MACd,UAAU,GAAI,CAAA,QAAA;AAAA,MACd,UAAU,GAAI,CAAA;AAAA,KAChB;AAAA,aACS,kBAAoB,EAAA;AAC7B,IAAM,MAAA,KAAA;AAAA,MACJ,CAAA,wEAAA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAO,OAAA,EAAE,0BAA0B,KAAM,EAAA;AAAA;AAE7C;AAeO,MAAM,qBAAqB,CAAC;AAAA,EACjC,MAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAgE,KAAA;AAC9D,EAAM,MAAA,QAAA,GAAWC,YAA6B,CAAA,EAAE,CAAA;AAEhD,EAAA,MAAM,gBAAmB,GAAAC,aAAA;AAAA,IACvB,MAAM,IAAIC,yBAAA,CAAiB,MAAM,CAAA;AAAA,IACjC,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,QAAW,GAAAC,iBAAA;AAAA,IACf,CAAC,MAA0B,EAAA,EAAA,KACxB,SAAS,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAI,GAAAC,iCAAA;AAAA,MAC/B,MAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,QAAW,GAAAD,iBAAA;AAAA,IACf,CAAC,QAA0B,aAAsC,KAAA;AAC/D,MAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAA;AAC1C,MAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,QAAO,OAAA,KAAA;AAAA,OACT,MAAA,IAAW,kBAAkB,KAAW,CAAA,EAAA;AACtC,QAAO,OAAA,aAAA;AAAA,OACF,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,CAAA,kCAAA,EAAqC,OAAO,IAAI,CAAA,wBAAA;AAAA,SAClD;AAAA;AACF,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,MAAA,EAAQ,EAAI,EAAA,KAAA,GAAQ,EAAO,KAAA;AAC1B,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,QAAA,IAAI,OAAO,SAAW,EAAA;AACpB,UAAM,MAAA,KAAA;AAAA,YACJ,2DAA2D,EAAE,CAAA;AAAA,WAC/D;AAAA;AAEF,QAAA,IAAI,MAAM,CAAC,CAAA,KAAM,MAAM,KAAM,CAAA,CAAC,MAAM,EAAI,EAAA;AACtC,UAAA,IAAI,CAAC,gBAAA,CAAiB,MAAO,CAAA,MAAM,CAAG,EAAA;AACpC,YAAA;AAAA;AACF,SACK,MAAA;AACL,UAAI,IAAA,OAAO,MAAM,CAAC,CAAA,KAAM,YAAY,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAU,EAAA;AAChE,YAAiB,gBAAA,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,WAC7B,MAAA;AACL,YAAM,MAAA,KAAA;AAAA,cACJ,CAAA,uCAAA,EAA0C,OAAO,KAAA,CAAM,CAAC,CAAC,CAAI,CAAA,EAAA,OAAO,KAAM,CAAA,CAAC,CAAC,CAAA,eAAA,EAAkB,EAAE,CAAA,8BAAA;AAAA,aAClG;AAAA;AACF;AACF,OACF,MAAA,IAAW,UAAU,EAAI,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAA,CAAiB,MAAO,CAAA,MAAM,CAAG,EAAA;AACpC,UAAA;AAAA;AACF,OACK,MAAA;AACL,QAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,OAAO,UAAU,QAAU,EAAA;AAC1D,UAAiB,gBAAA,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,SAC7B,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,6BAAA;AAAA,WACtD;AAAA;AACF;AAEF,MAAM,MAAA,EAAE,MAAAE,EAAAA,OAAAA,EAAW,GAAA,gBAAA;AACnB,MAAA,IAAIA,OAAQ,EAAA;AACV,QAAA,eAAA,GAAkBA,OAAM,CAAA;AAAA,OACnB,MAAA;AACL,QAAkB,eAAA,IAAA;AAAA;AACpB,KACF;AAAA,IACA,CAAC,gBAAkB,EAAA,eAAA,EAAiB,eAAe;AAAA,GACrD;AAEA,EAAA,MAAM,iBAAoB,GAAAF,iBAAA;AAAA,IACxB,CAAC,OAAO,MAAW,KAAA;AAGjB,MAAI,IAAA,gBAAA,CAAiB,GAAI,CAAA,MAAM,CAAG,EAAA;AAChC,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AAExB,UAAME,MAAAA,OAAAA,GAAS,gBAAiB,CAAA,GAAA,CAAI,MAAM,CAAA;AAC1C,UAAI,IAAAC,4BAAA,CAAoBD,OAAM,CAAG,EAAA,CAE1B,MAAA;AACL,YAAA,YAAA,CAAa,MAAQ,EAAA,SAAA,EAAW,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAAA;AAC1C,SACK,MAAA;AACL,UAAa,YAAA,CAAA,MAAA,EAAQ,KAAK,EAAE,CAAA;AAAA;AAC9B;AAEF,MAAS,QAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAI,CAAI,GAAA,KAAA;AAAA,KAClC;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAO,OAAA;AAAA,IACL,wBAA0B,EAAA,IAAA;AAAA,IAC1B,QAAU,EAAA,iBAAA;AAAA,IACV,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;;"}
1
+ {"version":3,"file":"useFilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/useFilterContainer.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n Filter,\n FilterContainerFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { createContext, useCallback, useContext, useMemo, useRef } from \"react\";\nimport {\n FilterAggregator,\n getColumnValueFromFilter,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\n\nexport interface ColumnFilterContextProps {\n filterContainerInstalled: boolean;\n onChange?: ColumnFilterChangeHandler;\n onCommit?: ColumnFilterCommitHandler;\n register?: (\n column: ColumnDescriptor,\n operator: ColumnFilterOp,\n ) => ColumnFilterValue;\n getValue?: (column: ColumnDescriptor) => ColumnFilterValue;\n}\n\nexport const ColumnFilterContext = createContext<ColumnFilterContextProps>({\n filterContainerInstalled: false,\n});\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore type-check incorrectly flags this as error, its perfectly valid\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer?: false,\n): ColumnFilterContextProps;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer: true,\n): Required<ColumnFilterContextProps>;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer = false,\n) {\n const ctx = useContext(ColumnFilterContext);\n if (ctx) {\n return {\n register: ctx.register,\n getValue: ctx.getValue,\n onChange: ctx.onChange,\n onCommit: ctx.onCommit,\n };\n } else if (throwIfNoContainer) {\n throw Error(\n `[useColumnFilterContainer:useFilterContext] no FilterContainer installed`,\n );\n } else {\n return { filterContainerInstalled: false };\n }\n}\n\nexport type FilterAppliedHandler<F extends Filter = Filter> = (\n filter: F,\n) => void;\nexport type ColumnFilterContainerHookProps = {\n filter?: FilterContainerFilter;\n onFilterApplied?: FilterAppliedHandler<FilterContainerFilter>;\n onFilterCleared?: () => void;\n};\n\ntype ColumnFilterValueMap = Record<string, ColumnFilterValue>;\n\nexport const EmptyTuple: ColumnFilterValue = [\"\", \"\"];\n\nexport const useFilterContainer = ({\n filter,\n onFilterApplied,\n onFilterCleared,\n}: ColumnFilterContainerHookProps): ColumnFilterContextProps => {\n const valueRef = useRef<ColumnFilterValueMap>({});\n\n const filterAggregator = useMemo(\n () => new FilterAggregator(filter),\n [filter],\n );\n\n const register = useCallback(\n (column: ColumnDescriptor, op: ColumnFilterOp) =>\n (valueRef.current[column.name] = getColumnValueFromFilter(\n column,\n op,\n filter,\n )),\n [filter],\n );\n\n const getValue = useCallback(\n (column: ColumnDescriptor, fallbackValue?: ColumnFilterValue) => {\n const value = valueRef.current[column.name];\n if (value !== undefined) {\n return value;\n } else if (fallbackValue !== undefined) {\n return fallbackValue;\n } else {\n throw Error(\n `[useColumnFilterContainer] column ${column.name} has not been registered`,\n );\n }\n },\n [],\n );\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value = \"\") => {\n if (Array.isArray(value)) {\n if (op !== \"between\") {\n throw Error(\n `[useInlineFilter] array value is not valid for operator ${op}`,\n );\n }\n if (value[0] === \"\" && value[1] === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value[0] === \"string\" && typeof value[1] === \"string\") {\n filterAggregator.add(column, value);\n } else {\n throw Error(\n `[useInlineFilter] handleCommit value [${typeof value[0]},${typeof value[1]}] for operator ${op} supports [string,string] only`,\n );\n }\n }\n } else if (value === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n filterAggregator.add(column, value);\n } else {\n throw Error(\n `[useInlineFilter] handleCommit value ${typeof value} supports string, number only`,\n );\n }\n }\n const { filter } = filterAggregator;\n if (filter) {\n onFilterApplied?.(filter);\n } else {\n onFilterCleared?.();\n }\n },\n [filterAggregator, onFilterApplied, onFilterCleared],\n );\n\n const handleInputChange = useCallback<ColumnFilterChangeHandler>(\n (value, column) => {\n // If the filterAggregator has this column, then the value has previously been committed.\n // As soon as user starts editing the value, we un-commit.\n if (filterAggregator.has(column)) {\n if (Array.isArray(value)) {\n // TODO check whether first value has been changed\n const filter = filterAggregator.get(column);\n if (isSingleValueFilter(filter)) {\n // do nothing, the first value has been committed\n } else {\n handleCommit(column, \"between\", [\"\", \"\"]);\n }\n } else {\n handleCommit(column, \"=\", \"\");\n }\n }\n valueRef.current[column.name] = value;\n },\n [filterAggregator, handleCommit],\n );\n\n return {\n filterContainerInstalled: true,\n onChange: handleInputChange,\n onCommit: handleCommit,\n getValue,\n register,\n };\n};\n"],"names":["createContext","useContext","useRef","useMemo","FilterAggregator","useCallback","getColumnValueFromFilter","filter","isSingleValueFilter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilterDisplay.js","sources":["../../../../packages/vuu-filters/src/filter-display/FilterDisplay.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { getFilterClausesForDisplay } from \"../filter-utils\";\n\nimport filterDisplayCss from \"./FilterDisplay.css\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nconst classBase = \"vuuFilterDisplay\";\n\nexport interface FilterDisplayProps extends HTMLAttributes<HTMLDivElement> {\n columns?: ColumnDescriptor[];\n filter: Filter | undefined;\n}\n\nconst getColumnLabel = (columnName: string, columns?: ColumnDescriptor[]) => {\n if (columns) {\n const column = columns.find((c) => c.name === columnName);\n if (column) {\n return column.label ?? columnName;\n }\n }\n return columnName;\n};\n\nexport const FilterDisplay = forwardRef(function FilterDisplay(\n { className, columns, filter, ...htmlAttributes }: FilterDisplayProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-display\",\n css: filterDisplayCss,\n window: targetWindow,\n });\n\n const filterClauseList = getFilterClausesForDisplay(filter, columns);\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n {filterClauseList.reduce<Array<ReactElement>>(\n (list, [columnName, value]) => {\n list.push(\n <span className={`${classBase}-column`} key={list.length}>\n {getColumnLabel(columnName)}\n </span>,\n <span className={`${classBase}-value`} key={list.length + 1}>\n {value}\n </span>,\n );\n return list;\n },\n [],\n )}\n </div>\n );\n});\n"],"names":["forwardRef","FilterDisplay","useWindow","useComponentCssInjection","filterDisplayCss","getFilterClausesForDisplay","jsx"],"mappings":";;;;;;;;;;AAUA,MAAM,SAAY,GAAA,kBAAA;AAOlB,MAAM,cAAA,GAAiB,CAAC,UAAA,EAAoB,OAAiC,KAAA;AAO3E,EAAO,OAAA,UAAA;AACT,CAAA;AAEa,MAAA,aAAA,GAAgBA,gBAAW,CAAA,SAASC,cAC/C,CAAA,EAAE,SAAW,EAAA,OAAA,EAAS,MAAQ,EAAA,GAAG,cAAe,EAAA,EAChD,YACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,eAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmBC,sCAA2B,CAAA,MAAA,EAAQ,OAAO,CAAA;AACnE,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEJ,QAAiB,EAAA,gBAAA,CAAA,MAAA;AAAA,QAChB,CAAC,IAAA,EAAM,CAAC,UAAA,EAAY,KAAK,CAAM,KAAA;AAC7B,UAAK,IAAA,CAAA,IAAA;AAAA,4BACHA,cAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAC1B,QAAe,EAAA,cAAA,CAAA,UAAU,CADiB,EAAA,EAAA,IAAA,CAAK,MAElD,CAAA;AAAA,4BACAA,cAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,MAAA,CAAA,EAAA,QAAA,EAAA,KAAA,EAAA,EADyC,IAAK,CAAA,MAAA,GAAS,CAE1D;AAAA,WACF;AACA,UAAO,OAAA,IAAA;AAAA,SACT;AAAA,QACA;AAAC;AACH;AAAA,GACF;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"FilterDisplay.js","sources":["../../../../packages/vuu-filters/src/filter-display/FilterDisplay.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { FilterContainerFilter } from \"@vuu-ui/vuu-filter-types\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { getFilterClausesForDisplay } from \"../filter-utils\";\n\nimport filterDisplayCss from \"./FilterDisplay.css\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nconst classBase = \"vuuFilterDisplay\";\n\nexport interface FilterDisplayProps extends HTMLAttributes<HTMLDivElement> {\n columns?: ColumnDescriptor[];\n filter: FilterContainerFilter | undefined;\n}\n\nconst getColumnLabel = (columnName: string, columns?: ColumnDescriptor[]) => {\n if (columns) {\n const column = columns.find((c) => c.name === columnName);\n if (column) {\n return column.label ?? columnName;\n }\n }\n return columnName;\n};\n\nexport const FilterDisplay = forwardRef(function FilterDisplay(\n { className, columns, filter, ...htmlAttributes }: FilterDisplayProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-display\",\n css: filterDisplayCss,\n window: targetWindow,\n });\n\n const filterClauseList = getFilterClausesForDisplay(filter, columns);\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n {filterClauseList.reduce<Array<ReactElement>>(\n (list, [columnName, value]) => {\n list.push(\n <span className={`${classBase}-column`} key={list.length}>\n {getColumnLabel(columnName)}\n </span>,\n <span className={`${classBase}-value`} key={list.length + 1}>\n {value}\n </span>,\n );\n return list;\n },\n [],\n )}\n </div>\n );\n});\n"],"names":["forwardRef","FilterDisplay","useWindow","useComponentCssInjection","filterDisplayCss","getFilterClausesForDisplay","jsx"],"mappings":";;;;;;;;;;AAUA,MAAM,SAAY,GAAA,kBAAA;AAOlB,MAAM,cAAA,GAAiB,CAAC,UAAA,EAAoB,OAAiC,KAAA;AAO3E,EAAO,OAAA,UAAA;AACT,CAAA;AAEa,MAAA,aAAA,GAAgBA,gBAAW,CAAA,SAASC,cAC/C,CAAA,EAAE,SAAW,EAAA,OAAA,EAAS,MAAQ,EAAA,GAAG,cAAe,EAAA,EAChD,YACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,eAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmBC,sCAA2B,CAAA,MAAA,EAAQ,OAAO,CAAA;AACnE,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEJ,QAAiB,EAAA,gBAAA,CAAA,MAAA;AAAA,QAChB,CAAC,IAAA,EAAM,CAAC,UAAA,EAAY,KAAK,CAAM,KAAA;AAC7B,UAAK,IAAA,CAAA,IAAA;AAAA,4BACHA,cAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAC1B,QAAe,EAAA,cAAA,CAAA,UAAU,CADiB,EAAA,EAAA,IAAA,CAAK,MAElD,CAAA;AAAA,4BACAA,cAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,MAAA,CAAA,EAAA,QAAA,EAAA,KAAA,EAAA,EADyC,IAAK,CAAA,MAAA,GAAS,CAE1D;AAAA,WACF;AACA,UAAO,OAAA,IAAA;AAAA,SACT;AAAA,QACA;AAAC;AACH;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var filterPanelCss = ".vuuFilterPanel {\n \n}";
3
+ var filterPanelCss = ".vuuFilterPanel {\n .vuuFilterPanel-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n}";
4
4
 
5
5
  module.exports = filterPanelCss;
6
6
  //# sourceMappingURL=FilterPanel.css.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var react = require('react');
5
- var FilterProvider = require('../filter-provider/FilterProvider.js');
5
+ var FilterContext = require('../filter-provider/FilterContext.js');
6
6
  var FilterNamePrompt = require('../saved-filters/FilterNamePrompt.js');
7
7
 
8
8
  const useFilterPanel = ({
@@ -10,16 +10,14 @@ const useFilterPanel = ({
10
10
  onFilterApplied,
11
11
  onFilterCleared
12
12
  }) => {
13
- const { currentFilter, setCurrentFilter } = FilterProvider.useCurrentFilter();
14
- const { saveFilter } = FilterProvider.useSavedFilters();
13
+ const { currentFilter, setCurrentFilter } = FilterContext.useCurrentFilter();
14
+ const { saveFilter } = FilterContext.useSavedFilters();
15
15
  const [saveFilterPrompt, setSaveFilterPrompt] = react.useState(
16
16
  null
17
17
  );
18
18
  const clearFilter = react.useCallback(() => {
19
- setCurrentFilter(FilterProvider.NULL_FILTER);
19
+ setCurrentFilter(FilterContext.NULL_FILTER);
20
20
  }, [setCurrentFilter]);
21
- const disableClear = false;
22
- const disableSave = false;
23
21
  const handleConfirm = react.useCallback(
24
22
  (name) => {
25
23
  setSaveFilterPrompt(null);
@@ -50,13 +48,13 @@ const useFilterPanel = ({
50
48
  [onFilterApplied, setCurrentFilter]
51
49
  );
52
50
  const handleFilterCleared = react.useCallback(() => {
53
- setCurrentFilter(FilterProvider.EMPTY_FILTER);
51
+ setCurrentFilter(FilterContext.EMPTY_FILTER);
54
52
  onFilterCleared?.();
55
53
  }, [onFilterCleared, setCurrentFilter]);
56
54
  return {
57
55
  clearFilter,
58
- disableClear,
59
- disableSave,
56
+ disableClear: currentFilter.filter === null,
57
+ disableSave: currentFilter.filter === null,
60
58
  filter: currentFilter.filter ?? filter,
61
59
  onFilterApplied: handleFilterApplied,
62
60
  onFilterCleared: handleFilterCleared,
@@ -1 +1 @@
1
- {"version":3,"file":"useFilterPanel.js","sources":["../../../../packages/vuu-filters/src/filter-panel/useFilterPanel.tsx"],"sourcesContent":["import { ReactElement, useCallback, useState } from \"react\";\nimport { FilterContainerProps } from \"../filter-container/FilterContainer\";\nimport {\n EMPTY_FILTER,\n NULL_FILTER,\n useCurrentFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterProvider\";\nimport { FilterAppliedHandler } from \"../filter-container/useFilterContainer\";\nimport { FilterNamePrompt } from \"../saved-filters/FilterNamePrompt\";\nimport { FilterContainerFilter } from \"@vuu-ui/vuu-filter-types\";\n\nexport const useFilterPanel = ({\n filter,\n onFilterApplied,\n onFilterCleared,\n}: Pick<\n FilterContainerProps,\n \"filter\" | \"onFilterApplied\" | \"onFilterCleared\"\n>) => {\n const { currentFilter, setCurrentFilter } = useCurrentFilter();\n const { saveFilter } = useSavedFilters();\n const [saveFilterPrompt, setSaveFilterPrompt] = useState<ReactElement | null>(\n null,\n );\n\n const clearFilter = useCallback(() => {\n setCurrentFilter(NULL_FILTER);\n }, [setCurrentFilter]);\n\n const disableClear = false;\n const disableSave = false;\n\n const handleConfirm = useCallback(\n (name: string) => {\n setSaveFilterPrompt(null);\n saveFilter(name);\n },\n [saveFilter],\n );\n\n const handleClose = () => {\n setSaveFilterPrompt(null);\n };\n\n const handleSaveFilter = useCallback(() => {\n setSaveFilterPrompt(\n <FilterNamePrompt\n onClose={handleClose}\n onConfirm={handleConfirm}\n title=\"Save Filter\"\n />,\n );\n }, [handleConfirm]);\n\n const handleFilterApplied = useCallback<\n FilterAppliedHandler<FilterContainerFilter>\n >(\n (filter) => {\n setCurrentFilter?.(filter);\n onFilterApplied?.(filter);\n },\n [onFilterApplied, setCurrentFilter],\n );\n\n const handleFilterCleared = useCallback(() => {\n setCurrentFilter(EMPTY_FILTER);\n onFilterCleared?.();\n }, [onFilterCleared, setCurrentFilter]);\n\n return {\n clearFilter,\n disableClear,\n disableSave,\n filter: currentFilter.filter ?? filter,\n onFilterApplied: handleFilterApplied,\n onFilterCleared: handleFilterCleared,\n saveFilter: handleSaveFilter,\n saveFilterPrompt,\n };\n};\n"],"names":["useCurrentFilter","useSavedFilters","useState","useCallback","NULL_FILTER","jsx","FilterNamePrompt","filter","EMPTY_FILTER"],"mappings":";;;;;;;AAYO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAiB,EAAA,GAAIA,+BAAiB,EAAA;AAC7D,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,8BAAgB,EAAA;AACvC,EAAM,MAAA,CAAC,gBAAkB,EAAA,mBAAmB,CAAI,GAAAC,cAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,IAAA,gBAAA,CAAiBC,0BAAW,CAAA;AAAA,GAC9B,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,YAAe,GAAA,KAAA;AACrB,EAAA,MAAM,WAAc,GAAA,KAAA;AAEpB,EAAA,MAAM,aAAgB,GAAAD,iBAAA;AAAA,IACpB,CAAC,IAAiB,KAAA;AAChB,MAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,KACjB;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,GAC1B;AAEA,EAAM,MAAA,gBAAA,GAAmBA,kBAAY,MAAM;AACzC,IAAA,mBAAA;AAAA,sBACEE,cAAA;AAAA,QAACC,iCAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,WAAA;AAAA,UACT,SAAW,EAAA,aAAA;AAAA,UACX,KAAM,EAAA;AAAA;AAAA;AACR,KACF;AAAA,GACF,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,mBAAsB,GAAAH,iBAAA;AAAA,IAG1B,CAACI,OAAW,KAAA;AACV,MAAA,gBAAA,GAAmBA,OAAM,CAAA;AACzB,MAAA,eAAA,GAAkBA,OAAM,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,iBAAiB,gBAAgB;AAAA,GACpC;AAEA,EAAM,MAAA,mBAAA,GAAsBJ,kBAAY,MAAM;AAC5C,IAAA,gBAAA,CAAiBK,2BAAY,CAAA;AAC7B,IAAkB,eAAA,IAAA;AAAA,GACjB,EAAA,CAAC,eAAiB,EAAA,gBAAgB,CAAC,CAAA;AAEtC,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,EAAQ,cAAc,MAAU,IAAA,MAAA;AAAA,IAChC,eAAiB,EAAA,mBAAA;AAAA,IACjB,eAAiB,EAAA,mBAAA;AAAA,IACjB,UAAY,EAAA,gBAAA;AAAA,IACZ;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useFilterPanel.js","sources":["../../../../packages/vuu-filters/src/filter-panel/useFilterPanel.tsx"],"sourcesContent":["import { ReactElement, useCallback, useState } from \"react\";\nimport { FilterContainerProps } from \"../filter-container/FilterContainer\";\nimport {\n EMPTY_FILTER,\n NULL_FILTER,\n useCurrentFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport { FilterAppliedHandler } from \"../filter-container/useFilterContainer\";\nimport { FilterNamePrompt } from \"../saved-filters/FilterNamePrompt\";\nimport { FilterContainerFilter } from \"@vuu-ui/vuu-filter-types\";\n\nexport const useFilterPanel = ({\n filter,\n onFilterApplied,\n onFilterCleared,\n}: Pick<\n FilterContainerProps,\n \"filter\" | \"onFilterApplied\" | \"onFilterCleared\"\n>) => {\n const { currentFilter, setCurrentFilter } = useCurrentFilter();\n const { saveFilter } = useSavedFilters();\n const [saveFilterPrompt, setSaveFilterPrompt] = useState<ReactElement | null>(\n null,\n );\n\n const clearFilter = useCallback(() => {\n setCurrentFilter(NULL_FILTER);\n }, [setCurrentFilter]);\n\n const handleConfirm = useCallback(\n (name: string) => {\n setSaveFilterPrompt(null);\n saveFilter(name);\n },\n [saveFilter],\n );\n\n const handleClose = () => {\n setSaveFilterPrompt(null);\n };\n\n const handleSaveFilter = useCallback(() => {\n setSaveFilterPrompt(\n <FilterNamePrompt\n onClose={handleClose}\n onConfirm={handleConfirm}\n title=\"Save Filter\"\n />,\n );\n }, [handleConfirm]);\n\n const handleFilterApplied = useCallback<\n FilterAppliedHandler<FilterContainerFilter>\n >(\n (filter) => {\n setCurrentFilter?.(filter);\n onFilterApplied?.(filter);\n },\n [onFilterApplied, setCurrentFilter],\n );\n\n const handleFilterCleared = useCallback(() => {\n setCurrentFilter(EMPTY_FILTER);\n onFilterCleared?.();\n }, [onFilterCleared, setCurrentFilter]);\n\n return {\n clearFilter,\n disableClear: currentFilter.filter === null,\n disableSave: currentFilter.filter === null,\n filter: currentFilter.filter ?? filter,\n onFilterApplied: handleFilterApplied,\n onFilterCleared: handleFilterCleared,\n saveFilter: handleSaveFilter,\n saveFilterPrompt,\n };\n};\n"],"names":["useCurrentFilter","useSavedFilters","useState","useCallback","NULL_FILTER","jsx","FilterNamePrompt","filter","EMPTY_FILTER"],"mappings":";;;;;;;AAYO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAiB,EAAA,GAAIA,8BAAiB,EAAA;AAC7D,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,6BAAgB,EAAA;AACvC,EAAM,MAAA,CAAC,gBAAkB,EAAA,mBAAmB,CAAI,GAAAC,cAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,IAAA,gBAAA,CAAiBC,yBAAW,CAAA;AAAA,GAC9B,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,aAAgB,GAAAD,iBAAA;AAAA,IACpB,CAAC,IAAiB,KAAA;AAChB,MAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,KACjB;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,GAC1B;AAEA,EAAM,MAAA,gBAAA,GAAmBA,kBAAY,MAAM;AACzC,IAAA,mBAAA;AAAA,sBACEE,cAAA;AAAA,QAACC,iCAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,WAAA;AAAA,UACT,SAAW,EAAA,aAAA;AAAA,UACX,KAAM,EAAA;AAAA;AAAA;AACR,KACF;AAAA,GACF,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,mBAAsB,GAAAH,iBAAA;AAAA,IAG1B,CAACI,OAAW,KAAA;AACV,MAAA,gBAAA,GAAmBA,OAAM,CAAA;AACzB,MAAA,eAAA,GAAkBA,OAAM,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,iBAAiB,gBAAgB;AAAA,GACpC;AAEA,EAAM,MAAA,mBAAA,GAAsBJ,kBAAY,MAAM;AAC5C,IAAA,gBAAA,CAAiBK,0BAAY,CAAA;AAC7B,IAAkB,eAAA,IAAA;AAAA,GACjB,EAAA,CAAC,eAAiB,EAAA,gBAAgB,CAAC,CAAA;AAEtC,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,YAAA,EAAc,cAAc,MAAW,KAAA,IAAA;AAAA,IACvC,WAAA,EAAa,cAAc,MAAW,KAAA,IAAA;AAAA,IACtC,MAAA,EAAQ,cAAc,MAAU,IAAA,MAAA;AAAA,IAChC,eAAiB,EAAA,mBAAA;AAAA,IACjB,eAAiB,EAAA,mBAAA;AAAA,IACjB,UAAY,EAAA,gBAAA;AAAA,IACZ;AAAA,GACF;AACF;;;;"}
@@ -14,6 +14,7 @@ const classBase = "vuuFilterPillNext";
14
14
  const FilterPillNext = ({
15
15
  active,
16
16
  appearence,
17
+ columns,
17
18
  className,
18
19
  defaultActive,
19
20
  filter,
@@ -74,7 +75,7 @@ const FilterPillNext = ({
74
75
  core.Tooltip,
75
76
  {
76
77
  className: `${classBase}-tooltip`,
77
- content: /* @__PURE__ */ jsxRuntime.jsx(FilterDisplay.FilterDisplay, { filter }),
78
+ content: /* @__PURE__ */ jsxRuntime.jsx(FilterDisplay.FilterDisplay, { columns, filter }),
78
79
  placement: "top",
79
80
  children: filterPill
80
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPillNext.js","sources":["../../../../packages/vuu-filters/src/filter-pill/FilterPillNext.tsx"],"sourcesContent":["import { Button, Tooltip } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { FilterMenu, type FilterPermissions } from \"./FilterMenu\";\nimport {\n type FilterPillNextHookProps,\n useFilterPillNext,\n} from \"./useFilterPillNext\";\n\nimport filterPillNextCss from \"./FilterPillNext.css\";\nimport { FilterDisplay } from \"../filter-display/FilterDisplay\";\n\nexport interface FilterPillNextProps\n extends FilterPillNextHookProps,\n Omit<HTMLAttributes<HTMLButtonElement>, \"id\"> {\n id: string;\n permissions?: FilterPermissions;\n showTooltip?: boolean;\n}\n\nconst classBase = \"vuuFilterPillNext\";\n\nexport const FilterPillNext = ({\n active,\n appearence,\n className,\n defaultActive,\n filter,\n id,\n onClick,\n onMenuAction: onMenuActionProp,\n permissions,\n showTooltip = true,\n ...htmlAttributes\n}: FilterPillNextProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-pill\",\n css: filterPillNextCss,\n window: targetWindow,\n });\n\n const {\n contextMenuOpen,\n onContextMenu,\n onContextMenuOpenChange,\n onMenuAction,\n virtualElement,\n } = useFilterPillNext({\n active,\n appearence,\n defaultActive,\n filter,\n onMenuAction: onMenuActionProp,\n });\n\n const filterPill = (\n <Button\n {...htmlAttributes}\n appearance=\"solid\"\n className={cx(classBase, className, {\n [`${classBase}-active`]: active,\n })}\n id={id}\n onClick={onClick}\n onContextMenu={onContextMenu}\n sentiment=\"accented\"\n >\n {filter.name}\n </Button>\n );\n\n const filterMenu = (\n <FilterMenu\n filterId={id}\n getVirtualElement={() => virtualElement}\n onMenuAction={onMenuAction}\n onOpenChange={onContextMenuOpenChange}\n open={contextMenuOpen}\n permissions={permissions}\n />\n );\n\n return showTooltip ? (\n <>\n <Tooltip\n className={`${classBase}-tooltip`}\n content={<FilterDisplay filter={filter} />}\n placement=\"top\"\n >\n {filterPill}\n </Tooltip>\n {filterMenu}\n </>\n ) : (\n <>\n {filterPill}\n {filterMenu}\n </>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","filterPillNextCss","useFilterPillNext","jsx","Button","FilterMenu","jsxs","Fragment","Tooltip","FilterDisplay"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAc,EAAA,gBAAA;AAAA,EACd,WAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd,GAAG;AACL,CAA2B,KAAA;AACzB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACEC,mCAAkB,CAAA;AAAA,IACpB,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAc,EAAA;AAAA,GACf,CAAA;AAED,EAAA,MAAM,UACJ,mBAAAC,cAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,UAAW,EAAA,OAAA;AAAA,MACX,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG;AAAA,OAC1B,CAAA;AAAA,MACD,EAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAU,EAAA,UAAA;AAAA,MAET,QAAO,EAAA,MAAA,CAAA;AAAA;AAAA,GACV;AAGF,EAAA,MAAM,UACJ,mBAAAD,cAAA;AAAA,IAACE,qBAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,EAAA;AAAA,MACV,mBAAmB,MAAM,cAAA;AAAA,MACzB,YAAA;AAAA,MACA,YAAc,EAAA,uBAAA;AAAA,MACd,IAAM,EAAA,eAAA;AAAA,MACN;AAAA;AAAA,GACF;AAGF,EAAA,OAAO,8BAEHC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAJ,cAAA;AAAA,MAACK,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,QAAA,CAAA;AAAA,QACvB,OAAA,kBAAUL,cAAA,CAAAM,2BAAA,EAAA,EAAc,MAAgB,EAAA,CAAA;AAAA,QACxC,SAAU,EAAA,KAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IACC;AAAA,GAAA,EACH,oBAGGH,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,UAAA;AAAA,IACA;AAAA,GACH,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FilterPillNext.js","sources":["../../../../packages/vuu-filters/src/filter-pill/FilterPillNext.tsx"],"sourcesContent":["import { Button, Tooltip } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { FilterMenu, type FilterPermissions } from \"./FilterMenu\";\nimport {\n type FilterPillNextHookProps,\n useFilterPillNext,\n} from \"./useFilterPillNext\";\n\nimport filterPillNextCss from \"./FilterPillNext.css\";\nimport { FilterDisplay } from \"../filter-display/FilterDisplay\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nexport interface FilterPillNextProps\n extends FilterPillNextHookProps,\n Omit<HTMLAttributes<HTMLButtonElement>, \"id\"> {\n /**\n * If provided, these will be used in tooltip to provide\n * richer representation of filter.\n */\n columns?: ColumnDescriptor[];\n id: string;\n permissions?: FilterPermissions;\n showTooltip?: boolean;\n}\n\nconst classBase = \"vuuFilterPillNext\";\n\nexport const FilterPillNext = ({\n active,\n appearence,\n columns,\n className,\n defaultActive,\n filter,\n id,\n onClick,\n onMenuAction: onMenuActionProp,\n permissions,\n showTooltip = true,\n ...htmlAttributes\n}: FilterPillNextProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-pill\",\n css: filterPillNextCss,\n window: targetWindow,\n });\n\n const {\n contextMenuOpen,\n onContextMenu,\n onContextMenuOpenChange,\n onMenuAction,\n virtualElement,\n } = useFilterPillNext({\n active,\n appearence,\n defaultActive,\n filter,\n onMenuAction: onMenuActionProp,\n });\n\n const filterPill = (\n <Button\n {...htmlAttributes}\n appearance=\"solid\"\n className={cx(classBase, className, {\n [`${classBase}-active`]: active,\n })}\n id={id}\n onClick={onClick}\n onContextMenu={onContextMenu}\n sentiment=\"accented\"\n >\n {filter.name}\n </Button>\n );\n\n const filterMenu = (\n <FilterMenu\n filterId={id}\n getVirtualElement={() => virtualElement}\n onMenuAction={onMenuAction}\n onOpenChange={onContextMenuOpenChange}\n open={contextMenuOpen}\n permissions={permissions}\n />\n );\n\n return showTooltip ? (\n <>\n <Tooltip\n className={`${classBase}-tooltip`}\n content={<FilterDisplay columns={columns} filter={filter} />}\n placement=\"top\"\n >\n {filterPill}\n </Tooltip>\n {filterMenu}\n </>\n ) : (\n <>\n {filterPill}\n {filterMenu}\n </>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","filterPillNextCss","useFilterPillNext","jsx","Button","FilterMenu","jsxs","Fragment","Tooltip","FilterDisplay"],"mappings":";;;;;;;;;;;;AA4BA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAc,EAAA,gBAAA;AAAA,EACd,WAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd,GAAG;AACL,CAA2B,KAAA;AACzB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACEC,mCAAkB,CAAA;AAAA,IACpB,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAc,EAAA;AAAA,GACf,CAAA;AAED,EAAA,MAAM,UACJ,mBAAAC,cAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,UAAW,EAAA,OAAA;AAAA,MACX,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG;AAAA,OAC1B,CAAA;AAAA,MACD,EAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAU,EAAA,UAAA;AAAA,MAET,QAAO,EAAA,MAAA,CAAA;AAAA;AAAA,GACV;AAGF,EAAA,MAAM,UACJ,mBAAAD,cAAA;AAAA,IAACE,qBAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,EAAA;AAAA,MACV,mBAAmB,MAAM,cAAA;AAAA,MACzB,YAAA;AAAA,MACA,YAAc,EAAA,uBAAA;AAAA,MACd,IAAM,EAAA,eAAA;AAAA,MACN;AAAA;AAAA,GACF;AAGF,EAAA,OAAO,8BAEHC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAJ,cAAA;AAAA,MAACK,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,QAAA,CAAA;AAAA,QACvB,OAAS,kBAAAL,cAAA,CAACM,2BAAc,EAAA,EAAA,OAAA,EAAkB,MAAgB,EAAA,CAAA;AAAA,QAC1D,SAAU,EAAA,KAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IACC;AAAA,GAAA,EACH,oBAGGH,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,UAAA;AAAA,IACA;AAAA,GACH,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFilterPillNext.js","sources":["../../../../packages/vuu-filters/src/filter-pill/useFilterPillNext.ts"],"sourcesContent":["import type { VirtualElement } from \"@floating-ui/react\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { MouseEventHandler, useCallback, useMemo, useState } from \"react\";\nimport { FilterMenuActionHandler } from \"./FilterMenu\";\nimport { getFilterAsFormattedText } from \"./getFilterTooltipText\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\n\nexport interface FilterPillNextHookProps {\n active?: boolean;\n /**\n * Determines how menu items will be presented\n * 'button' - menu items will be context menu\n * 'split-button' - menu items will be dropdowns\n */\n appearence?: \"split-button\" | \"button\";\n defaultActive?: boolean;\n filter: Filter;\n onMenuAction?: FilterMenuActionHandler;\n}\n\nexport const useFilterPillNext = ({\n active: activeProp,\n appearence = \"button\",\n defaultActive,\n filter,\n onMenuAction,\n}: FilterPillNextHookProps) => {\n const [active] = useControlled({\n controlled: activeProp,\n default: defaultActive ?? false,\n name: \"FilterPillNext\",\n state: \"active\",\n });\n\n const [contextMenuOpen, setContextMenuOpen] = useState(false);\n const [virtualElement, setVirtualElement] = useState<VirtualElement | null>(\n null,\n );\n\n const tooltipText = useMemo(() => {\n const getTooltipText = getFilterAsFormattedText();\n return getTooltipText(filter);\n }, [filter]);\n\n const onContextMenu: MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n if (appearence === \"button\") {\n setVirtualElement({\n getBoundingClientRect: () => ({\n width: 0,\n height: 0,\n x: e.clientX,\n y: e.clientY,\n top: e.clientY,\n right: e.clientX,\n bottom: e.clientY,\n left: e.clientX,\n }),\n });\n setContextMenuOpen(true);\n }\n };\n\n const handleMenuAction = useCallback<FilterMenuActionHandler>(\n (filterId, actionType) => {\n setContextMenuOpen(false);\n onMenuAction?.(filterId, actionType);\n },\n [onMenuAction],\n );\n\n return {\n active,\n contextMenuOpen,\n onContextMenu,\n onContextMenuOpenChange: setContextMenuOpen,\n onMenuAction: handleMenuAction,\n tooltipText,\n virtualElement,\n };\n};\n"],"names":["useControlled","useState","useMemo","getFilterAsFormattedText","useCallback"],"mappings":";;;;;;AAoBO,MAAM,oBAAoB,CAAC;AAAA,EAChC,MAAQ,EAAA,UAAA;AAAA,EACR,UAAa,GAAA,QAAA;AAAA,EACb,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA+B,KAAA;AAC7B,EAAM,MAAA,CAAC,MAAM,CAAA,GAAIA,kBAAc,CAAA;AAAA,IAC7B,UAAY,EAAA,UAAA;AAAA,IACZ,SAAS,aAAiB,IAAA,KAAA;AAAA,IAC1B,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5D,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAAA,cAAA;AAAA,IAC1C;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAcC,cAAQ,MAAM;AAChC,IAAA,MAAM,iBAAiBC,6CAAyB,EAAA;AAChD,IAAA,OAAO,eAAe,MAAM,CAAA;AAAA,GAC9B,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAM,MAAA,aAAA,GAAsD,CAAC,CAAM,KAAA;AACjE,IAAA,CAAA,CAAE,cAAe,EAAA;AACjB,IAAA,IAAI,eAAe,QAAU,EAAA;AAC3B,MAAkB,iBAAA,CAAA;AAAA,QAChB,uBAAuB,OAAO;AAAA,UAC5B,KAAO,EAAA,CAAA;AAAA,UACP,MAAQ,EAAA,CAAA;AAAA,UACR,GAAG,CAAE,CAAA,OAAA;AAAA,UACL,GAAG,CAAE,CAAA,OAAA;AAAA,UACL,KAAK,CAAE,CAAA,OAAA;AAAA,UACP,OAAO,CAAE,CAAA,OAAA;AAAA,UACT,QAAQ,CAAE,CAAA,OAAA;AAAA,UACV,MAAM,CAAE,CAAA;AAAA,SACV;AAAA,OACD,CAAA;AACD,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA;AACzB,GACF;AAEA,EAAA,MAAM,gBAAmB,GAAAC,iBAAA;AAAA,IACvB,CAAC,UAAU,UAAe,KAAA;AACxB,MAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,MAAA,YAAA,GAAe,UAAU,UAAU,CAAA;AAAA,KACrC;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAyB,EAAA,kBAAA;AAAA,IACzB,YAAc,EAAA,gBAAA;AAAA,IACd,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useFilterPillNext.js","sources":["../../../../packages/vuu-filters/src/filter-pill/useFilterPillNext.ts"],"sourcesContent":["import type { VirtualElement } from \"@floating-ui/react\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { MouseEventHandler, useCallback, useMemo, useState } from \"react\";\nimport { FilterMenuActionHandler } from \"./FilterMenu\";\nimport { getFilterAsFormattedText } from \"./getFilterTooltipText\";\nimport { FilterContainerFilter } from \"@vuu-ui/vuu-filter-types\";\n\nexport interface FilterPillNextHookProps {\n active?: boolean;\n /**\n * Determines how menu items will be presented\n * 'button' - menu items will be context menu\n * 'split-button' - menu items will be dropdowns\n */\n appearence?: \"split-button\" | \"button\";\n defaultActive?: boolean;\n filter: FilterContainerFilter;\n onMenuAction?: FilterMenuActionHandler;\n}\n\nexport const useFilterPillNext = ({\n active: activeProp,\n appearence = \"button\",\n defaultActive,\n filter,\n onMenuAction,\n}: FilterPillNextHookProps) => {\n const [active] = useControlled({\n controlled: activeProp,\n default: defaultActive ?? false,\n name: \"FilterPillNext\",\n state: \"active\",\n });\n\n const [contextMenuOpen, setContextMenuOpen] = useState(false);\n const [virtualElement, setVirtualElement] = useState<VirtualElement | null>(\n null,\n );\n\n const tooltipText = useMemo(() => {\n const getTooltipText = getFilterAsFormattedText();\n return getTooltipText(filter);\n }, [filter]);\n\n const onContextMenu: MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n if (appearence === \"button\") {\n setVirtualElement({\n getBoundingClientRect: () => ({\n width: 0,\n height: 0,\n x: e.clientX,\n y: e.clientY,\n top: e.clientY,\n right: e.clientX,\n bottom: e.clientY,\n left: e.clientX,\n }),\n });\n setContextMenuOpen(true);\n }\n };\n\n const handleMenuAction = useCallback<FilterMenuActionHandler>(\n (filterId, actionType) => {\n setContextMenuOpen(false);\n onMenuAction?.(filterId, actionType);\n },\n [onMenuAction],\n );\n\n return {\n active,\n contextMenuOpen,\n onContextMenu,\n onContextMenuOpenChange: setContextMenuOpen,\n onMenuAction: handleMenuAction,\n tooltipText,\n virtualElement,\n };\n};\n"],"names":["useControlled","useState","useMemo","getFilterAsFormattedText","useCallback"],"mappings":";;;;;;AAoBO,MAAM,oBAAoB,CAAC;AAAA,EAChC,MAAQ,EAAA,UAAA;AAAA,EACR,UAAa,GAAA,QAAA;AAAA,EACb,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA+B,KAAA;AAC7B,EAAM,MAAA,CAAC,MAAM,CAAA,GAAIA,kBAAc,CAAA;AAAA,IAC7B,UAAY,EAAA,UAAA;AAAA,IACZ,SAAS,aAAiB,IAAA,KAAA;AAAA,IAC1B,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5D,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAAA,cAAA;AAAA,IAC1C;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAcC,cAAQ,MAAM;AAChC,IAAA,MAAM,iBAAiBC,6CAAyB,EAAA;AAChD,IAAA,OAAO,eAAe,MAAM,CAAA;AAAA,GAC9B,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAM,MAAA,aAAA,GAAsD,CAAC,CAAM,KAAA;AACjE,IAAA,CAAA,CAAE,cAAe,EAAA;AACjB,IAAA,IAAI,eAAe,QAAU,EAAA;AAC3B,MAAkB,iBAAA,CAAA;AAAA,QAChB,uBAAuB,OAAO;AAAA,UAC5B,KAAO,EAAA,CAAA;AAAA,UACP,MAAQ,EAAA,CAAA;AAAA,UACR,GAAG,CAAE,CAAA,OAAA;AAAA,UACL,GAAG,CAAE,CAAA,OAAA;AAAA,UACL,KAAK,CAAE,CAAA,OAAA;AAAA,UACP,OAAO,CAAE,CAAA,OAAA;AAAA,UACT,QAAQ,CAAE,CAAA,OAAA;AAAA,UACV,MAAM,CAAE,CAAA;AAAA,SACV;AAAA,OACD,CAAA;AACD,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA;AACzB,GACF;AAEA,EAAA,MAAM,gBAAmB,GAAAC,iBAAA;AAAA,IACvB,CAAC,UAAU,UAAe,KAAA;AACxB,MAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,MAAA,YAAA,GAAe,UAAU,UAAU,CAAA;AAAA,KACrC;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAyB,EAAA,kBAAA;AAAA,IACzB,YAAc,EAAA,gBAAA;AAAA,IACd,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ const EMPTY_FILTER = "empty-filter";
6
+ const NULL_FILTER = "null-filter";
7
+ const isEmptyFilter = (f) => f?.id === EMPTY_FILTER;
8
+ const isNullFilter = (f) => f?.id === NULL_FILTER;
9
+ const NullFilterDescriptor = {
10
+ active: true,
11
+ id: NULL_FILTER,
12
+ filter: null
13
+ };
14
+ const EmptyFilterDescriptor = {
15
+ active: true,
16
+ id: EMPTY_FILTER,
17
+ filter: null
18
+ };
19
+ const FilterContext = react.createContext({
20
+ currentFilter: NullFilterDescriptor,
21
+ savedFilters: [],
22
+ onApplyFilter: () => console.warn(
23
+ "[FilterContext] onApplyFilter, no FilterProvider has been configured"
24
+ ),
25
+ deleteFilter: () => console.warn(
26
+ "[FilterContext] deleteFilter, no FilterProvider has been configured"
27
+ ),
28
+ saveFilter: () => console.warn(
29
+ "[FilterContext] saveFilter, no FilterProvider has been configured"
30
+ ),
31
+ setCurrentFilter: () => console.warn(
32
+ "[FilterContext] setCurrentFilter, no FilterProvider has been configured"
33
+ )
34
+ });
35
+ function useCurrentFilter() {
36
+ const { currentFilter, onApplyFilter, setCurrentFilter } = react.useContext(FilterContext);
37
+ return { currentFilter, onApplyFilter, setCurrentFilter };
38
+ }
39
+ function useSavedFilters() {
40
+ const {
41
+ currentFilter,
42
+ onApplyFilter,
43
+ onFilterMenuAction,
44
+ savedFilters,
45
+ saveFilter,
46
+ setCurrentFilter
47
+ } = react.useContext(FilterContext);
48
+ return {
49
+ currentFilter,
50
+ onApplyFilter,
51
+ onFilterMenuAction,
52
+ savedFilters,
53
+ saveFilter,
54
+ setCurrentFilter
55
+ };
56
+ }
57
+
58
+ exports.EMPTY_FILTER = EMPTY_FILTER;
59
+ exports.EmptyFilterDescriptor = EmptyFilterDescriptor;
60
+ exports.FilterContext = FilterContext;
61
+ exports.NULL_FILTER = NULL_FILTER;
62
+ exports.NullFilterDescriptor = NullFilterDescriptor;
63
+ exports.isEmptyFilter = isEmptyFilter;
64
+ exports.isNullFilter = isNullFilter;
65
+ exports.useCurrentFilter = useCurrentFilter;
66
+ exports.useSavedFilters = useSavedFilters;
67
+ //# sourceMappingURL=FilterContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterContext.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterContext.ts"],"sourcesContent":["import {\n FilterChangeHandler,\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { FilterMenuActionHandler } from \"../filter-pill/FilterMenu\";\nimport { createContext, useContext } from \"react\";\n\nexport interface FilterContextProps {\n currentFilter: FilterContainerFilterDescriptor;\n deleteFilter: (filterId: string) => void;\n saveFilter: (name: string) => void;\n savedFilters?: FilterContainerFilterDescriptor[];\n // TODO do we need this ?\n onApplyFilter: FilterChangeHandler;\n onFilterMenuAction?: FilterMenuActionHandler;\n setCurrentFilter: (filter: string | FilterContainerFilter) => void;\n}\n\nexport const EMPTY_FILTER = \"empty-filter\";\nexport const NULL_FILTER = \"null-filter\";\n\nexport const isEmptyFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === EMPTY_FILTER;\nexport const isNullFilter = (f?: FilterContainerFilterDescriptor) =>\n f?.id === NULL_FILTER;\n\nexport const NullFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: NULL_FILTER,\n filter: null,\n};\n\nexport const EmptyFilterDescriptor: FilterContainerFilterDescriptor = {\n active: true,\n id: EMPTY_FILTER,\n filter: null,\n};\n\nexport const FilterContext = createContext<FilterContextProps>({\n currentFilter: NullFilterDescriptor,\n savedFilters: [],\n onApplyFilter: () =>\n console.warn(\n \"[FilterContext] onApplyFilter, no FilterProvider has been configured\",\n ),\n deleteFilter: () =>\n console.warn(\n \"[FilterContext] deleteFilter, no FilterProvider has been configured\",\n ),\n\n saveFilter: () =>\n console.warn(\n \"[FilterContext] saveFilter, no FilterProvider has been configured\",\n ),\n setCurrentFilter: () =>\n console.warn(\n \"[FilterContext] setCurrentFilter, no FilterProvider has been configured\",\n ),\n});\n\nexport function useCurrentFilter() {\n const { currentFilter, onApplyFilter, setCurrentFilter } =\n useContext(FilterContext);\n return { currentFilter, onApplyFilter, setCurrentFilter };\n}\n\nexport function useSavedFilters() {\n const {\n currentFilter,\n onApplyFilter,\n onFilterMenuAction,\n savedFilters,\n saveFilter,\n setCurrentFilter,\n } = useContext(FilterContext);\n return {\n currentFilter,\n onApplyFilter,\n onFilterMenuAction,\n savedFilters,\n saveFilter,\n setCurrentFilter,\n };\n}\n"],"names":["createContext","useContext"],"mappings":";;;;AAmBO,MAAM,YAAe,GAAA;AACrB,MAAM,WAAc,GAAA;AAEpB,MAAM,aAAgB,GAAA,CAAC,CAC5B,KAAA,CAAA,EAAG,EAAO,KAAA;AACL,MAAM,YAAe,GAAA,CAAC,CAC3B,KAAA,CAAA,EAAG,EAAO,KAAA;AAEL,MAAM,oBAAwD,GAAA;AAAA,EACnE,MAAQ,EAAA,IAAA;AAAA,EACR,EAAI,EAAA,WAAA;AAAA,EACJ,MAAQ,EAAA;AACV;AAEO,MAAM,qBAAyD,GAAA;AAAA,EACpE,MAAQ,EAAA,IAAA;AAAA,EACR,EAAI,EAAA,YAAA;AAAA,EACJ,MAAQ,EAAA;AACV;AAEO,MAAM,gBAAgBA,mBAAkC,CAAA;AAAA,EAC7D,aAAe,EAAA,oBAAA;AAAA,EACf,cAAc,EAAC;AAAA,EACf,aAAA,EAAe,MACb,OAAQ,CAAA,IAAA;AAAA,IACN;AAAA,GACF;AAAA,EACF,YAAA,EAAc,MACZ,OAAQ,CAAA,IAAA;AAAA,IACN;AAAA,GACF;AAAA,EAEF,UAAA,EAAY,MACV,OAAQ,CAAA,IAAA;AAAA,IACN;AAAA,GACF;AAAA,EACF,gBAAA,EAAkB,MAChB,OAAQ,CAAA,IAAA;AAAA,IACN;AAAA;AAEN,CAAC;AAEM,SAAS,gBAAmB,GAAA;AACjC,EAAA,MAAM,EAAE,aAAe,EAAA,aAAA,EAAe,gBAAiB,EAAA,GACrDC,iBAAW,aAAa,CAAA;AAC1B,EAAO,OAAA,EAAE,aAAe,EAAA,aAAA,EAAe,gBAAiB,EAAA;AAC1D;AAEO,SAAS,eAAkB,GAAA;AAChC,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAIA,iBAAW,aAAa,CAAA;AAC5B,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;;;;;;;;"}