@vuu-ui/vuu-filters 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/filter-bar/FilterBar.css.js +1 -1
- package/cjs/filter-bar/FilterBar.js +5 -9
- package/cjs/filter-bar/FilterBar.js.map +1 -1
- package/cjs/inline-filter/InlineFilter.css.js +1 -1
- package/cjs/inline-filter/InlineFilter.js +9 -33
- package/cjs/inline-filter/InlineFilter.js.map +1 -1
- package/cjs/inline-filter/useInlineFilter.js +39 -0
- package/cjs/inline-filter/useInlineFilter.js.map +1 -0
- package/esm/filter-bar/FilterBar.css.js +1 -1
- package/esm/filter-bar/FilterBar.js +5 -9
- package/esm/filter-bar/FilterBar.js.map +1 -1
- package/esm/inline-filter/InlineFilter.css.js +1 -1
- package/esm/inline-filter/InlineFilter.js +10 -34
- package/esm/inline-filter/InlineFilter.js.map +1 -1
- package/esm/inline-filter/useInlineFilter.js +37 -0
- package/esm/inline-filter/useInlineFilter.js.map +1 -0
- package/package.json +11 -11
- package/types/filter-bar/FilterBar.d.ts +1 -1
- package/types/inline-filter/useInlineFilter.d.ts +11 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var filterBarCss = ".vuuFilterBar {\n --vuu-svg-grid: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6.00004H4.66667V3.33337H3.33333C2.6 3.33337 2 3.93337 2 4.66671V6.00004ZM2 9.33337H4.66667V6.66671H2V9.33337ZM5.33333 9.33337H8V6.66671H5.33333V9.33337ZM8.66667 9.33337H11.3333V6.66671H8.66667V9.33337ZM5.33333 6.00004H8V3.33337H5.33333V6.00004ZM8.66667 3.33337V6.00004H11.3333V3.33337H8.66667ZM12 9.33337H14.6667V6.66671H12V9.33337ZM3.33333 12.6667H4.66667V10H2V11.3334C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3334V10H12V12.6667ZM12 3.33337V6.00004H14.6667V4.66671C14.6667 3.93337 14.0667 3.33337 13.3333 3.33337H12Z\"/></svg>');\n --vuu-svg-tune: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 18C3 18.55 3.45 19 4 19H9V17H4C3.45 17 3 17.45 3 18ZM3 6C3 6.55 3.45 7 4 7H13V5H4C3.45 5 3 5.45 3 6ZM13 20V19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H13V16C13 15.45 12.55 15 12 15C11.45 15 11 15.45 11 16V20C11 20.55 11.45 21 12 21C12.55 21 13 20.55 13 20ZM7 10V11H4C3.45 11 3 11.45 3 12C3 12.55 3.45 13 4 13H7V14C7 14.55 7.45 15 8 15C8.55 15 9 14.55 9 14V10C9 9.45 8.55 9 8 9C7.45 9 7 9.45 7 10ZM21 12C21 11.45 20.55 11 20 11H11V13H20C20.55 13 21 12.55 21 12ZM16 9C16.55 9 17 8.55 17 8V7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H17V4C17 3.45 16.55 3 16 3C15.45 3 15 3.45 15 4V8C15 8.55 15.45 9 16 9Z\" /></svg>');\n --vuuOverflowContainer-minWidth: 0;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(var(--salt-size-base) + var(--salt-spacing-100))\n );\n --vuuFilterEditor-height: var(--filterbar-height);\n --icon-container-height: auto;\n --flexbar-gap: var(--salt-spacing-100);\n --icon-marginTop: 0;\n\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n border-color: var(--salt-container-primary-borderColor);\n border-style: var(--vuuFilterBar-borderStyle, none none solid none);\n border-width: 1px;\n display: inline-flex;\n flex: var(--vuuFilterBar-flex);\n flex-wrap: wrap;\n gap: var(--flexbar-gap);\n grid-template-columns: 70px 1fr 28px;\n grid-auto-rows: 28px 0px;\n height: calc(var(--salt-spacing-100) + var(--filterbar-height));\n overflow: hidden;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar-quick-filter {\n --icon-container-height: 100%;\n --icon-marginTop: 20px;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(2 * var(--salt-size-base))\n );\n align-items: flex-end;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar:has(.vuuFilterEditor) {\n grid-template-rows: 28px 28px;\n height: calc(1px + var(--flexbar-gap) + (2 * var(--filterbar-height)));\n}\n\n.vuuFilterBar-iconContainer {\n height: var(--icon-container-height);\n\n .saltToggleButtonGroup {\n margin-top: var(--icon-marginTop);\n transition: margin-top 0.1s ease-in;\n }\n}\n\n.vuuFilterbar-icon {\n display: inline-block;\n height: 16px;\n width: 16px;\n}\n\n.vuuFilterBar [data-icon=\"grid\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-grid);\n}\n.vuuFilterBar [data-icon=\"tune\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-tune);\n}\n\n.vuuFilterBar [data-icon=\"plus\"] {\n --vuu-icon-size: 16px;\n}\n\n.vuuFilterBar .vuuToolbar {\n flex: 0 1 auto;\n}\n\n.vuuFilterBar-Editor {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--salt-spacing-100);\n}\n\n.vuuCustomFilters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n.vuuCustomFilters-filters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n";
|
|
3
|
+
var filterBarCss = ".vuuFilterBar {\n --vuu-svg-grid: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6.00004H4.66667V3.33337H3.33333C2.6 3.33337 2 3.93337 2 4.66671V6.00004ZM2 9.33337H4.66667V6.66671H2V9.33337ZM5.33333 9.33337H8V6.66671H5.33333V9.33337ZM8.66667 9.33337H11.3333V6.66671H8.66667V9.33337ZM5.33333 6.00004H8V3.33337H5.33333V6.00004ZM8.66667 3.33337V6.00004H11.3333V3.33337H8.66667ZM12 9.33337H14.6667V6.66671H12V9.33337ZM3.33333 12.6667H4.66667V10H2V11.3334C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3334V10H12V12.6667ZM12 3.33337V6.00004H14.6667V4.66671C14.6667 3.93337 14.0667 3.33337 13.3333 3.33337H12Z\"/></svg>');\n --vuu-svg-tune: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 18C3 18.55 3.45 19 4 19H9V17H4C3.45 17 3 17.45 3 18ZM3 6C3 6.55 3.45 7 4 7H13V5H4C3.45 5 3 5.45 3 6ZM13 20V19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H13V16C13 15.45 12.55 15 12 15C11.45 15 11 15.45 11 16V20C11 20.55 11.45 21 12 21C12.55 21 13 20.55 13 20ZM7 10V11H4C3.45 11 3 11.45 3 12C3 12.55 3.45 13 4 13H7V14C7 14.55 7.45 15 8 15C8.55 15 9 14.55 9 14V10C9 9.45 8.55 9 8 9C7.45 9 7 9.45 7 10ZM21 12C21 11.45 20.55 11 20 11H11V13H20C20.55 13 21 12.55 21 12ZM16 9C16.55 9 17 8.55 17 8V7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H17V4C17 3.45 16.55 3 16 3C15.45 3 15 3.45 15 4V8C15 8.55 15.45 9 16 9Z\" /></svg>');\n --vuuOverflowContainer-minWidth: 0;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(var(--salt-size-base) + var(--salt-spacing-100))\n );\n --vuuFilterEditor-height: var(--filterbar-height);\n --icon-container-height: auto;\n --flexbar-gap: var(--salt-spacing-100);\n --icon-marginTop: 0;\n\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n border-color: var(--salt-container-primary-borderColor);\n border-style: var(--vuuFilterBar-borderStyle, none none solid none);\n border-width: 1px;\n display: inline-flex;\n flex: var(--vuuFilterBar-flex);\n flex-wrap: wrap;\n gap: var(--flexbar-gap);\n grid-template-columns: 70px 1fr 28px;\n grid-auto-rows: 28px 0px;\n height: calc(var(--salt-spacing-100) + var(--filterbar-height));\n overflow: hidden;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar-quick-filter-mode {\n --icon-container-height: 100%;\n --icon-marginTop: 20px;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(2 * var(--salt-size-base))\n );\n align-items: flex-end;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar:has(.vuuFilterEditor) {\n grid-template-rows: 28px 28px;\n height: calc(1px + var(--flexbar-gap) + (2 * var(--filterbar-height)));\n}\n\n.vuuFilterBar-iconContainer {\n height: var(--icon-container-height);\n\n .saltToggleButtonGroup {\n margin-top: var(--icon-marginTop);\n transition: margin-top 0.1s ease-in;\n }\n}\n\n.vuuFilterbar-icon {\n display: inline-block;\n height: 16px;\n width: 16px;\n}\n\n.vuuFilterBar [data-icon=\"grid\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-grid);\n}\n.vuuFilterBar [data-icon=\"tune\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-tune);\n}\n\n.vuuFilterBar [data-icon=\"plus\"] {\n --vuu-icon-size: 16px;\n}\n\n.vuuFilterBar .vuuToolbar {\n flex: 0 1 auto;\n}\n\n.vuuFilterBar-Editor {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--salt-spacing-100);\n}\n\n.vuuCustomFilters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n.vuuCustomFilters-filters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = filterBarCss;
|
|
6
6
|
//# sourceMappingURL=FilterBar.css.js.map
|
|
@@ -28,7 +28,7 @@ const FilterBar = ({
|
|
|
28
28
|
onFilterStateChanged,
|
|
29
29
|
suggestionProvider,
|
|
30
30
|
tableSchema,
|
|
31
|
-
variant = "custom-filters",
|
|
31
|
+
variant = "custom-filters-only",
|
|
32
32
|
...htmlAttributes
|
|
33
33
|
}) => {
|
|
34
34
|
const targetWindow = window.useWindow();
|
|
@@ -37,8 +37,8 @@ const FilterBar = ({
|
|
|
37
37
|
css: FilterBar$1,
|
|
38
38
|
window: targetWindow
|
|
39
39
|
});
|
|
40
|
-
const allowCustomFilters = variant !== "quick-filters";
|
|
41
|
-
const allowQuickFilters = variant !== "custom-filters";
|
|
40
|
+
const allowCustomFilters = variant !== "quick-filters-only";
|
|
41
|
+
const allowQuickFilters = variant !== "custom-filters-only";
|
|
42
42
|
const controlledFilterMode = !allowCustomFilters ? "quick-filter" : !allowQuickFilters ? "custom-filter" : filterModeProp;
|
|
43
43
|
const { filterMode, onChangeFilterMode } = useFilterBar.useFilterBar({
|
|
44
44
|
defaultFilterMode,
|
|
@@ -88,13 +88,9 @@ const FilterBar = ({
|
|
|
88
88
|
"div",
|
|
89
89
|
{
|
|
90
90
|
...htmlAttributes,
|
|
91
|
-
className: cx(
|
|
92
|
-
className,
|
|
93
|
-
`${classBase}-${variant}`,
|
|
94
|
-
`${classBase}-${filterMode}`
|
|
95
|
-
),
|
|
91
|
+
className: cx(className, `${classBase}-${filterMode}-mode`),
|
|
96
92
|
children: [
|
|
97
|
-
variant === "quick-filters" ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-iconContainer`, children: startAdornment }),
|
|
93
|
+
variant === "quick-filters-only" ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-iconContainer`, children: startAdornment }),
|
|
98
94
|
filterMode === "custom-filter" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
99
95
|
CustomFilters.CustomFilters,
|
|
100
96
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBar.js","sources":["../../src/filter-bar/FilterBar.tsx"],"sourcesContent":["import {\n DataSourceFilter,\n SuggestionProvider,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { Filter, FilterState } from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { CustomFilters } from \"../custom-filters\";\nimport { QuickFilterProps, QuickFilters } from \"../quick-filters\";\nimport { FilterMode, useFilterBar } from \"./useFilterBar\";\n\nimport filterBarCss from \"./FilterBar.css\";\n\nexport type FilterBarVariant =\n | \"custom-filters\"\n | \"quick-filters\"\n | \"full-filters\";\n\nexport interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {\n QuickFilterProps?: Pick<\n QuickFilterProps,\n \"quickFilterColumns\" | \"onChangeQuickFilterColumns\"\n >;\n /**\n * This is used to apply tailored filters based on column types and other attributes.\n * NOTE: Always make sure that these are passed with proper re-render optimization, otherwise,\n * might end up with infinite state updates.\n */\n columnDescriptors: ColumnDescriptor[];\n defaultFilterMode?: FilterMode;\n defaultFilterState?: FilterState;\n filterMode?: FilterMode;\n filterState?: FilterState;\n onApplyFilter: (filter: DataSourceFilter) => void;\n onChangeFilterMode?: (filterMode: FilterMode) => void;\n onFilterDeleted?: (filter: Filter) => void;\n onFilterRenamed?: (filter: Filter, name: string) => void;\n onFilterStateChanged?: (state: FilterState) => void;\n suggestionProvider?: SuggestionProvider;\n /**\n * TableSchema is used both to populate list of available columns and to\n * provide table in call to Typeahead service\n */\n tableSchema?: TableSchema;\n variant?: FilterBarVariant;\n}\n\nconst classBase = \"vuuFilterBar\";\n\nexport const FilterBar = ({\n QuickFilterProps,\n className: classNameProp,\n columnDescriptors,\n defaultFilterMode,\n defaultFilterState,\n filterMode: filterModeProp,\n filterState,\n onApplyFilter,\n onChangeFilterMode: onChangeFilterModeProp,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n suggestionProvider,\n tableSchema,\n variant = \"custom-filters\",\n ...htmlAttributes\n}: FilterBarProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-bar\",\n css: filterBarCss,\n window: targetWindow,\n });\n\n const allowCustomFilters = variant !== \"quick-filters\";\n const allowQuickFilters = variant !== \"custom-filters\";\n\n const controlledFilterMode: FilterMode | undefined = !allowCustomFilters\n ? \"quick-filter\"\n : !allowQuickFilters\n ? \"custom-filter\"\n : filterModeProp;\n\n const { filterMode, onChangeFilterMode } = useFilterBar({\n defaultFilterMode,\n filterMode: controlledFilterMode,\n onChangeFilterMode: onChangeFilterModeProp,\n });\n\n const className = cx(classBase, classNameProp);\n\n const startAdornment = useMemo(() => {\n if (!allowQuickFilters) {\n return <Icon name=\"filter\" size={16} style={{ top: 4 }} />;\n } else {\n return (\n <ToggleButtonGroup\n data-variant=\"secondary\"\n onChange={onChangeFilterMode}\n value={filterMode}\n >\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"custom-filter\"\n value=\"custom-filter\"\n aria-label=\"Custom filters\"\n tabIndex={-1}\n >\n <Icon name=\"grid\" size={16} />\n </ToggleButton>\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"quick-filter\"\n value=\"quick-filter\"\n aria-label=\"Quick filters\"\n tabIndex={-1}\n >\n <Icon name=\"tune\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n );\n }\n }, [allowQuickFilters, filterMode, onChangeFilterMode]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(
|
|
1
|
+
{"version":3,"file":"FilterBar.js","sources":["../../src/filter-bar/FilterBar.tsx"],"sourcesContent":["import {\n DataSourceFilter,\n SuggestionProvider,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { Filter, FilterState } from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { CustomFilters } from \"../custom-filters\";\nimport { QuickFilterProps, QuickFilters } from \"../quick-filters\";\nimport { FilterMode, useFilterBar } from \"./useFilterBar\";\n\nimport filterBarCss from \"./FilterBar.css\";\n\nexport type FilterBarVariant =\n | \"custom-filters-only\"\n | \"quick-filters-only\"\n | \"full-filters\";\n\nexport interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {\n QuickFilterProps?: Pick<\n QuickFilterProps,\n \"quickFilterColumns\" | \"onChangeQuickFilterColumns\"\n >;\n /**\n * This is used to apply tailored filters based on column types and other attributes.\n * NOTE: Always make sure that these are passed with proper re-render optimization, otherwise,\n * might end up with infinite state updates.\n */\n columnDescriptors: ColumnDescriptor[];\n defaultFilterMode?: FilterMode;\n defaultFilterState?: FilterState;\n filterMode?: FilterMode;\n filterState?: FilterState;\n onApplyFilter: (filter: DataSourceFilter) => void;\n onChangeFilterMode?: (filterMode: FilterMode) => void;\n onFilterDeleted?: (filter: Filter) => void;\n onFilterRenamed?: (filter: Filter, name: string) => void;\n onFilterStateChanged?: (state: FilterState) => void;\n suggestionProvider?: SuggestionProvider;\n /**\n * TableSchema is used both to populate list of available columns and to\n * provide table in call to Typeahead service\n */\n tableSchema?: TableSchema;\n variant?: FilterBarVariant;\n}\n\nconst classBase = \"vuuFilterBar\";\n\nexport const FilterBar = ({\n QuickFilterProps,\n className: classNameProp,\n columnDescriptors,\n defaultFilterMode,\n defaultFilterState,\n filterMode: filterModeProp,\n filterState,\n onApplyFilter,\n onChangeFilterMode: onChangeFilterModeProp,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n suggestionProvider,\n tableSchema,\n variant = \"custom-filters-only\",\n ...htmlAttributes\n}: FilterBarProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-bar\",\n css: filterBarCss,\n window: targetWindow,\n });\n\n const allowCustomFilters = variant !== \"quick-filters-only\";\n const allowQuickFilters = variant !== \"custom-filters-only\";\n\n const controlledFilterMode: FilterMode | undefined = !allowCustomFilters\n ? \"quick-filter\"\n : !allowQuickFilters\n ? \"custom-filter\"\n : filterModeProp;\n\n const { filterMode, onChangeFilterMode } = useFilterBar({\n defaultFilterMode,\n filterMode: controlledFilterMode,\n onChangeFilterMode: onChangeFilterModeProp,\n });\n\n const className = cx(classBase, classNameProp);\n\n const startAdornment = useMemo(() => {\n if (!allowQuickFilters) {\n return <Icon name=\"filter\" size={16} style={{ top: 4 }} />;\n } else {\n return (\n <ToggleButtonGroup\n data-variant=\"secondary\"\n onChange={onChangeFilterMode}\n value={filterMode}\n >\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"custom-filter\"\n value=\"custom-filter\"\n aria-label=\"Custom filters\"\n tabIndex={-1}\n >\n <Icon name=\"grid\" size={16} />\n </ToggleButton>\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"quick-filter\"\n value=\"quick-filter\"\n aria-label=\"Quick filters\"\n tabIndex={-1}\n >\n <Icon name=\"tune\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n );\n }\n }, [allowQuickFilters, filterMode, onChangeFilterMode]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(className, `${classBase}-${filterMode}-mode`)}\n >\n {variant === \"quick-filters-only\" ? null : (\n <div className={`${classBase}-iconContainer`}>{startAdornment}</div>\n )}\n {filterMode === \"custom-filter\" ? (\n <CustomFilters\n columnDescriptors={columnDescriptors}\n defaultFilterState={defaultFilterState}\n filterState={filterState}\n onApplyFilter={onApplyFilter}\n onFilterDeleted={onFilterDeleted}\n onFilterRenamed={onFilterRenamed}\n onFilterStateChanged={onFilterStateChanged}\n tableSchema={tableSchema}\n />\n ) : (\n <QuickFilters\n {...QuickFilterProps}\n availableColumns={columnDescriptors}\n onApplyFilter={onApplyFilter}\n tableSchema={tableSchema}\n />\n )}\n </div>\n );\n};\n"],"names":["QuickFilterProps","useWindow","useComponentCssInjection","filterBarCss","useFilterBar","useMemo","jsx","Icon","jsxs","ToggleButtonGroup","ToggleButton","CustomFilters","QuickFilters"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var inlineFilteCss = ".vuuInlineFilter {\n --filter-borderColor: var(--salt-separable-secondary-borderColor);\n --filter-color: var(--salt-content-primary-foreground-disabled);\n --filter-padding: 1px 1px 1px 0;\n --
|
|
3
|
+
var inlineFilteCss = ".vuuInlineFilter {\n --filter-borderColor: var(--salt-separable-secondary-borderColor);\n --filter-color: var(--salt-content-primary-foreground-disabled);\n --filter-padding: 1px 1px 1px 0;\n --item-content-height: 22px;\n height: var(--salt-size-base);\n\n .vuuInlineFilterCell:has(input:focus) {\n --filter-borderColor: transparent;\n --item-content-height: 20px;\n\n outline-width: 2px;\n outline-offset: -2px;\n outline-style: dotted;\n outline-color: var(--salt-focused-outlineColor);\n\n /* the padding ensures the outline is not clipped */\n --filter-padding: 0 2px;\n /* prevents shift when we apply the padding */\n --saltInput-paddingLeft: 2px;\n\n .saltInput-input {\n outline: none;\n }\n .saltInput-focused {\n border: none;\n outline: none;\n }\n\n .saltComboBox-focused {\n outline: none;\n }\n }\n\n .vuuInlineFilterCell:focus {\n --filter-borderColor: transparent;\n --item-content-height: 20px;\n /* the padding ensures the outline is not clipped */\n --filter-padding: 0 2px;\n /* prevents shift when we apply the padding */\n --saltInput-paddingLeft: 2px;\n }\n\n .vuuInlineFilterCell {\n --saltInput-minHeight: var(--item-content-height);\n --saltPillInput-minHeight: var(--item-content-height);\n align-items: center;\n display: inline-flex;\n height: 100%;\n padding: var(--filter-padding);\n\n .vuuTypeaheadInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n }\n\n\n .saltInput-primary.vuuInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n min-height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n }\n }\n\n .vuuInlineFilter-virtualColSpan {\n display: inline-block;\n }\n}\n\n.vuuInlineFilter:focus-within {\n --filter-borderColor: var(--salt-separable-primary-borderColor);\n --filter-color: var(--salt-content-primary-foreground);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = inlineFilteCss;
|
|
6
6
|
//# sourceMappingURL=InlineFilter.css.js.map
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var vuuDataReact = require('@vuu-ui/vuu-data-react');
|
|
5
5
|
var vuuTable = require('@vuu-ui/vuu-table');
|
|
6
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
7
6
|
var styles = require('@salt-ds/styles');
|
|
8
7
|
var window = require('@salt-ds/window');
|
|
9
|
-
var react = require('react');
|
|
10
8
|
var cx = require('clsx');
|
|
11
9
|
var InlineFilter$1 = require('./InlineFilter.css.js');
|
|
10
|
+
var useInlineFilter = require('./useInlineFilter.js');
|
|
12
11
|
|
|
13
12
|
const classBase = "vuuInlineFilter";
|
|
14
13
|
const InputProps = {
|
|
@@ -32,44 +31,21 @@ const InlineFilter = ({
|
|
|
32
31
|
css: InlineFilter$1,
|
|
33
32
|
window: targetWindow
|
|
34
33
|
});
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
(evt, value = "") => {
|
|
39
|
-
const fieldName = vuuUtils.getFieldName(evt.target);
|
|
40
|
-
const column = columns.find((c) => c.name === fieldName);
|
|
41
|
-
if (column) {
|
|
42
|
-
if (value === "") {
|
|
43
|
-
if (filterAggregator.removeFilter(column)) {
|
|
44
|
-
onChange(filterAggregator.filter);
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
filterAggregator.addFilter(column, value);
|
|
48
|
-
onChange(filterAggregator.filter);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
[columns, filterAggregator, onChange]
|
|
53
|
-
);
|
|
54
|
-
const handleKeyDown = react.useCallback(
|
|
55
|
-
(evt) => {
|
|
56
|
-
if (evt.key === "Enter") {
|
|
57
|
-
const el = evt.target;
|
|
58
|
-
const inputElement = el.querySelector("input");
|
|
59
|
-
inputElement?.focus();
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
[]
|
|
63
|
-
);
|
|
34
|
+
const { columns, onCommit, onKeyDown, virtualColSpan } = useInlineFilter.useInlineFilter({
|
|
35
|
+
onChange
|
|
36
|
+
});
|
|
64
37
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlAttributes, className: classBase, role: ariaRole, children: [
|
|
65
38
|
/* @__PURE__ */ jsxRuntime.jsx(vuuTable.VirtualColSpan, { width: virtualColSpan }),
|
|
66
39
|
columns.map((column, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
67
40
|
"div",
|
|
68
41
|
{
|
|
69
42
|
"aria-colindex": i + 1,
|
|
70
|
-
className: cx(`${classBase}
|
|
43
|
+
className: cx(`${classBase}Cell`, "vuuTableCell", {
|
|
44
|
+
"vuuTableCell-right": column.align === "right"
|
|
45
|
+
}),
|
|
71
46
|
"data-field": column.name,
|
|
72
|
-
onKeyDown
|
|
47
|
+
onKeyDown,
|
|
48
|
+
role: "cell",
|
|
73
49
|
style: { width: column.width },
|
|
74
50
|
children: vuuDataReact.getDataItemEditControl({
|
|
75
51
|
InputProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineFilter.js","sources":["../../src/inline-filter/InlineFilter.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VirtualColSpan
|
|
1
|
+
{"version":3,"file":"InlineFilter.js","sources":["../../src/inline-filter/InlineFilter.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VirtualColSpan } from \"@vuu-ui/vuu-table\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport inlineFilteCss from \"./InlineFilter.css\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { TableSchemaTable } from \"@vuu-ui/vuu-data-types\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport { BaseRowProps } from \"@vuu-ui/vuu-table-types\";\nimport { useInlineFilter } from \"./useInlineFilter\";\n\nconst classBase = \"vuuInlineFilter\";\n\nexport type FilterValueChangeHandler = (filter: VuuFilter) => void;\nexport interface InlineFilterProps\n extends Partial<BaseRowProps>,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange: FilterValueChangeHandler;\n table: TableSchemaTable;\n}\n\nconst InputProps: Partial<InputProps> = {\n inputProps: {\n placeholder: \"Filter value\",\n },\n variant: \"primary\",\n};\n\nconst TypeaheadProps = {\n highlightFirstSuggestion: false,\n};\n\nexport const InlineFilter = ({\n ariaRole,\n onChange,\n table,\n ...htmlAttributes\n}: InlineFilterProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-inline-filter\",\n css: inlineFilteCss,\n window: targetWindow,\n });\n\n const { columns, onCommit, onKeyDown, virtualColSpan } = useInlineFilter({\n onChange,\n });\n\n return (\n <div {...htmlAttributes} className={classBase} role={ariaRole}>\n <VirtualColSpan width={virtualColSpan} />\n {columns.map((column, i) => (\n <div\n aria-colindex={i + 1}\n className={cx(`${classBase}Cell`, \"vuuTableCell\", {\n \"vuuTableCell-right\": column.align === \"right\",\n })}\n data-field={column.name}\n onKeyDown={onKeyDown}\n key={column.name}\n role=\"cell\"\n style={{ width: column.width }}\n >\n {getDataItemEditControl({\n InputProps,\n TypeaheadProps,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n })}\n </div>\n ))}\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","inlineFilteCss","useInlineFilter","jsx","VirtualColSpan","getDataItemEditControl"],"mappings":";;;;;;;;;;;AAcA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAUlB,MAAM,UAAkC,GAAA;AAAA,EACtC,UAAY,EAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,GACf;AAAA,EACA,OAAS,EAAA,SAAA;AACX,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA;AAAA,EACrB,wBAA0B,EAAA,KAAA;AAC5B,CAAA,CAAA;AAEO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAyB,KAAA;AACvB,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,OAAS,EAAA,QAAA,EAAU,SAAW,EAAA,cAAA,KAAmBC,+BAAgB,CAAA;AAAA,IACvE,QAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,uCACG,KAAK,EAAA,EAAA,GAAG,gBAAgB,SAAW,EAAA,SAAA,EAAW,MAAM,QACnD,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAAC,uBAAA,EAAA,EAAe,OAAO,cAAgB,EAAA,CAAA;AAAA,IACtC,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,CACpB,qBAAAD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,iBAAe,CAAI,GAAA,CAAA;AAAA,QACnB,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,QAAQ,cAAgB,EAAA;AAAA,UAChD,oBAAA,EAAsB,OAAO,KAAU,KAAA,OAAA;AAAA,SACxC,CAAA;AAAA,QACD,cAAY,MAAO,CAAA,IAAA;AAAA,QACnB,SAAA;AAAA,QAEA,IAAK,EAAA,MAAA;AAAA,QACL,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,CAAO,KAAM,EAAA;AAAA,QAE5B,QAAuB,EAAAE,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,SACD,CAAA;AAAA,OAAA;AAAA,MAXI,MAAO,CAAA,IAAA;AAAA,KAaf,CAAA;AAAA,GACH,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuTable = require('@vuu-ui/vuu-table');
|
|
4
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
const useInlineFilter = ({
|
|
8
|
+
onChange
|
|
9
|
+
}) => {
|
|
10
|
+
const filterAggregator = react.useMemo(() => new vuuUtils.FilterAggregator(), []);
|
|
11
|
+
const { columns = [], virtualColSpan = 0 } = vuuTable.useHeaderProps();
|
|
12
|
+
const handleCommit = react.useCallback(
|
|
13
|
+
(evt, value = "") => {
|
|
14
|
+
const fieldName = vuuUtils.getFieldName(evt.target);
|
|
15
|
+
const column = columns.find((c) => c.name === fieldName);
|
|
16
|
+
if (column) {
|
|
17
|
+
if (value === "") {
|
|
18
|
+
if (filterAggregator.removeFilter(column)) {
|
|
19
|
+
onChange(filterAggregator.filter);
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
filterAggregator.addFilter(column, value);
|
|
23
|
+
onChange(filterAggregator.filter);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
[columns, filterAggregator, onChange]
|
|
28
|
+
);
|
|
29
|
+
const { onKeyDown } = vuuTable.useEditableCell();
|
|
30
|
+
return {
|
|
31
|
+
columns,
|
|
32
|
+
onCommit: handleCommit,
|
|
33
|
+
onKeyDown,
|
|
34
|
+
virtualColSpan
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.useInlineFilter = useInlineFilter;
|
|
39
|
+
//# sourceMappingURL=useInlineFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInlineFilter.js","sources":["../../src/inline-filter/useInlineFilter.ts"],"sourcesContent":["import { useEditableCell, useHeaderProps } from \"@vuu-ui/vuu-table\";\nimport {\n CommitHandler,\n FilterAggregator,\n getFieldName,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo } from \"react\";\nimport { FilterValueChangeHandler } from \"./InlineFilter\";\n\nexport const useInlineFilter = ({\n onChange,\n}: {\n onChange: FilterValueChangeHandler;\n}) => {\n const filterAggregator = useMemo(() => new FilterAggregator(), []);\n const { columns = [], virtualColSpan = 0 } = useHeaderProps();\n\n const handleCommit = useCallback<\n CommitHandler<HTMLElement, string | number | undefined>\n >(\n (evt, value = \"\") => {\n const fieldName = getFieldName(evt.target);\n const column = columns.find((c) => c.name === fieldName);\n if (column) {\n if (value === \"\") {\n if (filterAggregator.removeFilter(column)) {\n onChange(filterAggregator.filter);\n }\n } else {\n filterAggregator.addFilter(column, value);\n onChange(filterAggregator.filter);\n }\n }\n },\n [columns, filterAggregator, onChange],\n );\n\n const { onKeyDown } = useEditableCell();\n\n return {\n columns,\n onCommit: handleCommit,\n onKeyDown,\n virtualColSpan,\n };\n};\n"],"names":["useMemo","FilterAggregator","useHeaderProps","useCallback","getFieldName","useEditableCell"],"mappings":";;;;;;AASO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AACF,CAEM,KAAA;AACJ,EAAA,MAAM,mBAAmBA,aAAQ,CAAA,MAAM,IAAIC,yBAAiB,EAAA,EAAG,EAAE,CAAA,CAAA;AACjE,EAAA,MAAM,EAAE,OAAU,GAAA,IAAI,cAAiB,GAAA,CAAA,KAAMC,uBAAe,EAAA,CAAA;AAE5D,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IAGnB,CAAC,GAAK,EAAA,KAAA,GAAQ,EAAO,KAAA;AACnB,MAAM,MAAA,SAAA,GAAYC,qBAAa,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACzC,MAAA,MAAM,SAAS,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,SAAS,CAAA,CAAA;AACvD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,IAAI,UAAU,EAAI,EAAA;AAChB,UAAI,IAAA,gBAAA,CAAiB,YAAa,CAAA,MAAM,CAAG,EAAA;AACzC,YAAA,QAAA,CAAS,iBAAiB,MAAM,CAAA,CAAA;AAAA,WAClC;AAAA,SACK,MAAA;AACL,UAAiB,gBAAA,CAAA,SAAA,CAAU,QAAQ,KAAK,CAAA,CAAA;AACxC,UAAA,QAAA,CAAS,iBAAiB,MAAM,CAAA,CAAA;AAAA,SAClC;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,OAAS,EAAA,gBAAA,EAAkB,QAAQ,CAAA;AAAA,GACtC,CAAA;AAEA,EAAM,MAAA,EAAE,SAAU,EAAA,GAAIC,wBAAgB,EAAA,CAAA;AAEtC,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,SAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var filterBarCss = ".vuuFilterBar {\n --vuu-svg-grid: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6.00004H4.66667V3.33337H3.33333C2.6 3.33337 2 3.93337 2 4.66671V6.00004ZM2 9.33337H4.66667V6.66671H2V9.33337ZM5.33333 9.33337H8V6.66671H5.33333V9.33337ZM8.66667 9.33337H11.3333V6.66671H8.66667V9.33337ZM5.33333 6.00004H8V3.33337H5.33333V6.00004ZM8.66667 3.33337V6.00004H11.3333V3.33337H8.66667ZM12 9.33337H14.6667V6.66671H12V9.33337ZM3.33333 12.6667H4.66667V10H2V11.3334C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3334V10H12V12.6667ZM12 3.33337V6.00004H14.6667V4.66671C14.6667 3.93337 14.0667 3.33337 13.3333 3.33337H12Z\"/></svg>');\n --vuu-svg-tune: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 18C3 18.55 3.45 19 4 19H9V17H4C3.45 17 3 17.45 3 18ZM3 6C3 6.55 3.45 7 4 7H13V5H4C3.45 5 3 5.45 3 6ZM13 20V19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H13V16C13 15.45 12.55 15 12 15C11.45 15 11 15.45 11 16V20C11 20.55 11.45 21 12 21C12.55 21 13 20.55 13 20ZM7 10V11H4C3.45 11 3 11.45 3 12C3 12.55 3.45 13 4 13H7V14C7 14.55 7.45 15 8 15C8.55 15 9 14.55 9 14V10C9 9.45 8.55 9 8 9C7.45 9 7 9.45 7 10ZM21 12C21 11.45 20.55 11 20 11H11V13H20C20.55 13 21 12.55 21 12ZM16 9C16.55 9 17 8.55 17 8V7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H17V4C17 3.45 16.55 3 16 3C15.45 3 15 3.45 15 4V8C15 8.55 15.45 9 16 9Z\" /></svg>');\n --vuuOverflowContainer-minWidth: 0;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(var(--salt-size-base) + var(--salt-spacing-100))\n );\n --vuuFilterEditor-height: var(--filterbar-height);\n --icon-container-height: auto;\n --flexbar-gap: var(--salt-spacing-100);\n --icon-marginTop: 0;\n\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n border-color: var(--salt-container-primary-borderColor);\n border-style: var(--vuuFilterBar-borderStyle, none none solid none);\n border-width: 1px;\n display: inline-flex;\n flex: var(--vuuFilterBar-flex);\n flex-wrap: wrap;\n gap: var(--flexbar-gap);\n grid-template-columns: 70px 1fr 28px;\n grid-auto-rows: 28px 0px;\n height: calc(var(--salt-spacing-100) + var(--filterbar-height));\n overflow: hidden;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar-quick-filter {\n --icon-container-height: 100%;\n --icon-marginTop: 20px;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(2 * var(--salt-size-base))\n );\n align-items: flex-end;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar:has(.vuuFilterEditor) {\n grid-template-rows: 28px 28px;\n height: calc(1px + var(--flexbar-gap) + (2 * var(--filterbar-height)));\n}\n\n.vuuFilterBar-iconContainer {\n height: var(--icon-container-height);\n\n .saltToggleButtonGroup {\n margin-top: var(--icon-marginTop);\n transition: margin-top 0.1s ease-in;\n }\n}\n\n.vuuFilterbar-icon {\n display: inline-block;\n height: 16px;\n width: 16px;\n}\n\n.vuuFilterBar [data-icon=\"grid\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-grid);\n}\n.vuuFilterBar [data-icon=\"tune\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-tune);\n}\n\n.vuuFilterBar [data-icon=\"plus\"] {\n --vuu-icon-size: 16px;\n}\n\n.vuuFilterBar .vuuToolbar {\n flex: 0 1 auto;\n}\n\n.vuuFilterBar-Editor {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--salt-spacing-100);\n}\n\n.vuuCustomFilters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n.vuuCustomFilters-filters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n";
|
|
1
|
+
var filterBarCss = ".vuuFilterBar {\n --vuu-svg-grid: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6.00004H4.66667V3.33337H3.33333C2.6 3.33337 2 3.93337 2 4.66671V6.00004ZM2 9.33337H4.66667V6.66671H2V9.33337ZM5.33333 9.33337H8V6.66671H5.33333V9.33337ZM8.66667 9.33337H11.3333V6.66671H8.66667V9.33337ZM5.33333 6.00004H8V3.33337H5.33333V6.00004ZM8.66667 3.33337V6.00004H11.3333V3.33337H8.66667ZM12 9.33337H14.6667V6.66671H12V9.33337ZM3.33333 12.6667H4.66667V10H2V11.3334C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3334V10H12V12.6667ZM12 3.33337V6.00004H14.6667V4.66671C14.6667 3.93337 14.0667 3.33337 13.3333 3.33337H12Z\"/></svg>');\n --vuu-svg-tune: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 18C3 18.55 3.45 19 4 19H9V17H4C3.45 17 3 17.45 3 18ZM3 6C3 6.55 3.45 7 4 7H13V5H4C3.45 5 3 5.45 3 6ZM13 20V19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H13V16C13 15.45 12.55 15 12 15C11.45 15 11 15.45 11 16V20C11 20.55 11.45 21 12 21C12.55 21 13 20.55 13 20ZM7 10V11H4C3.45 11 3 11.45 3 12C3 12.55 3.45 13 4 13H7V14C7 14.55 7.45 15 8 15C8.55 15 9 14.55 9 14V10C9 9.45 8.55 9 8 9C7.45 9 7 9.45 7 10ZM21 12C21 11.45 20.55 11 20 11H11V13H20C20.55 13 21 12.55 21 12ZM16 9C16.55 9 17 8.55 17 8V7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H17V4C17 3.45 16.55 3 16 3C15.45 3 15 3.45 15 4V8C15 8.55 15.45 9 16 9Z\" /></svg>');\n --vuuOverflowContainer-minWidth: 0;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(var(--salt-size-base) + var(--salt-spacing-100))\n );\n --vuuFilterEditor-height: var(--filterbar-height);\n --icon-container-height: auto;\n --flexbar-gap: var(--salt-spacing-100);\n --icon-marginTop: 0;\n\n align-items: center;\n background-color: var(--salt-container-secondary-background);\n border-color: var(--salt-container-primary-borderColor);\n border-style: var(--vuuFilterBar-borderStyle, none none solid none);\n border-width: 1px;\n display: inline-flex;\n flex: var(--vuuFilterBar-flex);\n flex-wrap: wrap;\n gap: var(--flexbar-gap);\n grid-template-columns: 70px 1fr 28px;\n grid-auto-rows: 28px 0px;\n height: calc(var(--salt-spacing-100) + var(--filterbar-height));\n overflow: hidden;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar-quick-filter-mode {\n --icon-container-height: 100%;\n --icon-marginTop: 20px;\n --filterbar-height: var(\n --vuuFilterBar-height,\n calc(2 * var(--salt-size-base))\n );\n align-items: flex-end;\n padding: var(--salt-spacing-100) var(--salt-spacing-200);\n}\n\n.vuuFilterBar:has(.vuuFilterEditor) {\n grid-template-rows: 28px 28px;\n height: calc(1px + var(--flexbar-gap) + (2 * var(--filterbar-height)));\n}\n\n.vuuFilterBar-iconContainer {\n height: var(--icon-container-height);\n\n .saltToggleButtonGroup {\n margin-top: var(--icon-marginTop);\n transition: margin-top 0.1s ease-in;\n }\n}\n\n.vuuFilterbar-icon {\n display: inline-block;\n height: 16px;\n width: 16px;\n}\n\n.vuuFilterBar [data-icon=\"grid\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-grid);\n}\n.vuuFilterBar [data-icon=\"tune\"] {\n --vuu-icon-size: 16px;\n --vuu-icon-svg: var(--vuu-svg-tune);\n}\n\n.vuuFilterBar [data-icon=\"plus\"] {\n --vuu-icon-size: 16px;\n}\n\n.vuuFilterBar .vuuToolbar {\n flex: 0 1 auto;\n}\n\n.vuuFilterBar-Editor {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--salt-spacing-100);\n}\n\n.vuuCustomFilters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n.vuuCustomFilters-filters {\n display: flex;\n gap: var(--salt-spacing-100);\n}\n";
|
|
2
2
|
|
|
3
3
|
export { filterBarCss as default };
|
|
4
4
|
//# sourceMappingURL=FilterBar.css.js.map
|
|
@@ -26,7 +26,7 @@ const FilterBar = ({
|
|
|
26
26
|
onFilterStateChanged,
|
|
27
27
|
suggestionProvider,
|
|
28
28
|
tableSchema,
|
|
29
|
-
variant = "custom-filters",
|
|
29
|
+
variant = "custom-filters-only",
|
|
30
30
|
...htmlAttributes
|
|
31
31
|
}) => {
|
|
32
32
|
const targetWindow = useWindow();
|
|
@@ -35,8 +35,8 @@ const FilterBar = ({
|
|
|
35
35
|
css: filterBarCss,
|
|
36
36
|
window: targetWindow
|
|
37
37
|
});
|
|
38
|
-
const allowCustomFilters = variant !== "quick-filters";
|
|
39
|
-
const allowQuickFilters = variant !== "custom-filters";
|
|
38
|
+
const allowCustomFilters = variant !== "quick-filters-only";
|
|
39
|
+
const allowQuickFilters = variant !== "custom-filters-only";
|
|
40
40
|
const controlledFilterMode = !allowCustomFilters ? "quick-filter" : !allowQuickFilters ? "custom-filter" : filterModeProp;
|
|
41
41
|
const { filterMode, onChangeFilterMode } = useFilterBar({
|
|
42
42
|
defaultFilterMode,
|
|
@@ -86,13 +86,9 @@ const FilterBar = ({
|
|
|
86
86
|
"div",
|
|
87
87
|
{
|
|
88
88
|
...htmlAttributes,
|
|
89
|
-
className: cx(
|
|
90
|
-
className,
|
|
91
|
-
`${classBase}-${variant}`,
|
|
92
|
-
`${classBase}-${filterMode}`
|
|
93
|
-
),
|
|
89
|
+
className: cx(className, `${classBase}-${filterMode}-mode`),
|
|
94
90
|
children: [
|
|
95
|
-
variant === "quick-filters" ? null : /* @__PURE__ */ jsx("div", { className: `${classBase}-iconContainer`, children: startAdornment }),
|
|
91
|
+
variant === "quick-filters-only" ? null : /* @__PURE__ */ jsx("div", { className: `${classBase}-iconContainer`, children: startAdornment }),
|
|
96
92
|
filterMode === "custom-filter" ? /* @__PURE__ */ jsx(
|
|
97
93
|
CustomFilters,
|
|
98
94
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBar.js","sources":["../../src/filter-bar/FilterBar.tsx"],"sourcesContent":["import {\n DataSourceFilter,\n SuggestionProvider,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { Filter, FilterState } from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { CustomFilters } from \"../custom-filters\";\nimport { QuickFilterProps, QuickFilters } from \"../quick-filters\";\nimport { FilterMode, useFilterBar } from \"./useFilterBar\";\n\nimport filterBarCss from \"./FilterBar.css\";\n\nexport type FilterBarVariant =\n | \"custom-filters\"\n | \"quick-filters\"\n | \"full-filters\";\n\nexport interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {\n QuickFilterProps?: Pick<\n QuickFilterProps,\n \"quickFilterColumns\" | \"onChangeQuickFilterColumns\"\n >;\n /**\n * This is used to apply tailored filters based on column types and other attributes.\n * NOTE: Always make sure that these are passed with proper re-render optimization, otherwise,\n * might end up with infinite state updates.\n */\n columnDescriptors: ColumnDescriptor[];\n defaultFilterMode?: FilterMode;\n defaultFilterState?: FilterState;\n filterMode?: FilterMode;\n filterState?: FilterState;\n onApplyFilter: (filter: DataSourceFilter) => void;\n onChangeFilterMode?: (filterMode: FilterMode) => void;\n onFilterDeleted?: (filter: Filter) => void;\n onFilterRenamed?: (filter: Filter, name: string) => void;\n onFilterStateChanged?: (state: FilterState) => void;\n suggestionProvider?: SuggestionProvider;\n /**\n * TableSchema is used both to populate list of available columns and to\n * provide table in call to Typeahead service\n */\n tableSchema?: TableSchema;\n variant?: FilterBarVariant;\n}\n\nconst classBase = \"vuuFilterBar\";\n\nexport const FilterBar = ({\n QuickFilterProps,\n className: classNameProp,\n columnDescriptors,\n defaultFilterMode,\n defaultFilterState,\n filterMode: filterModeProp,\n filterState,\n onApplyFilter,\n onChangeFilterMode: onChangeFilterModeProp,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n suggestionProvider,\n tableSchema,\n variant = \"custom-filters\",\n ...htmlAttributes\n}: FilterBarProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-bar\",\n css: filterBarCss,\n window: targetWindow,\n });\n\n const allowCustomFilters = variant !== \"quick-filters\";\n const allowQuickFilters = variant !== \"custom-filters\";\n\n const controlledFilterMode: FilterMode | undefined = !allowCustomFilters\n ? \"quick-filter\"\n : !allowQuickFilters\n ? \"custom-filter\"\n : filterModeProp;\n\n const { filterMode, onChangeFilterMode } = useFilterBar({\n defaultFilterMode,\n filterMode: controlledFilterMode,\n onChangeFilterMode: onChangeFilterModeProp,\n });\n\n const className = cx(classBase, classNameProp);\n\n const startAdornment = useMemo(() => {\n if (!allowQuickFilters) {\n return <Icon name=\"filter\" size={16} style={{ top: 4 }} />;\n } else {\n return (\n <ToggleButtonGroup\n data-variant=\"secondary\"\n onChange={onChangeFilterMode}\n value={filterMode}\n >\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"custom-filter\"\n value=\"custom-filter\"\n aria-label=\"Custom filters\"\n tabIndex={-1}\n >\n <Icon name=\"grid\" size={16} />\n </ToggleButton>\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"quick-filter\"\n value=\"quick-filter\"\n aria-label=\"Quick filters\"\n tabIndex={-1}\n >\n <Icon name=\"tune\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n );\n }\n }, [allowQuickFilters, filterMode, onChangeFilterMode]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(
|
|
1
|
+
{"version":3,"file":"FilterBar.js","sources":["../../src/filter-bar/FilterBar.tsx"],"sourcesContent":["import {\n DataSourceFilter,\n SuggestionProvider,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { Filter, FilterState } from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { CustomFilters } from \"../custom-filters\";\nimport { QuickFilterProps, QuickFilters } from \"../quick-filters\";\nimport { FilterMode, useFilterBar } from \"./useFilterBar\";\n\nimport filterBarCss from \"./FilterBar.css\";\n\nexport type FilterBarVariant =\n | \"custom-filters-only\"\n | \"quick-filters-only\"\n | \"full-filters\";\n\nexport interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {\n QuickFilterProps?: Pick<\n QuickFilterProps,\n \"quickFilterColumns\" | \"onChangeQuickFilterColumns\"\n >;\n /**\n * This is used to apply tailored filters based on column types and other attributes.\n * NOTE: Always make sure that these are passed with proper re-render optimization, otherwise,\n * might end up with infinite state updates.\n */\n columnDescriptors: ColumnDescriptor[];\n defaultFilterMode?: FilterMode;\n defaultFilterState?: FilterState;\n filterMode?: FilterMode;\n filterState?: FilterState;\n onApplyFilter: (filter: DataSourceFilter) => void;\n onChangeFilterMode?: (filterMode: FilterMode) => void;\n onFilterDeleted?: (filter: Filter) => void;\n onFilterRenamed?: (filter: Filter, name: string) => void;\n onFilterStateChanged?: (state: FilterState) => void;\n suggestionProvider?: SuggestionProvider;\n /**\n * TableSchema is used both to populate list of available columns and to\n * provide table in call to Typeahead service\n */\n tableSchema?: TableSchema;\n variant?: FilterBarVariant;\n}\n\nconst classBase = \"vuuFilterBar\";\n\nexport const FilterBar = ({\n QuickFilterProps,\n className: classNameProp,\n columnDescriptors,\n defaultFilterMode,\n defaultFilterState,\n filterMode: filterModeProp,\n filterState,\n onApplyFilter,\n onChangeFilterMode: onChangeFilterModeProp,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n suggestionProvider,\n tableSchema,\n variant = \"custom-filters-only\",\n ...htmlAttributes\n}: FilterBarProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-bar\",\n css: filterBarCss,\n window: targetWindow,\n });\n\n const allowCustomFilters = variant !== \"quick-filters-only\";\n const allowQuickFilters = variant !== \"custom-filters-only\";\n\n const controlledFilterMode: FilterMode | undefined = !allowCustomFilters\n ? \"quick-filter\"\n : !allowQuickFilters\n ? \"custom-filter\"\n : filterModeProp;\n\n const { filterMode, onChangeFilterMode } = useFilterBar({\n defaultFilterMode,\n filterMode: controlledFilterMode,\n onChangeFilterMode: onChangeFilterModeProp,\n });\n\n const className = cx(classBase, classNameProp);\n\n const startAdornment = useMemo(() => {\n if (!allowQuickFilters) {\n return <Icon name=\"filter\" size={16} style={{ top: 4 }} />;\n } else {\n return (\n <ToggleButtonGroup\n data-variant=\"secondary\"\n onChange={onChangeFilterMode}\n value={filterMode}\n >\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"custom-filter\"\n value=\"custom-filter\"\n aria-label=\"Custom filters\"\n tabIndex={-1}\n >\n <Icon name=\"grid\" size={16} />\n </ToggleButton>\n <ToggleButton\n className=\"vuuIconToggleButton\"\n key=\"quick-filter\"\n value=\"quick-filter\"\n aria-label=\"Quick filters\"\n tabIndex={-1}\n >\n <Icon name=\"tune\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n );\n }\n }, [allowQuickFilters, filterMode, onChangeFilterMode]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(className, `${classBase}-${filterMode}-mode`)}\n >\n {variant === \"quick-filters-only\" ? null : (\n <div className={`${classBase}-iconContainer`}>{startAdornment}</div>\n )}\n {filterMode === \"custom-filter\" ? (\n <CustomFilters\n columnDescriptors={columnDescriptors}\n defaultFilterState={defaultFilterState}\n filterState={filterState}\n onApplyFilter={onApplyFilter}\n onFilterDeleted={onFilterDeleted}\n onFilterRenamed={onFilterRenamed}\n onFilterStateChanged={onFilterStateChanged}\n tableSchema={tableSchema}\n />\n ) : (\n <QuickFilters\n {...QuickFilterProps}\n availableColumns={columnDescriptors}\n onApplyFilter={onApplyFilter}\n tableSchema={tableSchema}\n />\n )}\n </div>\n );\n};\n"],"names":["QuickFilterProps"],"mappings":";;;;;;;;;;;;AAqDA,MAAM,SAAY,GAAA,cAAA,CAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,gBAAAA,EAAAA,iBAAAA;AAAA,EACA,SAAW,EAAA,aAAA;AAAA,EACX,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAY,EAAA,cAAA;AAAA,EACZ,WAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAoB,EAAA,sBAAA;AAAA,EACpB,eAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAU,GAAA,qBAAA;AAAA,EACV,GAAG,cAAA;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,qBAAqB,OAAY,KAAA,oBAAA,CAAA;AACvC,EAAA,MAAM,oBAAoB,OAAY,KAAA,qBAAA,CAAA;AAEtC,EAAA,MAAM,uBAA+C,CAAC,kBAAA,GAClD,cACA,GAAA,CAAC,oBACC,eACA,GAAA,cAAA,CAAA;AAEN,EAAA,MAAM,EAAE,UAAA,EAAY,kBAAmB,EAAA,GAAI,YAAa,CAAA;AAAA,IACtD,iBAAA;AAAA,IACA,UAAY,EAAA,oBAAA;AAAA,IACZ,kBAAoB,EAAA,sBAAA;AAAA,GACrB,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAE7C,EAAM,MAAA,cAAA,GAAiB,QAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,MAAO,uBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAK,QAAS,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,EAAE,GAAK,EAAA,CAAA,EAAK,EAAA,CAAA,CAAA;AAAA,KACnD,MAAA;AACL,MACE,uBAAA,IAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,cAAa,EAAA,WAAA;AAAA,UACb,QAAU,EAAA,kBAAA;AAAA,UACV,KAAO,EAAA,UAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAU,EAAA,qBAAA;AAAA,gBAEV,KAAM,EAAA,eAAA;AAAA,gBACN,YAAW,EAAA,gBAAA;AAAA,gBACX,QAAU,EAAA,CAAA,CAAA;AAAA,gBAEV,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,MAAA,EAAO,MAAM,EAAI,EAAA,CAAA;AAAA,eAAA;AAAA,cALxB,eAAA;AAAA,aAMN;AAAA,4BACA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAU,EAAA,qBAAA;AAAA,gBAEV,KAAM,EAAA,cAAA;AAAA,gBACN,YAAW,EAAA,eAAA;AAAA,gBACX,QAAU,EAAA,CAAA,CAAA;AAAA,gBAEV,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,MAAA,EAAO,MAAM,EAAI,EAAA,CAAA;AAAA,eAAA;AAAA,cALxB,cAAA;AAAA,aAMN;AAAA,WAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAEJ;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,kBAAkB,CAAC,CAAA,CAAA;AAEtD,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,WAAW,EAAG,CAAA,SAAA,EAAW,GAAG,SAAS,CAAA,CAAA,EAAI,UAAU,CAAO,KAAA,CAAA,CAAA;AAAA,MAEzD,QAAA,EAAA;AAAA,QAAY,OAAA,KAAA,oBAAA,GAAuB,uBACjC,GAAA,CAAA,KAAA,EAAA,EAAI,WAAW,CAAG,EAAA,SAAS,kBAAmB,QAAe,EAAA,cAAA,EAAA,CAAA;AAAA,QAE/D,eAAe,eACd,mBAAA,GAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,iBAAA;AAAA,YACA,kBAAA;AAAA,YACA,WAAA;AAAA,YACA,aAAA;AAAA,YACA,eAAA;AAAA,YACA,eAAA;AAAA,YACA,oBAAA;AAAA,YACA,WAAA;AAAA,WAAA;AAAA,SAGF,mBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACE,GAAGA,iBAAAA;AAAA,YACJ,gBAAkB,EAAA,iBAAA;AAAA,YAClB,aAAA;AAAA,YACA,WAAA;AAAA,WAAA;AAAA,SACF;AAAA,OAAA;AAAA,KAAA;AAAA,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var inlineFilteCss = ".vuuInlineFilter {\n --filter-borderColor: var(--salt-separable-secondary-borderColor);\n --filter-color: var(--salt-content-primary-foreground-disabled);\n --filter-padding: 1px 1px 1px 0;\n --
|
|
1
|
+
var inlineFilteCss = ".vuuInlineFilter {\n --filter-borderColor: var(--salt-separable-secondary-borderColor);\n --filter-color: var(--salt-content-primary-foreground-disabled);\n --filter-padding: 1px 1px 1px 0;\n --item-content-height: 22px;\n height: var(--salt-size-base);\n\n .vuuInlineFilterCell:has(input:focus) {\n --filter-borderColor: transparent;\n --item-content-height: 20px;\n\n outline-width: 2px;\n outline-offset: -2px;\n outline-style: dotted;\n outline-color: var(--salt-focused-outlineColor);\n\n /* the padding ensures the outline is not clipped */\n --filter-padding: 0 2px;\n /* prevents shift when we apply the padding */\n --saltInput-paddingLeft: 2px;\n\n .saltInput-input {\n outline: none;\n }\n .saltInput-focused {\n border: none;\n outline: none;\n }\n\n .saltComboBox-focused {\n outline: none;\n }\n }\n\n .vuuInlineFilterCell:focus {\n --filter-borderColor: transparent;\n --item-content-height: 20px;\n /* the padding ensures the outline is not clipped */\n --filter-padding: 0 2px;\n /* prevents shift when we apply the padding */\n --saltInput-paddingLeft: 2px;\n }\n\n .vuuInlineFilterCell {\n --saltInput-minHeight: var(--item-content-height);\n --saltPillInput-minHeight: var(--item-content-height);\n align-items: center;\n display: inline-flex;\n height: 100%;\n padding: var(--filter-padding);\n\n .vuuTypeaheadInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n }\n\n\n .saltInput-primary.vuuInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n min-height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n }\n }\n\n .vuuInlineFilter-virtualColSpan {\n display: inline-block;\n }\n}\n\n.vuuInlineFilter:focus-within {\n --filter-borderColor: var(--salt-separable-primary-borderColor);\n --filter-color: var(--salt-content-primary-foreground);\n}\n";
|
|
2
2
|
|
|
3
3
|
export { inlineFilteCss as default };
|
|
4
4
|
//# sourceMappingURL=InlineFilter.css.js.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { getDataItemEditControl } from '@vuu-ui/vuu-data-react';
|
|
3
|
-
import {
|
|
4
|
-
import { FilterAggregator, getFieldName } from '@vuu-ui/vuu-utils';
|
|
3
|
+
import { VirtualColSpan } from '@vuu-ui/vuu-table';
|
|
5
4
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
6
5
|
import { useWindow } from '@salt-ds/window';
|
|
7
|
-
import { useMemo, useCallback } from 'react';
|
|
8
6
|
import cx from 'clsx';
|
|
9
7
|
import inlineFilteCss from './InlineFilter.css.js';
|
|
8
|
+
import { useInlineFilter } from './useInlineFilter.js';
|
|
10
9
|
|
|
11
10
|
const classBase = "vuuInlineFilter";
|
|
12
11
|
const InputProps = {
|
|
@@ -30,44 +29,21 @@ const InlineFilter = ({
|
|
|
30
29
|
css: inlineFilteCss,
|
|
31
30
|
window: targetWindow
|
|
32
31
|
});
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
(evt, value = "") => {
|
|
37
|
-
const fieldName = getFieldName(evt.target);
|
|
38
|
-
const column = columns.find((c) => c.name === fieldName);
|
|
39
|
-
if (column) {
|
|
40
|
-
if (value === "") {
|
|
41
|
-
if (filterAggregator.removeFilter(column)) {
|
|
42
|
-
onChange(filterAggregator.filter);
|
|
43
|
-
}
|
|
44
|
-
} else {
|
|
45
|
-
filterAggregator.addFilter(column, value);
|
|
46
|
-
onChange(filterAggregator.filter);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
[columns, filterAggregator, onChange]
|
|
51
|
-
);
|
|
52
|
-
const handleKeyDown = useCallback(
|
|
53
|
-
(evt) => {
|
|
54
|
-
if (evt.key === "Enter") {
|
|
55
|
-
const el = evt.target;
|
|
56
|
-
const inputElement = el.querySelector("input");
|
|
57
|
-
inputElement?.focus();
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
[]
|
|
61
|
-
);
|
|
32
|
+
const { columns, onCommit, onKeyDown, virtualColSpan } = useInlineFilter({
|
|
33
|
+
onChange
|
|
34
|
+
});
|
|
62
35
|
return /* @__PURE__ */ jsxs("div", { ...htmlAttributes, className: classBase, role: ariaRole, children: [
|
|
63
36
|
/* @__PURE__ */ jsx(VirtualColSpan, { width: virtualColSpan }),
|
|
64
37
|
columns.map((column, i) => /* @__PURE__ */ jsx(
|
|
65
38
|
"div",
|
|
66
39
|
{
|
|
67
40
|
"aria-colindex": i + 1,
|
|
68
|
-
className: cx(`${classBase}
|
|
41
|
+
className: cx(`${classBase}Cell`, "vuuTableCell", {
|
|
42
|
+
"vuuTableCell-right": column.align === "right"
|
|
43
|
+
}),
|
|
69
44
|
"data-field": column.name,
|
|
70
|
-
onKeyDown
|
|
45
|
+
onKeyDown,
|
|
46
|
+
role: "cell",
|
|
71
47
|
style: { width: column.width },
|
|
72
48
|
children: getDataItemEditControl({
|
|
73
49
|
InputProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineFilter.js","sources":["../../src/inline-filter/InlineFilter.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VirtualColSpan
|
|
1
|
+
{"version":3,"file":"InlineFilter.js","sources":["../../src/inline-filter/InlineFilter.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VirtualColSpan } from \"@vuu-ui/vuu-table\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport inlineFilteCss from \"./InlineFilter.css\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { TableSchemaTable } from \"@vuu-ui/vuu-data-types\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport { BaseRowProps } from \"@vuu-ui/vuu-table-types\";\nimport { useInlineFilter } from \"./useInlineFilter\";\n\nconst classBase = \"vuuInlineFilter\";\n\nexport type FilterValueChangeHandler = (filter: VuuFilter) => void;\nexport interface InlineFilterProps\n extends Partial<BaseRowProps>,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange: FilterValueChangeHandler;\n table: TableSchemaTable;\n}\n\nconst InputProps: Partial<InputProps> = {\n inputProps: {\n placeholder: \"Filter value\",\n },\n variant: \"primary\",\n};\n\nconst TypeaheadProps = {\n highlightFirstSuggestion: false,\n};\n\nexport const InlineFilter = ({\n ariaRole,\n onChange,\n table,\n ...htmlAttributes\n}: InlineFilterProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-inline-filter\",\n css: inlineFilteCss,\n window: targetWindow,\n });\n\n const { columns, onCommit, onKeyDown, virtualColSpan } = useInlineFilter({\n onChange,\n });\n\n return (\n <div {...htmlAttributes} className={classBase} role={ariaRole}>\n <VirtualColSpan width={virtualColSpan} />\n {columns.map((column, i) => (\n <div\n aria-colindex={i + 1}\n className={cx(`${classBase}Cell`, \"vuuTableCell\", {\n \"vuuTableCell-right\": column.align === \"right\",\n })}\n data-field={column.name}\n onKeyDown={onKeyDown}\n key={column.name}\n role=\"cell\"\n style={{ width: column.width }}\n >\n {getDataItemEditControl({\n InputProps,\n TypeaheadProps,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n })}\n </div>\n ))}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAcA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAUlB,MAAM,UAAkC,GAAA;AAAA,EACtC,UAAY,EAAA;AAAA,IACV,WAAa,EAAA,cAAA;AAAA,GACf;AAAA,EACA,OAAS,EAAA,SAAA;AACX,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA;AAAA,EACrB,wBAA0B,EAAA,KAAA;AAC5B,CAAA,CAAA;AAEO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAyB,KAAA;AACvB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,OAAS,EAAA,QAAA,EAAU,SAAW,EAAA,cAAA,KAAmB,eAAgB,CAAA;AAAA,IACvE,QAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,4BACG,KAAK,EAAA,EAAA,GAAG,gBAAgB,SAAW,EAAA,SAAA,EAAW,MAAM,QACnD,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,cAAA,EAAA,EAAe,OAAO,cAAgB,EAAA,CAAA;AAAA,IACtC,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,CACpB,qBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,iBAAe,CAAI,GAAA,CAAA;AAAA,QACnB,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,QAAQ,cAAgB,EAAA;AAAA,UAChD,oBAAA,EAAsB,OAAO,KAAU,KAAA,OAAA;AAAA,SACxC,CAAA;AAAA,QACD,cAAY,MAAO,CAAA,IAAA;AAAA,QACnB,SAAA;AAAA,QAEA,IAAK,EAAA,MAAA;AAAA,QACL,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,CAAO,KAAM,EAAA;AAAA,QAE5B,QAAuB,EAAA,sBAAA,CAAA;AAAA,UACtB,UAAA;AAAA,UACA,cAAA;AAAA,UACA,iBAAmB,EAAA,IAAA;AAAA,UACnB,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAA;AAAA,UACA,KAAA;AAAA,SACD,CAAA;AAAA,OAAA;AAAA,MAXI,MAAO,CAAA,IAAA;AAAA,KAaf,CAAA;AAAA,GACH,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useHeaderProps, useEditableCell } from '@vuu-ui/vuu-table';
|
|
2
|
+
import { FilterAggregator, getFieldName } from '@vuu-ui/vuu-utils';
|
|
3
|
+
import { useMemo, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
const useInlineFilter = ({
|
|
6
|
+
onChange
|
|
7
|
+
}) => {
|
|
8
|
+
const filterAggregator = useMemo(() => new FilterAggregator(), []);
|
|
9
|
+
const { columns = [], virtualColSpan = 0 } = useHeaderProps();
|
|
10
|
+
const handleCommit = useCallback(
|
|
11
|
+
(evt, value = "") => {
|
|
12
|
+
const fieldName = getFieldName(evt.target);
|
|
13
|
+
const column = columns.find((c) => c.name === fieldName);
|
|
14
|
+
if (column) {
|
|
15
|
+
if (value === "") {
|
|
16
|
+
if (filterAggregator.removeFilter(column)) {
|
|
17
|
+
onChange(filterAggregator.filter);
|
|
18
|
+
}
|
|
19
|
+
} else {
|
|
20
|
+
filterAggregator.addFilter(column, value);
|
|
21
|
+
onChange(filterAggregator.filter);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
[columns, filterAggregator, onChange]
|
|
26
|
+
);
|
|
27
|
+
const { onKeyDown } = useEditableCell();
|
|
28
|
+
return {
|
|
29
|
+
columns,
|
|
30
|
+
onCommit: handleCommit,
|
|
31
|
+
onKeyDown,
|
|
32
|
+
virtualColSpan
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { useInlineFilter };
|
|
37
|
+
//# sourceMappingURL=useInlineFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInlineFilter.js","sources":["../../src/inline-filter/useInlineFilter.ts"],"sourcesContent":["import { useEditableCell, useHeaderProps } from \"@vuu-ui/vuu-table\";\nimport {\n CommitHandler,\n FilterAggregator,\n getFieldName,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo } from \"react\";\nimport { FilterValueChangeHandler } from \"./InlineFilter\";\n\nexport const useInlineFilter = ({\n onChange,\n}: {\n onChange: FilterValueChangeHandler;\n}) => {\n const filterAggregator = useMemo(() => new FilterAggregator(), []);\n const { columns = [], virtualColSpan = 0 } = useHeaderProps();\n\n const handleCommit = useCallback<\n CommitHandler<HTMLElement, string | number | undefined>\n >(\n (evt, value = \"\") => {\n const fieldName = getFieldName(evt.target);\n const column = columns.find((c) => c.name === fieldName);\n if (column) {\n if (value === \"\") {\n if (filterAggregator.removeFilter(column)) {\n onChange(filterAggregator.filter);\n }\n } else {\n filterAggregator.addFilter(column, value);\n onChange(filterAggregator.filter);\n }\n }\n },\n [columns, filterAggregator, onChange],\n );\n\n const { onKeyDown } = useEditableCell();\n\n return {\n columns,\n onCommit: handleCommit,\n onKeyDown,\n virtualColSpan,\n };\n};\n"],"names":[],"mappings":";;;;AASO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AACF,CAEM,KAAA;AACJ,EAAA,MAAM,mBAAmB,OAAQ,CAAA,MAAM,IAAI,gBAAiB,EAAA,EAAG,EAAE,CAAA,CAAA;AACjE,EAAA,MAAM,EAAE,OAAU,GAAA,IAAI,cAAiB,GAAA,CAAA,KAAM,cAAe,EAAA,CAAA;AAE5D,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IAGnB,CAAC,GAAK,EAAA,KAAA,GAAQ,EAAO,KAAA;AACnB,MAAM,MAAA,SAAA,GAAY,YAAa,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACzC,MAAA,MAAM,SAAS,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,SAAS,CAAA,CAAA;AACvD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,IAAI,UAAU,EAAI,EAAA;AAChB,UAAI,IAAA,gBAAA,CAAiB,YAAa,CAAA,MAAM,CAAG,EAAA;AACzC,YAAA,QAAA,CAAS,iBAAiB,MAAM,CAAA,CAAA;AAAA,WAClC;AAAA,SACK,MAAA;AACL,UAAiB,gBAAA,CAAA,SAAA,CAAU,QAAQ,KAAK,CAAA,CAAA;AACxC,UAAA,QAAA,CAAS,iBAAiB,MAAM,CAAA,CAAA;AAAA,SAClC;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,OAAS,EAAA,gBAAA,EAAkB,QAAQ,CAAA;AAAA,GACtC,CAAA;AAEA,EAAM,MAAA,EAAE,SAAU,EAAA,GAAI,eAAgB,EAAA,CAAA;AAEtC,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,SAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.9.
|
|
2
|
+
"version": "0.9.2",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.9.
|
|
8
|
-
"@vuu-ui/vuu-protocol-types": "0.9.
|
|
9
|
-
"@vuu-ui/vuu-table-types": "0.9.
|
|
10
|
-
"@vuu-ui/vuu-filter-types": "0.9.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.9.2",
|
|
8
|
+
"@vuu-ui/vuu-protocol-types": "0.9.2",
|
|
9
|
+
"@vuu-ui/vuu-table-types": "0.9.2",
|
|
10
|
+
"@vuu-ui/vuu-filter-types": "0.9.2",
|
|
11
11
|
"@types/uuid": "^9.0.2"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@vuu-ui/vuu-data-react": "0.9.
|
|
15
|
-
"@vuu-ui/vuu-filter-parser": "0.9.
|
|
16
|
-
"@vuu-ui/vuu-popups": "0.9.
|
|
17
|
-
"@vuu-ui/vuu-ui-controls": "0.9.
|
|
18
|
-
"@vuu-ui/vuu-table": "0.9.
|
|
19
|
-
"@vuu-ui/vuu-utils": "0.9.
|
|
14
|
+
"@vuu-ui/vuu-data-react": "0.9.2",
|
|
15
|
+
"@vuu-ui/vuu-filter-parser": "0.9.2",
|
|
16
|
+
"@vuu-ui/vuu-popups": "0.9.2",
|
|
17
|
+
"@vuu-ui/vuu-ui-controls": "0.9.2",
|
|
18
|
+
"@vuu-ui/vuu-table": "0.9.2",
|
|
19
|
+
"@vuu-ui/vuu-utils": "0.9.2",
|
|
20
20
|
"@salt-ds/core": "1.34.0",
|
|
21
21
|
"@salt-ds/styles": "0.2.1",
|
|
22
22
|
"@salt-ds/window": "0.1.1",
|
|
@@ -4,7 +4,7 @@ import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
|
4
4
|
import { HTMLAttributes } from "react";
|
|
5
5
|
import { QuickFilterProps } from "../quick-filters";
|
|
6
6
|
import { FilterMode } from "./useFilterBar";
|
|
7
|
-
export type FilterBarVariant = "custom-filters" | "quick-filters" | "full-filters";
|
|
7
|
+
export type FilterBarVariant = "custom-filters-only" | "quick-filters-only" | "full-filters";
|
|
8
8
|
export interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
9
|
QuickFilterProps?: Pick<QuickFilterProps, "quickFilterColumns" | "onChangeQuickFilterColumns">;
|
|
10
10
|
/**
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CommitHandler } from "@vuu-ui/vuu-utils";
|
|
3
|
+
import { FilterValueChangeHandler } from "./InlineFilter";
|
|
4
|
+
export declare const useInlineFilter: ({ onChange, }: {
|
|
5
|
+
onChange: FilterValueChangeHandler;
|
|
6
|
+
}) => {
|
|
7
|
+
columns: import("@vuu-ui/vuu-table-types").RuntimeColumnDescriptor[];
|
|
8
|
+
onCommit: CommitHandler<HTMLElement, string | number | undefined>;
|
|
9
|
+
onKeyDown: import("react").KeyboardEventHandler<HTMLDivElement>;
|
|
10
|
+
virtualColSpan: number;
|
|
11
|
+
};
|