thread-ui 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/data-display/data-display-controls/data-display-controls.d.ts +2 -0
- package/dist/components/data-display/data-display-controls/data-display-controls.js +48 -0
- package/dist/components/data-display/data-display-controls/data-display-controls.js.map +1 -0
- package/dist/components/data-display/data-display-controls/data-display-controls.types.d.ts +19 -0
- package/dist/components/data-display/data-display-controls/data-display-controls.types.js +2 -0
- package/dist/components/data-display/data-display-controls/data-display-controls.types.js.map +1 -0
- package/dist/components/data-display/data-display-controls/index.d.ts +2 -0
- package/dist/components/data-display/data-display-controls/index.js +2 -0
- package/dist/components/data-display/data-display-controls/index.js.map +1 -0
- package/dist/components/data-display/data-display-controls/use-data-display-controls.d.ts +2 -0
- package/dist/components/data-display/data-display-controls/use-data-display-controls.js +41 -0
- package/dist/components/data-display/data-display-controls/use-data-display-controls.js.map +1 -0
- package/dist/components/data-display/filter-controls/filter-controls.types.d.ts +21 -5
- package/dist/components/data-display/filter-controls/index.d.ts +4 -2
- package/dist/components/data-display/filter-controls/index.js +3 -1
- package/dist/components/data-display/filter-controls/index.js.map +1 -1
- package/dist/components/data-display/filter-controls/use-filter-controls.d.ts +1 -1
- package/dist/components/data-display/filter-controls/use-filter-controls.js +14 -5
- package/dist/components/data-display/filter-controls/use-filter-controls.js.map +1 -1
- package/dist/components/data-display/filter-controls/{filter-controls.d.ts → variants/filter-controls.d.ts} +2 -2
- package/dist/components/data-display/filter-controls/variants/filter-controls.js +52 -0
- package/dist/components/data-display/filter-controls/variants/filter-controls.js.map +1 -0
- package/dist/components/data-display/filter-controls/variants/inline-filter-controls.d.ts +13 -0
- package/dist/components/data-display/filter-controls/variants/inline-filter-controls.js +77 -0
- package/dist/components/data-display/filter-controls/variants/inline-filter-controls.js.map +1 -0
- package/dist/components/data-display/index.d.ts +1 -0
- package/dist/components/data-display/index.js +1 -0
- package/dist/components/data-display/index.js.map +1 -1
- package/dist/components/data-display/sort-controls/sort-controls.d.ts +1 -1
- package/dist/components/data-display/sort-controls/sort-controls.js +21 -14
- package/dist/components/data-display/sort-controls/sort-controls.js.map +1 -1
- package/dist/components/data-display/sort-controls/sort-controls.types.d.ts +7 -1
- package/dist/components/data-display/sort-controls/use-sort-controls.d.ts +1 -1
- package/dist/components/data-display/sort-controls/use-sort-controls.js +2 -2
- package/dist/components/data-display/sort-controls/use-sort-controls.js.map +1 -1
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.d.ts +1 -1
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.js +2 -2
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.js.map +1 -1
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.types.d.ts +3 -0
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.d.ts +1 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js +2 -2
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js.map +1 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.types.d.ts +2 -1
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.d.ts +1 -1
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.js +3 -3
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.js.map +1 -1
- package/dist/components/form-elements/file-upload/components/file-upload-content.js +12 -12
- package/dist/components/form-elements/file-upload/components/file-upload-content.js.map +1 -1
- package/dist/components/form-elements/file-upload/components/file-upload-preview.js +35 -35
- package/dist/components/form-elements/file-upload/components/file-upload-preview.js.map +1 -1
- package/dist/components/form-elements/file-upload/components/item-previews.js +22 -22
- package/dist/components/form-elements/file-upload/components/item-previews.js.map +1 -1
- package/dist/components/form-elements/form-label/form-label.js +19 -19
- package/dist/components/form-elements/form-label/form-label.js.map +1 -1
- package/dist/components/form-elements/input-wrapper.js +8 -8
- package/dist/components/form-elements/input-wrapper.js.map +1 -1
- package/dist/components/form-elements/number-input/number-input.js +55 -55
- package/dist/components/form-elements/number-input/number-input.js.map +1 -1
- package/dist/components/form-elements/text-input/text-input.js +4 -4
- package/dist/components/form-elements/text-input/text-input.js.map +1 -1
- package/dist/components/layouts/column-layout/column-layout.js +23 -21
- package/dist/components/layouts/column-layout/column-layout.js.map +1 -1
- package/dist/components/layouts/footer/footer.js +38 -38
- package/dist/components/layouts/footer/footer.js.map +1 -1
- package/dist/components/layouts/masonry-layout/masonry-layout.js +14 -14
- package/dist/components/layouts/masonry-layout/masonry-layout.js.map +1 -1
- package/dist/components/media/info-card/info-card.js +51 -51
- package/dist/components/media/info-card/info-card.js.map +1 -1
- package/dist/components/media/media-card/media-card.js +133 -119
- package/dist/components/media/media-card/media-card.js.map +1 -1
- package/dist/components/navigation/nav-menu/items/base-item/base-item.js +38 -38
- package/dist/components/navigation/nav-menu/items/base-item/base-item.js.map +1 -1
- package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.js +58 -58
- package/dist/components/navigation/nav-menu/items/nav-drop-down-item/nav-drop-down-item.js.map +1 -1
- package/dist/components/navigation/nav-menu/nav-menu.js +104 -104
- package/dist/components/navigation/nav-menu/nav-menu.js.map +1 -1
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js +41 -41
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js.map +1 -1
- package/dist/components/navigation/side-nav/side-nav.js +15 -15
- package/dist/components/navigation/side-nav/side-nav.js.map +1 -1
- package/dist/components/typography/page-header/page-header.js +14 -14
- package/dist/components/typography/page-header/page-header.js.map +1 -1
- package/dist/components/ui/button/button.d.ts +1 -1
- package/dist/components/ui/button/button.js +2 -2
- package/dist/components/ui/button/button.js.map +1 -1
- package/dist/components/ui/button/button.types.d.ts +2 -0
- package/dist/components/ui/card/card.js +72 -72
- package/dist/components/ui/card/card.js.map +1 -1
- package/dist/components/ui/divider/divider.js +24 -22
- package/dist/components/ui/divider/divider.js.map +1 -1
- package/dist/components/ui/loaders/dots-loader/dots-loader.js +46 -46
- package/dist/components/ui/loaders/dots-loader/dots-loader.js.map +1 -1
- package/dist/components/ui/loaders/skeleton/skeleton.js +17 -17
- package/dist/components/ui/loaders/skeleton/skeleton.js.map +1 -1
- package/dist/components/ui/loaders/spin-loader/spin-loader.js +28 -28
- package/dist/components/ui/loaders/spin-loader/spin-loader.js.map +1 -1
- package/dist/components/ui/modal/components/modal-content.js +79 -79
- package/dist/components/ui/modal/components/modal-content.js.map +1 -1
- package/dist/components/ui/modal/modal.js +26 -14
- package/dist/components/ui/modal/modal.js.map +1 -1
- package/dist/components/ui/toggle/toggle.js +37 -48
- package/dist/components/ui/toggle/toggle.js.map +1 -1
- package/dist/styled-system/styles.css +1 -1
- package/dist/styles/panda.css +1 -1
- package/dist/theme/css-name-configurations/theme-css-names.d.ts +13 -1
- package/dist/types/theme/theme.types.d.ts +17 -17
- package/dist/types/utility/index.d.ts +1 -0
- package/dist/types/utility/type-production.types.d.ts +4 -0
- package/dist/types/utility/type-production.types.js +2 -0
- package/dist/types/utility/type-production.types.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/data-display/filter-controls/filter-controls.js +0 -39
- package/dist/components/data-display/filter-controls/filter-controls.js.map +0 -1
package/README.md
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DataDisplayControlsProps } from './data-display-controls.types';
|
|
2
|
+
export declare const DataDisplayControls: <T>({ fields, sortFields, activeSort, activeFilters, onClearAll, isDefault, isActive, onClearFilter, onToggleFilter, onToggleSort, size, color, filterVariant, showFilterLabel, showSortLabel, }: DataDisplayControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from '../../../styled-system/css';
|
|
3
|
+
import { FilterControls, InlineFilterControls } from '../filter-controls';
|
|
4
|
+
import { SortControls } from '../sort-controls';
|
|
5
|
+
import { Button } from '../../../components/ui';
|
|
6
|
+
const styles = cva({
|
|
7
|
+
base: {
|
|
8
|
+
display: 'flex',
|
|
9
|
+
flexDirection: 'column',
|
|
10
|
+
alignItems: 'start',
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
sm: { gap: 1 },
|
|
15
|
+
md: { gap: 2 },
|
|
16
|
+
lg: { gap: 3 },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
export const DataDisplayControls = ({ fields, sortFields, activeSort, activeFilters, onClearAll, isDefault, isActive, onClearFilter, onToggleFilter, onToggleSort, size, color, filterVariant = 'inline', showFilterLabel, showSortLabel, }) => {
|
|
21
|
+
const sharedProps = {
|
|
22
|
+
color,
|
|
23
|
+
size,
|
|
24
|
+
hideReset: true,
|
|
25
|
+
neutralWhenInactive: true,
|
|
26
|
+
};
|
|
27
|
+
const filterProps = {
|
|
28
|
+
isDefault,
|
|
29
|
+
fields: fields.map((f) => ({ ...f })),
|
|
30
|
+
activeFilters,
|
|
31
|
+
onClear: onClearFilter,
|
|
32
|
+
onClearAll,
|
|
33
|
+
onToggle: onToggleFilter,
|
|
34
|
+
isActive,
|
|
35
|
+
showFilterLabel,
|
|
36
|
+
};
|
|
37
|
+
const sortProps = {
|
|
38
|
+
fields: sortFields,
|
|
39
|
+
activeSort,
|
|
40
|
+
onToggle: onToggleSort,
|
|
41
|
+
onClear: onClearAll,
|
|
42
|
+
isDefault,
|
|
43
|
+
showSortLabel,
|
|
44
|
+
};
|
|
45
|
+
const Filter = filterVariant === 'standard' ? FilterControls : InlineFilterControls;
|
|
46
|
+
return (_jsxs("div", { className: styles({ size }), children: [_jsx(Filter, { ...sharedProps, ...filterProps }), _jsx(SortControls, { ...sharedProps, ...sortProps }), !isDefault && (_jsx(Button, { ariaLabel: "Clear all filters and Sorting", size: "sm", onClick: onClearAll, text: true, children: "Reset" }))] }));
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data-display-controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-display-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/data-display-controls/data-display-controls.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,MAAM,GAAG,GAAG,CAAC;IAClB,IAAI,EAAE;QACL,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,UAAU,EAAE,OAAO;KACnB;IACD,QAAQ,EAAE;QACT,IAAI,EAAE;YACL,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACd,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACd,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;SACd;KACD;CACD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAK,EACvC,MAAM,EACN,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,aAAa,GAAG,QAAQ,EACxB,eAAe,EACf,aAAa,GACgB,EAAE,EAAE;IACjC,MAAM,WAAW,GAAG;QACnB,KAAK;QACL,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,IAAI;KACzB,CAAC;IAEF,MAAM,WAAW,GAAG;QACnB,SAAS;QACT,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,aAAa;QACb,OAAO,EAAE,aAAa;QACtB,UAAU;QACV,QAAQ,EAAE,cAAc;QACxB,QAAQ;QACR,eAAe;KACf,CAAC;IAEF,MAAM,SAAS,GAAG;QACjB,MAAM,EAAE,UAAU;QAClB,UAAU;QACV,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,UAAU;QACnB,SAAS;QACT,aAAa;KACb,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAEpF,OAAO,CACN,eAAK,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,aAC/B,KAAC,MAAM,OAAK,WAAW,KAAM,WAAW,GAAI,EAC5C,KAAC,YAAY,OAAK,WAAW,KAAM,SAAS,GAAI,EAC/C,CAAC,SAAS,IAAI,CACd,KAAC,MAAM,IACN,SAAS,EAAC,+BAA+B,EACzC,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,UAAU,EACnB,IAAI,4BAGI,CACT,IACI,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Override, Prettify } from '../../../types';
|
|
2
|
+
import { SortControlsConfig, SortField, SortControlsProps } from '../sort-controls/sort-controls.types';
|
|
3
|
+
import { FilterControlsConfig, ResolvedFilterField, FilterControlsBaseProps } from '../filter-controls/filter-controls.types';
|
|
4
|
+
export type DataField<T> = Prettify<Override<SortField<T> & ResolvedFilterField<T>, {}>>;
|
|
5
|
+
export type DataDisplayControlsConfig<T> = Prettify<Override<SortControlsConfig<T> & FilterControlsConfig<T>, {
|
|
6
|
+
fields: DataField<T>[];
|
|
7
|
+
}>>;
|
|
8
|
+
export type DataDisplayControlsData<T> = {
|
|
9
|
+
refinedData: T[];
|
|
10
|
+
dataDisplayControlsProps: DataDisplayControlsProps<T>;
|
|
11
|
+
};
|
|
12
|
+
export type DataDisplayControlsProps<T> = Prettify<Omit<SortControlsProps<T> & FilterControlsBaseProps<T>, 'fields' | 'hideReset' | 'onToggle' | 'onClear'> & {
|
|
13
|
+
fields: DataField<T>[];
|
|
14
|
+
sortFields: DataField<T>[];
|
|
15
|
+
onToggleSort: SortControlsProps<T>['onToggle'];
|
|
16
|
+
onClearFilter: FilterControlsBaseProps<T>['onClear'];
|
|
17
|
+
onToggleFilter: FilterControlsBaseProps<T>['onToggle'];
|
|
18
|
+
filterVariant?: 'standard' | 'inline';
|
|
19
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-display-controls.types.js","sourceRoot":"","sources":["../../../../src/components/data-display/data-display-controls/data-display-controls.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/data-display/data-display-controls/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DataDisplayControlsConfig, DataDisplayControlsData } from './data-display-controls.types';
|
|
2
|
+
export declare const useDataDisplayControls: <T>({ data, defaultSort, defaultFilters, filterMode, multiSort, fields, }: DataDisplayControlsConfig<T>) => DataDisplayControlsData<T>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useFilterControls } from '../filter-controls';
|
|
3
|
+
import { useSortControls } from '../sort-controls';
|
|
4
|
+
export const useDataDisplayControls = ({ data, defaultSort, defaultFilters, filterMode, multiSort, fields, }) => {
|
|
5
|
+
const { filteredData, clearAllFilters, clearFilter, filterControlsProps, activeFilters, toggleFilter, } = useFilterControls({
|
|
6
|
+
data,
|
|
7
|
+
fields,
|
|
8
|
+
filterMode,
|
|
9
|
+
defaultFilters,
|
|
10
|
+
});
|
|
11
|
+
const sortFields = filterControlsProps.fields.filter((field) => {
|
|
12
|
+
const unique = new Set(filteredData.map((row) => row[field.key]));
|
|
13
|
+
return unique.size > 1;
|
|
14
|
+
});
|
|
15
|
+
const { sortedData: refinedData, activeSort, clearSort, toggleSort, sortControlsProps, } = useSortControls({
|
|
16
|
+
data: filteredData,
|
|
17
|
+
fields: sortFields,
|
|
18
|
+
defaultSort,
|
|
19
|
+
multiSort,
|
|
20
|
+
});
|
|
21
|
+
const onClearAll = () => {
|
|
22
|
+
clearAllFilters();
|
|
23
|
+
clearSort();
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
refinedData,
|
|
27
|
+
dataDisplayControlsProps: {
|
|
28
|
+
fields: filterControlsProps.fields,
|
|
29
|
+
sortFields,
|
|
30
|
+
activeSort,
|
|
31
|
+
activeFilters,
|
|
32
|
+
isDefault: filterControlsProps.isDefault && sortControlsProps.isDefault,
|
|
33
|
+
isActive: filterControlsProps.isActive,
|
|
34
|
+
onClearAll,
|
|
35
|
+
onToggleSort: toggleSort,
|
|
36
|
+
onToggleFilter: toggleFilter,
|
|
37
|
+
onClearFilter: clearFilter,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=use-data-display-controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-data-display-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/data-display-controls/use-data-display-controls.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAI,EACzC,IAAI,EACJ,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,MAAM,GACwB,EAA8B,EAAE;IAC9D,MAAM,EACL,YAAY,EACZ,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,GACZ,GAAG,iBAAiB,CAAI;QACxB,IAAI;QACJ,MAAM;QACN,UAAU;QACV,cAAc;KACd,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,EACL,UAAU,EAAE,WAAW,EACvB,UAAU,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,GACjB,GAAG,eAAe,CAAC;QACnB,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,UAAU;QAClB,WAAW;QACX,SAAS;KACT,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,eAAe,EAAE,CAAC;QAClB,SAAS,EAAE,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACN,WAAW;QACX,wBAAwB,EAAE;YACzB,MAAM,EAAE,mBAAmB,CAAC,MAAM;YAClC,UAAU;YACV,UAAU;YACV,aAAa;YACb,SAAS,EAAE,mBAAmB,CAAC,SAAS,IAAI,iBAAiB,CAAC,SAAS;YACvE,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;YACtC,UAAU;YACV,YAAY,EAAE,UAAU;YACxB,cAAc,EAAE,YAAY;YAC5B,aAAa,EAAE,WAAW;SAC1B;KACD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -15,8 +15,11 @@ export type FilterField<T> = {
|
|
|
15
15
|
icon?: IconNames;
|
|
16
16
|
/** Optional color accent for the filter control */
|
|
17
17
|
color?: UtilityColorOptions;
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/** Customize options for this field (order or display label). If omitted, options are derived from the data */
|
|
19
|
+
filterOptions?: (string | {
|
|
20
|
+
label: string;
|
|
21
|
+
value: T[keyof T];
|
|
22
|
+
})[];
|
|
20
23
|
};
|
|
21
24
|
/** `FilterField` with `options` guaranteed to be present after resolution */
|
|
22
25
|
export type ResolvedFilterField<T> = Omit<FilterField<T>, 'options'> & {
|
|
@@ -38,7 +41,7 @@ export type FilterControlsConfig<T> = {
|
|
|
38
41
|
/** Filters applied on initial render */
|
|
39
42
|
defaultFilters?: ActiveFilter<T>[];
|
|
40
43
|
/** Whether multiple active filters combine with AND or OR logic @default `'and'` */
|
|
41
|
-
|
|
44
|
+
filterMode?: 'and' | 'or';
|
|
42
45
|
};
|
|
43
46
|
/** Return value of `useFilterControls` — filtered data plus props to pass to `FilterControls` */
|
|
44
47
|
export type FilterControlsData<T> = {
|
|
@@ -53,9 +56,9 @@ export type FilterControlsData<T> = {
|
|
|
53
56
|
/** Clears all active filters across all fields */
|
|
54
57
|
clearAllFilters: () => void;
|
|
55
58
|
/** Pre-assembled props to spread directly onto `FilterControls` */
|
|
56
|
-
filterControlsProps:
|
|
59
|
+
filterControlsProps: FilterControlsBaseProps<T>;
|
|
57
60
|
};
|
|
58
|
-
export type
|
|
61
|
+
export type FilterControlsBaseProps<T> = {
|
|
59
62
|
/** Size variant for the filter controls @default `'sm'` */
|
|
60
63
|
size?: UtilitySizeOptions;
|
|
61
64
|
/** Color accent applied to the controls */
|
|
@@ -72,4 +75,17 @@ export type FilterControlsProps<T> = {
|
|
|
72
75
|
onClear: (key: keyof T) => void;
|
|
73
76
|
/** Called when all active filters are cleared */
|
|
74
77
|
onClearAll: () => void;
|
|
78
|
+
/** Checks whether a specific value is active for a given field */
|
|
79
|
+
isActive: (key: keyof T, value: T[keyof T]) => boolean;
|
|
80
|
+
/** Optionally hide button to reset filters */
|
|
81
|
+
hideReset?: boolean;
|
|
82
|
+
/** Optionally display title `Filter` above filters */
|
|
83
|
+
showFilterLabel?: boolean;
|
|
84
|
+
/** Display Filter Dropdown Buttons as neutral when no sort is applied @default `'false'`` */
|
|
85
|
+
neutralWhenInactive?: boolean;
|
|
86
|
+
};
|
|
87
|
+
export type FilterControlsProps<T> = Omit<FilterControlsBaseProps<T>, 'neutralWhenInactive'>;
|
|
88
|
+
export type InlineFilterControlsProps<T> = FilterControlsBaseProps<T> & {
|
|
89
|
+
/** Determines where field Title is displayed */
|
|
90
|
+
fieldTitleDisplay?: 'none' | 'inline' | 'block';
|
|
75
91
|
};
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
1
|
+
export { useFilterControls } from './use-filter-controls';
|
|
2
|
+
export type { FilterControlsProps, InlineFilterControlsProps } from './filter-controls.types';
|
|
3
|
+
export { FilterControls } from './variants/filter-controls';
|
|
4
|
+
export { InlineFilterControls } from './variants/inline-filter-controls';
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { useFilterControls } from './use-filter-controls';
|
|
2
|
+
export { FilterControls } from './variants/filter-controls';
|
|
3
|
+
export { InlineFilterControls } from './variants/inline-filter-controls';
|
|
2
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/data-display/filter-controls/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/data-display/filter-controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -20,4 +20,4 @@ import type { FilterControlsConfig, FilterControlsData } from './filter-controls
|
|
|
20
20
|
* </>
|
|
21
21
|
* );
|
|
22
22
|
*/
|
|
23
|
-
export declare const useFilterControls: <T>({ data, fields, defaultFilters,
|
|
23
|
+
export declare const useFilterControls: <T>({ data, fields, defaultFilters, filterMode, }: FilterControlsConfig<T>) => FilterControlsData<T>;
|
|
@@ -21,11 +21,13 @@ import { useState, useMemo } from 'react';
|
|
|
21
21
|
* </>
|
|
22
22
|
* );
|
|
23
23
|
*/
|
|
24
|
-
export const useFilterControls = ({ data, fields, defaultFilters,
|
|
24
|
+
export const useFilterControls = ({ data, fields, defaultFilters, filterMode = 'and', }) => {
|
|
25
25
|
const [activeFilters, setActiveFilters] = useState(defaultFilters ?? []);
|
|
26
26
|
const resolvedFields = useMemo(() => fields.map((field) => {
|
|
27
|
-
if (field.
|
|
28
|
-
|
|
27
|
+
if (field.filterOptions) {
|
|
28
|
+
const options = field.filterOptions.map((o) => typeof o === 'string' ? { value: o, label: o } : o);
|
|
29
|
+
return { ...field, options };
|
|
30
|
+
}
|
|
29
31
|
const unique = [...new Set(data.map((row) => row[field.key]))];
|
|
30
32
|
const options = unique
|
|
31
33
|
.map((value) => ({ value, label: String(value) }))
|
|
@@ -64,12 +66,18 @@ export const useFilterControls = ({ data, fields, defaultFilters, mode = 'and',
|
|
|
64
66
|
if (activeFilters.length === 0)
|
|
65
67
|
return data;
|
|
66
68
|
return data.filter((row) => {
|
|
67
|
-
if (
|
|
69
|
+
if (filterMode === 'and') {
|
|
68
70
|
return activeFilters.every((f) => f.values.includes(row[f.key]));
|
|
69
71
|
}
|
|
70
72
|
return activeFilters.some((f) => f.values.includes(row[f.key]));
|
|
71
73
|
});
|
|
72
|
-
}, [data, activeFilters,
|
|
74
|
+
}, [data, activeFilters, filterMode]);
|
|
75
|
+
const activeSet = useMemo(() => {
|
|
76
|
+
const set = new Set();
|
|
77
|
+
activeFilters.forEach((f) => f.values.forEach((v) => set.add(`${String(f.key)}:${String(v)}`)));
|
|
78
|
+
return set;
|
|
79
|
+
}, [activeFilters]);
|
|
80
|
+
const isActive = (key, value) => activeSet.has(`${String(key)}:${String(value)}`);
|
|
73
81
|
return {
|
|
74
82
|
filteredData,
|
|
75
83
|
activeFilters,
|
|
@@ -83,6 +91,7 @@ export const useFilterControls = ({ data, fields, defaultFilters, mode = 'and',
|
|
|
83
91
|
onClear: clearFilter,
|
|
84
92
|
onClearAll: clearAllFilters,
|
|
85
93
|
isDefault,
|
|
94
|
+
isActive,
|
|
86
95
|
},
|
|
87
96
|
};
|
|
88
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-filter-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/filter-controls/use-filter-controls.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQ1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAI,EACpC,IAAI,EACJ,MAAM,EACN,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"use-filter-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/filter-controls/use-filter-controls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FilterControlsProps } from '
|
|
1
|
+
import { FilterControlsProps } from '../filter-controls.types';
|
|
2
2
|
/**
|
|
3
3
|
* Renders a row of multi-select dropdown filters and a reset button.
|
|
4
4
|
* Designed to be used with `useFilterControls` via `filterControlsProps`.
|
|
@@ -7,4 +7,4 @@ import { FilterControlsProps } from './filter-controls.types';
|
|
|
7
7
|
* const { filteredData, filterControlsProps } = useFilterControls({ data, fields });
|
|
8
8
|
* <FilterControls {...filterControlsProps} />
|
|
9
9
|
*/
|
|
10
|
-
export declare const FilterControls: <T>({ fields, activeFilters, onToggle, onClear, onClearAll, size, isDefault, }: FilterControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const FilterControls: <T>({ fields, activeFilters, onToggle, onClear, onClearAll, size, isDefault, color, hideReset, showFilterLabel, }: FilterControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from '../../../../styled-system/css';
|
|
4
|
+
import { Button, Text } from '../../../../components';
|
|
5
|
+
import { MultiDropdown } from '../../../form-elements';
|
|
6
|
+
const styles = {
|
|
7
|
+
container: cva({
|
|
8
|
+
base: {
|
|
9
|
+
display: 'flex',
|
|
10
|
+
flexDirection: 'column',
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
sm: { gap: '1' },
|
|
15
|
+
md: { gap: '2' },
|
|
16
|
+
lg: { gap: '3' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
}),
|
|
20
|
+
controlsContainer: cva({
|
|
21
|
+
base: {
|
|
22
|
+
display: 'flex',
|
|
23
|
+
flexDirection: 'row',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
width: 'fit-content',
|
|
26
|
+
},
|
|
27
|
+
variants: {
|
|
28
|
+
size: {
|
|
29
|
+
sm: { gap: '1' },
|
|
30
|
+
md: { gap: '2' },
|
|
31
|
+
lg: { gap: '3' },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Renders a row of multi-select dropdown filters and a reset button.
|
|
38
|
+
* Designed to be used with `useFilterControls` via `filterControlsProps`.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* const { filteredData, filterControlsProps } = useFilterControls({ data, fields });
|
|
42
|
+
* <FilterControls {...filterControlsProps} />
|
|
43
|
+
*/
|
|
44
|
+
export const FilterControls = ({ fields, activeFilters, onToggle, onClear, onClearAll, size = 'sm', isDefault, color, hideReset = false, showFilterLabel = false, }) => {
|
|
45
|
+
const getActive = (key) => activeFilters.find((f) => f.key === key);
|
|
46
|
+
return (_jsxs("div", { className: styles.container({ size }), children: [showFilterLabel && _jsx(Text, { bold: true, children: "Filters" }), _jsxs("div", { className: styles.controlsContainer({ size }), children: [fields.map(({ key, label, icon, color: fieldColor, options }) => {
|
|
47
|
+
const active = getActive(key);
|
|
48
|
+
const selectedValues = (active?.values ?? []);
|
|
49
|
+
return (_jsx(MultiDropdown, { size: size, id: String(key), title: label, options: options, values: selectedValues, onToggle: (value) => onToggle(key, value), onClear: () => onClear(key), icon: icon, showLabel: false, color: active ? color : undefined }, String(key)));
|
|
50
|
+
}), !isDefault && !hideReset && (_jsx(Button, { color: "text", onClick: onClearAll, size: size, text: true, ariaLabel: "Clear all filters", children: "Reset" }))] })] }));
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=filter-controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-controls.js","sourceRoot":"","sources":["../../../../../src/components/data-display/filter-controls/variants/filter-controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InlineFilterControlsProps } from '../filter-controls.types';
|
|
2
|
+
/**
|
|
3
|
+
* Renders all filter options as inline toggle buttons.
|
|
4
|
+
* Designed to be used with `useFilterControls` via `filterControlsProps`.
|
|
5
|
+
*
|
|
6
|
+
* Each option is always visible — clicking toggles it on or off.
|
|
7
|
+
* Active options appear filled; inactive ones appear as outlines.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const { filteredData, filterControlsProps } = useFilterControls({ data, fields });
|
|
11
|
+
* <FilterBar {...filterControlsProps} />
|
|
12
|
+
*/
|
|
13
|
+
export declare const InlineFilterControls: <T>({ fields, isActive, onToggle, onClearAll, size, isDefault, color, fieldTitleDisplay, hideReset, showFilterLabel, }: InlineFilterControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { css, cva } from '../../../../styled-system/css';
|
|
4
|
+
import { Button, Text } from '../../../../components';
|
|
5
|
+
import { OptionalIconButton } from '../../../../internal-components';
|
|
6
|
+
const styles = {
|
|
7
|
+
container: cva({
|
|
8
|
+
base: {
|
|
9
|
+
display: 'flex',
|
|
10
|
+
flexDirection: 'column',
|
|
11
|
+
alignItems: 'start',
|
|
12
|
+
flexWrap: 'wrap',
|
|
13
|
+
},
|
|
14
|
+
variants: {
|
|
15
|
+
size: {
|
|
16
|
+
sm: { gap: '1' },
|
|
17
|
+
md: { gap: '2' },
|
|
18
|
+
lg: { gap: '3' },
|
|
19
|
+
},
|
|
20
|
+
filterGroup: {
|
|
21
|
+
true: {
|
|
22
|
+
flexWrap: 'inherit',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
titleInline: {
|
|
26
|
+
true: {
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
flexDirection: 'row',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
groupLabel: cva({
|
|
34
|
+
base: {
|
|
35
|
+
fontWeight: 'semibold',
|
|
36
|
+
color: 'text.secondary',
|
|
37
|
+
},
|
|
38
|
+
variants: {
|
|
39
|
+
size: {
|
|
40
|
+
sm: { fontSize: 'xs', marginRight: '1' },
|
|
41
|
+
md: { fontSize: 'sm', marginRight: '2' },
|
|
42
|
+
lg: { fontSize: 'md', marginRight: '2' },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Renders all filter options as inline toggle buttons.
|
|
49
|
+
* Designed to be used with `useFilterControls` via `filterControlsProps`.
|
|
50
|
+
*
|
|
51
|
+
* Each option is always visible — clicking toggles it on or off.
|
|
52
|
+
* Active options appear filled; inactive ones appear as outlines.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* const { filteredData, filterControlsProps } = useFilterControls({ data, fields });
|
|
56
|
+
* <FilterBar {...filterControlsProps} />
|
|
57
|
+
*/
|
|
58
|
+
export const InlineFilterControls = ({ fields, isActive, onToggle, onClearAll, size = 'sm', isDefault, color = 'tertiary', fieldTitleDisplay = 'inline', hideReset = false, showFilterLabel = false, }) => {
|
|
59
|
+
return (_jsxs("div", { className: styles.container({ size }), children: [showFilterLabel && _jsx(Text, { bold: true, children: "Filters" }), fields.map(({ key, label, icon, color: fieldColor, options }) => (_jsxs("div", { className: styles.container({
|
|
60
|
+
size,
|
|
61
|
+
filterGroup: true,
|
|
62
|
+
titleInline: fieldTitleDisplay === 'inline',
|
|
63
|
+
}), children: [fieldTitleDisplay !== 'none' && (_jsx("span", { className: styles.groupLabel({ size }), children: label })), _jsx("div", { className: styles.container({ size, filterGroup: true, titleInline: true }), children: options.map((option) => {
|
|
64
|
+
const active = isActive(key, option.value);
|
|
65
|
+
const resolvedFieldColor = active
|
|
66
|
+
? (fieldColor ?? color)
|
|
67
|
+
: 'neutral';
|
|
68
|
+
const buttonProps = {
|
|
69
|
+
color: resolvedFieldColor,
|
|
70
|
+
size,
|
|
71
|
+
onClick: () => onToggle(key, option.value),
|
|
72
|
+
name: icon,
|
|
73
|
+
};
|
|
74
|
+
return (_jsx(OptionalIconButton, { ...buttonProps, children: option.label }, `${String(key)}-${option.value}`));
|
|
75
|
+
}) })] }, String(key)))), !hideReset && (_jsx("div", { className: css({ minHeight: '6', display: 'flex', alignItems: 'center' }), children: !isDefault && (_jsx(Button, { color: "text", onClick: onClearAll, size: size, text: true, ariaLabel: "Clear all filters", children: "Reset" })) }))] }));
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=inline-filter-controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-filter-controls.js","sourceRoot":"","sources":["../../../../../src/components/data-display/filter-controls/variants/inline-filter-controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data-display/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data-display/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,yBAAyB,CAAC"}
|
|
@@ -8,4 +8,4 @@ import { SortControlsProps } from './sort-controls.types';
|
|
|
8
8
|
* const { sortedData, sortControlsProps } = useSortControls({ data, fields });
|
|
9
9
|
* <SortControls {...sortControlsProps} />
|
|
10
10
|
*/
|
|
11
|
-
export declare const SortControls: <T>({ color, fields, activeSort, onToggle, onClear, size, isDefault, }: SortControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const SortControls: <T>({ color, fields, activeSort, onToggle, onClear, size, isDefault, hideReset, neutralWhenInactive, showSortLabel, }: SortControlsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cva } from '../../../styled-system/css';
|
|
4
|
-
import { Button, Icon } from '../../../components';
|
|
4
|
+
import { Button, Icon, Text } from '../../../components';
|
|
5
5
|
import { OptionalIconButton } from '../../../internal-components';
|
|
6
6
|
const styles = {
|
|
7
|
-
|
|
7
|
+
container: cva({
|
|
8
8
|
base: {
|
|
9
9
|
display: 'flex',
|
|
10
10
|
flexDirection: 'row',
|
|
11
|
-
alignItems: 'center',
|
|
12
11
|
},
|
|
13
12
|
variants: {
|
|
13
|
+
inner: {
|
|
14
|
+
true: {},
|
|
15
|
+
false: {
|
|
16
|
+
alignItems: 'start',
|
|
17
|
+
flexDirection: 'column',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
14
20
|
size: {
|
|
15
21
|
sm: {
|
|
16
22
|
gap: '1',
|
|
@@ -34,18 +40,19 @@ const styles = {
|
|
|
34
40
|
* const { sortedData, sortControlsProps } = useSortControls({ data, fields });
|
|
35
41
|
* <SortControls {...sortControlsProps} />
|
|
36
42
|
*/
|
|
37
|
-
export const SortControls = ({ color = 'tertiary', fields, activeSort, onToggle, onClear, size = 'sm', isDefault, }) => {
|
|
43
|
+
export const SortControls = ({ color = 'tertiary', fields, activeSort, onToggle, onClear, size = 'sm', isDefault, hideReset = false, neutralWhenInactive = false, showSortLabel = false, }) => {
|
|
38
44
|
const getState = (key) => activeSort.find((s) => s.key === key);
|
|
39
|
-
return (_jsxs("div", { className: styles.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
return (_jsxs("div", { className: styles.container({ inner: false, size }), children: [showSortLabel && _jsx(Text, { bold: true, children: "Sort" }), _jsxs("div", { className: styles.container({ inner: true, size }), children: [fields.map(({ key, label, icon, color: fieldColor }) => {
|
|
46
|
+
const state = getState(key);
|
|
47
|
+
const resolvedFieldColor = !state && neutralWhenInactive ? 'neutral' : (fieldColor ?? color);
|
|
48
|
+
const buttonProps = {
|
|
49
|
+
color: resolvedFieldColor,
|
|
50
|
+
size,
|
|
51
|
+
onClick: () => onToggle(key),
|
|
52
|
+
name: icon,
|
|
53
|
+
};
|
|
54
|
+
return (_jsxs(OptionalIconButton, { ...buttonProps, children: [label, state && _jsx(SortIndicator, { direction: state.direction })] }, String(key)));
|
|
55
|
+
}), !isDefault && !hideReset && (_jsx(Button, { color: "text", onClick: onClear, size: size, text: true, ariaLabel: "Clear all sorting", children: "Reset" }))] })] }));
|
|
49
56
|
};
|
|
50
57
|
const SortIndicator = ({ direction }) => direction === 'asc' ? _jsx(Icon, { size: 8, name: "ArrowUp" }) : _jsx(Icon, { size: 8, name: "ArrowDown" });
|
|
51
58
|
//# sourceMappingURL=sort-controls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/sort-controls/sort-controls.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sort-controls.js","sourceRoot":"","sources":["../../../../src/components/data-display/sort-controls/sort-controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ export type SortControlsConfig<T> = {
|
|
|
29
29
|
/** Sort applied on initial render */
|
|
30
30
|
defaultSort?: ActiveSort<T>[];
|
|
31
31
|
/** Allows multiple fields to be sorted simultaneously @default `false` */
|
|
32
|
-
|
|
32
|
+
multiSort?: boolean;
|
|
33
33
|
};
|
|
34
34
|
/** Return value of `useSortControls` — sorted data plus props to pass to `SortControls` */
|
|
35
35
|
export type SortControlsData<T> = {
|
|
@@ -59,4 +59,10 @@ export type SortControlsProps<T> = {
|
|
|
59
59
|
onClear: () => void;
|
|
60
60
|
/** Hides the reset button when true, indicating sort is in its default state */
|
|
61
61
|
isDefault?: boolean;
|
|
62
|
+
/** Optionally hide button to reset sorts */
|
|
63
|
+
hideReset?: boolean;
|
|
64
|
+
/** Display Sort Buttons as neutral when no sort is applied @default `'false'`` */
|
|
65
|
+
neutralWhenInactive?: boolean;
|
|
66
|
+
/** Optionally display title `Sort` above filters */
|
|
67
|
+
showSortLabel?: boolean;
|
|
62
68
|
};
|
|
@@ -20,4 +20,4 @@ import type { SortControlsConfig, SortControlsData } from './sort-controls.types
|
|
|
20
20
|
* </>
|
|
21
21
|
* );
|
|
22
22
|
*/
|
|
23
|
-
export declare const useSortControls: <T>({ data, fields,
|
|
23
|
+
export declare const useSortControls: <T>({ data, fields, multiSort, defaultSort, }: SortControlsConfig<T>) => SortControlsData<T>;
|