@ultraviolet/ui 3.18.2 → 3.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/components/Dialog/index.js +1 -1
  2. package/dist/components/Radio/index.d.ts.map +1 -1
  3. package/dist/components/Radio/index.js +1 -0
  4. package/dist/components/RadioGroup/SingleRadio.js +1 -1
  5. package/dist/components/SelectInput/components/SelectBar/selectBar.css.d.ts.map +1 -1
  6. package/dist/components/SwitchButton/Option.js +1 -1
  7. package/dist/components/TextArea/index.d.ts +1 -0
  8. package/dist/components/TextArea/index.d.ts.map +1 -1
  9. package/dist/components/TextArea/index.js +4 -2
  10. package/dist/components/TextArea/styles.css.d.ts +14 -0
  11. package/dist/components/TextArea/styles.css.d.ts.map +1 -1
  12. package/dist/components/TextArea/styles.css.js +8 -2
  13. package/dist/components/index.js +15 -15
  14. package/dist/components/styles.js +84 -84
  15. package/dist/composition.js +19 -15
  16. package/dist/compositions/EstimateCost/styles.css.js +0 -2
  17. package/dist/compositions/FAQ/index.js +1 -1
  18. package/dist/compositions/Filters/Filters.d.ts +9 -0
  19. package/dist/compositions/Filters/Filters.d.ts.map +1 -0
  20. package/dist/compositions/Filters/Filters.js +36 -0
  21. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/Dropdown.d.ts +16 -0
  22. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/Dropdown.d.ts.map +1 -0
  23. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/Dropdown.js +137 -0
  24. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/FilterDatetimeRange.d.ts +6 -0
  25. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/FilterDatetimeRange.d.ts.map +1 -0
  26. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/FilterDatetimeRange.js +74 -0
  27. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/filterDatetimeRange.styles.css.d.ts +5 -0
  28. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/filterDatetimeRange.styles.css.d.ts.map +1 -0
  29. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/filterDatetimeRange.styles.css.js +16 -0
  30. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/filterDatetimeRange.styles.css.ts.vanilla.js +8 -0
  31. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/type.d.ts +16 -0
  32. package/dist/compositions/Filters/filterTypes/FilterDatetimeRange/type.d.ts.map +1 -0
  33. package/dist/compositions/Filters/filterTypes/FilterMultiSelect.d.ts +5 -0
  34. package/dist/compositions/Filters/filterTypes/FilterMultiSelect.d.ts.map +1 -0
  35. package/dist/compositions/Filters/filterTypes/FilterMultiSelect.js +53 -0
  36. package/dist/compositions/Filters/filterTypes/FilterNumber.d.ts +5 -0
  37. package/dist/compositions/Filters/filterTypes/FilterNumber.d.ts.map +1 -0
  38. package/dist/compositions/Filters/filterTypes/FilterNumber.js +24 -0
  39. package/dist/compositions/Filters/filterTypes/FilterSearch.d.ts +5 -0
  40. package/dist/compositions/Filters/filterTypes/FilterSearch.d.ts.map +1 -0
  41. package/dist/compositions/Filters/filterTypes/FilterSearch.js +42 -0
  42. package/dist/compositions/Filters/filterTypes/FilterSelect.d.ts +6 -0
  43. package/dist/compositions/Filters/filterTypes/FilterSelect.d.ts.map +1 -0
  44. package/dist/compositions/Filters/filterTypes/FilterSelect.js +46 -0
  45. package/dist/compositions/Filters/filterTypes/FilterSlider.d.ts +5 -0
  46. package/dist/compositions/Filters/filterTypes/FilterSlider.d.ts.map +1 -0
  47. package/dist/compositions/Filters/filterTypes/FilterSlider.js +31 -0
  48. package/dist/compositions/Filters/filterTypes/FilterText.d.ts +5 -0
  49. package/dist/compositions/Filters/filterTypes/FilterText.d.ts.map +1 -0
  50. package/dist/compositions/Filters/filterTypes/FilterText.js +42 -0
  51. package/dist/compositions/Filters/index.d.ts +7 -0
  52. package/dist/compositions/Filters/index.d.ts.map +1 -0
  53. package/dist/compositions/Filters/index.js +17 -0
  54. package/dist/compositions/Filters/parts/AbstractFilter.d.ts +8 -0
  55. package/dist/compositions/Filters/parts/AbstractFilter.d.ts.map +1 -0
  56. package/dist/compositions/Filters/parts/AbstractFilter.js +54 -0
  57. package/dist/compositions/Filters/parts/ExpandableFilterGroup.d.ts +9 -0
  58. package/dist/compositions/Filters/parts/ExpandableFilterGroup.d.ts.map +1 -0
  59. package/dist/compositions/Filters/parts/ExpandableFilterGroup.js +59 -0
  60. package/dist/compositions/Filters/parts/FiltersDrawer.d.ts +13 -0
  61. package/dist/compositions/Filters/parts/FiltersDrawer.d.ts.map +1 -0
  62. package/dist/compositions/Filters/parts/FiltersDrawer.js +100 -0
  63. package/dist/compositions/Filters/parts/FiltersMainRow.d.ts +19 -0
  64. package/dist/compositions/Filters/parts/FiltersMainRow.d.ts.map +1 -0
  65. package/dist/compositions/Filters/parts/FiltersMainRow.js +85 -0
  66. package/dist/compositions/Filters/parts/FiltersProvider.d.ts +17 -0
  67. package/dist/compositions/Filters/parts/FiltersProvider.d.ts.map +1 -0
  68. package/dist/compositions/Filters/parts/FiltersProvider.js +55 -0
  69. package/dist/compositions/Filters/parts/helpers.d.ts +5 -0
  70. package/dist/compositions/Filters/parts/helpers.d.ts.map +1 -0
  71. package/dist/compositions/Filters/parts/helpers.js +38 -0
  72. package/dist/compositions/Filters/parts/reducer.d.ts +40 -0
  73. package/dist/compositions/Filters/parts/reducer.d.ts.map +1 -0
  74. package/dist/compositions/Filters/parts/reducer.js +50 -0
  75. package/dist/compositions/Filters/parts/styles.css.d.ts +4 -0
  76. package/dist/compositions/Filters/parts/styles.css.d.ts.map +1 -0
  77. package/dist/compositions/Filters/parts/styles.css.js +13 -0
  78. package/dist/compositions/Filters/parts/styles.css.ts.vanilla.js +8 -0
  79. package/dist/compositions/Filters/parts/useFilters.d.ts +28 -0
  80. package/dist/compositions/Filters/parts/useFilters.d.ts.map +1 -0
  81. package/dist/compositions/Filters/parts/useFilters.js +100 -0
  82. package/dist/compositions/Filters/types.d.ts +80 -0
  83. package/dist/compositions/Filters/types.d.ts.map +1 -0
  84. package/dist/compositions/InfoTable/styles.css.js +82 -82
  85. package/dist/compositions/OfferList/components/Row.d.ts +1 -1
  86. package/dist/compositions/OfferList/components/Row.d.ts.map +1 -1
  87. package/dist/compositions/OfferList/components/Row.js +3 -2
  88. package/dist/compositions/OfferList/components/SelectableCell.js +1 -1
  89. package/dist/compositions/OfferList/index.d.ts +1 -1
  90. package/dist/compositions/OfferList/styles.css.d.ts +1 -5
  91. package/dist/compositions/OfferList/styles.css.d.ts.map +1 -1
  92. package/dist/compositions/OptionSelector/styles.css.js +83 -83
  93. package/dist/compositions/RichTextInput/Toolbar.js +1 -1
  94. package/dist/compositions/RichTextInput/index.js +1 -1
  95. package/dist/compositions/SteppedListCard/styles.css.js +2 -0
  96. package/dist/compositions/index.d.ts +2 -0
  97. package/dist/compositions/index.d.ts.map +1 -1
  98. package/dist/compositions/index.js +6 -0
  99. package/dist/index.js +62 -62
  100. package/dist/ui.css +1 -1
  101. package/package.json +4 -4
@@ -0,0 +1,8 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { FilterComponentProps } from '../types';
3
+ type AbstractFilterProps = FilterComponentProps & {
4
+ customComponents?: Record<string, ComponentType<FilterComponentProps>>;
5
+ };
6
+ export declare const AbstractFilter: ({ hideLabel, config, directionContext, onChange, value, values, customComponents, size, }: AbstractFilterProps) => import("react").JSX.Element | null;
7
+ export {};
8
+ //# sourceMappingURL=AbstractFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractFilter.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/AbstractFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAQ1C,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,UAAU,CAAA;AAElE,KAAK,mBAAmB,GAAG,oBAAoB,GAAG;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAA;CACvE,CAAA;AAYD,eAAO,MAAM,cAAc,8FASxB,mBAAmB,uCAwBrB,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { _objectSpread2, init_objectSpread2 } from "../../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
3
+ import { FilterDatetimeRange, init_FilterDatetimeRange } from "../filterTypes/FilterDatetimeRange/FilterDatetimeRange.js";
4
+ import { FilterSelect, init_FilterSelect } from "../filterTypes/FilterSelect.js";
5
+ import { FilterMultiSelect, init_FilterMultiSelect } from "../filterTypes/FilterMultiSelect.js";
6
+ import { FilterNumber, init_FilterNumber } from "../filterTypes/FilterNumber.js";
7
+ import { FilterSearch, init_FilterSearch } from "../filterTypes/FilterSearch.js";
8
+ import { FilterSlider, init_FilterSlider } from "../filterTypes/FilterSlider.js";
9
+ import { FilterText, init_FilterText } from "../filterTypes/FilterText.js";
10
+ import { jsx } from "react/jsx-runtime";
11
+
12
+ //#region src/compositions/Filters/parts/AbstractFilter.tsx
13
+ var defaultFieldComponents, AbstractFilter;
14
+ var init_AbstractFilter = __esmMin(() => {
15
+ init_FilterDatetimeRange();
16
+ init_FilterMultiSelect();
17
+ init_FilterNumber();
18
+ init_FilterSearch();
19
+ init_FilterSelect();
20
+ init_FilterSlider();
21
+ init_FilterText();
22
+ init_objectSpread2();
23
+ defaultFieldComponents = {
24
+ text: FilterText,
25
+ search: FilterSearch,
26
+ select: FilterSelect,
27
+ multiselect: FilterMultiSelect,
28
+ slider: FilterSlider,
29
+ datetimeRange: FilterDatetimeRange,
30
+ number: FilterNumber
31
+ };
32
+ AbstractFilter = ({ hideLabel, config, directionContext, onChange, value, values, customComponents = {}, size }) => {
33
+ const shouldHideLabel = directionContext === "column" && hideLabel;
34
+ const availableComponents = _objectSpread2(_objectSpread2({}, defaultFieldComponents), customComponents);
35
+ const isAvailableType = (configItem) => configItem.type in availableComponents;
36
+ if (isAvailableType(config)) {
37
+ const Component = availableComponents[config.type];
38
+ return /* @__PURE__ */ jsx(Component, {
39
+ config,
40
+ size,
41
+ directionContext,
42
+ onChange,
43
+ hideLabel: shouldHideLabel,
44
+ value,
45
+ values
46
+ });
47
+ }
48
+ return null;
49
+ };
50
+ });
51
+
52
+ //#endregion
53
+ init_AbstractFilter();
54
+ export { AbstractFilter, init_AbstractFilter };
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare const ExpandableFilterGroup: ({ label, children, defaultExpanded, onReset, clearText, }: {
3
+ label: string;
4
+ children: ReactNode;
5
+ defaultExpanded?: boolean;
6
+ onReset?: () => void;
7
+ clearText: string;
8
+ }) => import("react").JSX.Element;
9
+ //# sourceMappingURL=ExpandableFilterGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableFilterGroup.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/ExpandableFilterGroup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,eAAO,MAAM,qBAAqB,8DAM/B;IACD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,gCA8BA,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { Stack, init_Stack } from "../../../components/Stack/index.js";
3
+ import { Text, init_Text } from "../../../components/Text/index.js";
4
+ import { Button, init_Button } from "../../../components/Button/index.js";
5
+ import { Label, init_Label } from "../../../components/Label/index.js";
6
+ import { Row, init_Row } from "../../../components/Row/index.js";
7
+ import { useState } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { ArrowDownIcon, ArrowUpIcon } from "@ultraviolet/icons";
10
+
11
+ //#region src/compositions/Filters/parts/ExpandableFilterGroup.tsx
12
+ var ExpandableFilterGroup;
13
+ var init_ExpandableFilterGroup = __esmMin(() => {
14
+ init_Button();
15
+ init_Label();
16
+ init_Row();
17
+ init_Stack();
18
+ init_Text();
19
+ ExpandableFilterGroup = ({ label, children, defaultExpanded = true, onReset, clearText }) => {
20
+ const [expanded, setExpanded] = useState(defaultExpanded);
21
+ return /* @__PURE__ */ jsxs(Stack, {
22
+ gap: 2,
23
+ children: [/* @__PURE__ */ jsxs(Row, {
24
+ gap: 1,
25
+ templateColumns: "1fr auto",
26
+ children: [/* @__PURE__ */ jsx(Label, {
27
+ size: "medium",
28
+ children: label
29
+ }), /* @__PURE__ */ jsxs(Stack, {
30
+ direction: "row",
31
+ gap: 1,
32
+ children: [typeof onReset === "function" ? /* @__PURE__ */ jsx(Button, {
33
+ onClick: onReset,
34
+ sentiment: "neutral",
35
+ size: "xsmall",
36
+ variant: "ghost",
37
+ children: /* @__PURE__ */ jsx(Text, {
38
+ as: "span",
39
+ variant: "captionStrong",
40
+ children: clearText
41
+ })
42
+ }) : null, /* @__PURE__ */ jsx(Button, {
43
+ onClick: () => {
44
+ setExpanded((current) => !current);
45
+ },
46
+ sentiment: "neutral",
47
+ size: "xsmall",
48
+ variant: "ghost",
49
+ children: expanded ? /* @__PURE__ */ jsx(ArrowUpIcon, {}) : /* @__PURE__ */ jsx(ArrowDownIcon, {})
50
+ })]
51
+ })]
52
+ }), expanded ? /* @__PURE__ */ jsx(Stack, { children }) : null]
53
+ });
54
+ };
55
+ });
56
+
57
+ //#endregion
58
+ init_ExpandableFilterGroup();
59
+ export { ExpandableFilterGroup, init_ExpandableFilterGroup };
@@ -0,0 +1,13 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { AnyObject, FilterComponentProps, FilterConfig } from '../types';
3
+ export type DrawerProps<V extends AnyObject = AnyObject> = {
4
+ config: FilterConfig<V>[];
5
+ components?: Record<string, ComponentType<FilterComponentProps>>;
6
+ labels: {
7
+ submit: string;
8
+ clear: string;
9
+ drawerHeader: string;
10
+ };
11
+ };
12
+ export declare const FiltersDrawer: <V extends AnyObject>({ config, components, labels }: DrawerProps<V>) => import("react").JSX.Element | null;
13
+ //# sourceMappingURL=FiltersDrawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FiltersDrawer.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/FiltersDrawer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,OAAO,CAAA;AAKvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAA;AAM/F,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACzD,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAChE,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,SAAS,kCAAkC,WAAW,CAAC,CAAC,CAAC,uCAwFhG,CAAA"}
@@ -0,0 +1,100 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { Stack, init_Stack } from "../../../components/Stack/index.js";
3
+ import { Button, init_Button } from "../../../components/Button/index.js";
4
+ import { Separator, init_Separator } from "../../../components/Separator/index.js";
5
+ import { Drawer, init_Drawer } from "../../../components/Drawer/index.js";
6
+ import { AbstractFilter, init_AbstractFilter } from "./AbstractFilter.js";
7
+ import { ExpandableFilterGroup, init_ExpandableFilterGroup } from "./ExpandableFilterGroup.js";
8
+ import { init_helpers, isFilterConfigGroup } from "./helpers.js";
9
+ import { init_FiltersProvider, useFiltersContext } from "./FiltersProvider.js";
10
+ import { useId } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+
13
+ //#region src/compositions/Filters/parts/FiltersDrawer.tsx
14
+ var FiltersDrawer;
15
+ var init_FiltersDrawer = __esmMin(() => {
16
+ init_Button();
17
+ init_Drawer();
18
+ init_Separator();
19
+ init_Stack();
20
+ init_AbstractFilter();
21
+ init_ExpandableFilterGroup();
22
+ init_FiltersProvider();
23
+ init_helpers();
24
+ FiltersDrawer = ({ config, components, labels }) => {
25
+ const formId = useId();
26
+ const { filters, closeDrawer, isDrawerOpen } = useFiltersContext();
27
+ const drawerFilters = config.filter((item) => !item.hideInDrawer);
28
+ const createResetHandler = (configItem) => {
29
+ let fieldsToReset = [];
30
+ if (isFilterConfigGroup(configItem)) fieldsToReset = configItem.items.map((item) => item.name).filter((name) => filters.dirtyFilters.includes(name));
31
+ else if (filters.dirtyFilters.includes(configItem.name)) fieldsToReset = [configItem.name];
32
+ return fieldsToReset.length > 0 ? () => filters.resetFields(fieldsToReset) : void 0;
33
+ };
34
+ if (drawerFilters.length === 0) return null;
35
+ return /* @__PURE__ */ jsx(Drawer, {
36
+ footer: /* @__PURE__ */ jsx(Button, {
37
+ render: /* @__PURE__ */ jsx("button", {
38
+ form: formId,
39
+ type: "submit"
40
+ }),
41
+ children: labels.submit
42
+ }),
43
+ header: labels.drawerHeader,
44
+ hideOnClickOutside: false,
45
+ onClose: () => {
46
+ filters.discard();
47
+ closeDrawer();
48
+ },
49
+ open: isDrawerOpen,
50
+ separator: true,
51
+ size: "small",
52
+ children: /* @__PURE__ */ jsx("form", {
53
+ id: formId,
54
+ onSubmit: (event) => {
55
+ event.preventDefault();
56
+ event.stopPropagation();
57
+ filters.submit();
58
+ closeDrawer();
59
+ },
60
+ children: /* @__PURE__ */ jsx(Stack, {
61
+ gap: 2,
62
+ children: drawerFilters.map((configItem, index) => /* @__PURE__ */ jsxs(Stack, {
63
+ gap: 2,
64
+ children: [index > 0 ? /* @__PURE__ */ jsx(Separator, {}) : null, /* @__PURE__ */ jsx(ExpandableFilterGroup, {
65
+ clearText: labels.clear,
66
+ label: configItem.label,
67
+ defaultExpanded: configItem.expanded,
68
+ onReset: createResetHandler(configItem),
69
+ children: isFilterConfigGroup(configItem) ? /* @__PURE__ */ jsx(Stack, {
70
+ gap: 2,
71
+ children: configItem.items.filter((item) => !item.hideInDrawer).map((subConfigItem) => /* @__PURE__ */ jsx(AbstractFilter, {
72
+ config: subConfigItem,
73
+ directionContext: "column",
74
+ size: "large",
75
+ onChange: (value) => filters.setValue(subConfigItem.name, value),
76
+ value: filters.values[subConfigItem.name],
77
+ values: filters.values,
78
+ customComponents: components
79
+ }, subConfigItem.name))
80
+ }) : /* @__PURE__ */ jsx(AbstractFilter, {
81
+ config: configItem,
82
+ directionContext: "column",
83
+ size: "large",
84
+ hideLabel: true,
85
+ onChange: (value) => filters.setValue(configItem.name, value),
86
+ value: filters.values[configItem.name],
87
+ values: filters.values,
88
+ customComponents: components
89
+ })
90
+ })]
91
+ }, isFilterConfigGroup(configItem) ? configItem.label : configItem.name))
92
+ })
93
+ })
94
+ });
95
+ };
96
+ });
97
+
98
+ //#endregion
99
+ init_FiltersDrawer();
100
+ export { FiltersDrawer, init_FiltersDrawer };
@@ -0,0 +1,19 @@
1
+ import type { ComponentProps, ComponentType } from 'react';
2
+ import { Row } from '../../../components/Row';
3
+ import type { AnyObject, FilterComponentProps, FilterConfig } from '../types';
4
+ export type MainRowProps<V extends AnyObject = AnyObject> = {
5
+ config: FilterConfig<V>[];
6
+ components?: Record<string, ComponentType<FilterComponentProps>>;
7
+ labels: {
8
+ seeAll?: string;
9
+ clearAll: string;
10
+ };
11
+ layout?: {
12
+ mainFilters?: (keyof V)[];
13
+ size?: 'large' | 'medium';
14
+ templateColumns?: ComponentProps<typeof Row>['templateColumns'];
15
+ };
16
+ className?: string;
17
+ };
18
+ export declare const FiltersMainRow: <V extends AnyObject>({ config, components, labels, layout, className, }: MainRowProps<V>) => import("react").JSX.Element;
19
+ //# sourceMappingURL=FiltersMainRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FiltersMainRow.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/FiltersMainRow.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM7E,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IAC1D,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAChE,MAAM,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;QACzB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;QACzB,eAAe,CAAC,EAAE,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAA;KAChE,CAAA;IACD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,SAAS,sDAM/C,YAAY,CAAC,CAAC,CAAC,gCA4DjB,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { Stack, init_Stack } from "../../../components/Stack/index.js";
3
+ import { Button, init_Button } from "../../../components/Button/index.js";
4
+ import { Row, init_Row } from "../../../components/Row/index.js";
5
+ import { AbstractFilter, init_AbstractFilter } from "./AbstractFilter.js";
6
+ import { init_helpers, isFilterConfigGroup } from "./helpers.js";
7
+ import { init_FiltersProvider, useFiltersContext } from "./FiltersProvider.js";
8
+ import { filterStyles, init_styles_css } from "./styles.css.js";
9
+ import { useMemo } from "react";
10
+ import { cn } from "@ultraviolet/utils";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { AdjustmentsHorizontalIcon } from "@ultraviolet/icons";
13
+
14
+ //#region src/compositions/Filters/parts/FiltersMainRow.tsx
15
+ var FiltersMainRow;
16
+ var init_FiltersMainRow = __esmMin(() => {
17
+ init_Button();
18
+ init_Row();
19
+ init_Stack();
20
+ init_AbstractFilter();
21
+ init_FiltersProvider();
22
+ init_helpers();
23
+ init_styles_css();
24
+ FiltersMainRow = ({ config, components, labels, layout, className }) => {
25
+ var _layout$size;
26
+ var _layout$templateColum;
27
+ const { filters, openDrawer } = useFiltersContext();
28
+ const configItems = useMemo(() => config.flatMap((item) => isFilterConfigGroup(item) ? item.items : [item]), [config]);
29
+ const mainFiltersNames = useMemo(() => {
30
+ var _layout$mainFilters;
31
+ return (_layout$mainFilters = layout === null || layout === void 0 ? void 0 : layout.mainFilters) !== null && _layout$mainFilters !== void 0 ? _layout$mainFilters : configItems.map((item) => item.name).slice(0, 3);
32
+ }, [configItems, layout]);
33
+ const mainFilters = useMemo(() => mainFiltersNames.map((name) => configItems.find((item) => item.name === name)).filter((item) => item !== void 0), [mainFiltersNames, configItems]);
34
+ const shouldDisplayDrawer = configItems.some((item) => !mainFiltersNames.includes(item.name));
35
+ const defaultSize = mainFilters.some((item) => item.type === "slider") ? "large" : "medium";
36
+ const filterSize = (_layout$size = layout === null || layout === void 0 ? void 0 : layout.size) !== null && _layout$size !== void 0 ? _layout$size : defaultSize;
37
+ const handleMainFilterChange = (key, value) => {
38
+ filters.setValue(key, value);
39
+ filters.submit({ [key]: value });
40
+ };
41
+ const handleReset = () => {
42
+ filters.reset();
43
+ filters.submit(filters.defaultValues);
44
+ };
45
+ return /* @__PURE__ */ jsxs(Row, {
46
+ className: cn(filterStyles.mainRow, className),
47
+ alignItems: "end",
48
+ gap: 2,
49
+ templateColumns: (_layout$templateColum = layout === null || layout === void 0 ? void 0 : layout.templateColumns) !== null && _layout$templateColum !== void 0 ? _layout$templateColum : "repeat(auto-fit, minmax(200px, 1fr))",
50
+ children: [mainFilters.map((configItem) => /* @__PURE__ */ jsx(AbstractFilter, {
51
+ value: filters.lastSubmittedValues[configItem.name],
52
+ values: filters.lastSubmittedValues,
53
+ config: configItem,
54
+ size: filterSize,
55
+ directionContext: "row",
56
+ onChange: (value) => handleMainFilterChange(configItem.name, value),
57
+ customComponents: components
58
+ }, configItem.name)), /* @__PURE__ */ jsxs(Stack, {
59
+ direction: "row",
60
+ gap: 2,
61
+ alignItems: "center",
62
+ children: [shouldDisplayDrawer ? /* @__PURE__ */ jsxs(Button, {
63
+ onClick: openDrawer,
64
+ size: filterSize,
65
+ variant: "outlined",
66
+ children: [
67
+ /* @__PURE__ */ jsx(AdjustmentsHorizontalIcon, { "aria-hidden": "true" }),
68
+ " ",
69
+ labels.seeAll,
70
+ filters.appliedFilters.length > 0 ? ` (${filters.appliedFilters.length})` : null
71
+ ]
72
+ }) : null, /* @__PURE__ */ jsx(Button, {
73
+ onClick: handleReset,
74
+ size: filterSize,
75
+ variant: "ghost",
76
+ children: labels.clearAll
77
+ })]
78
+ })]
79
+ });
80
+ };
81
+ });
82
+
83
+ //#endregion
84
+ init_FiltersMainRow();
85
+ export { FiltersMainRow, init_FiltersMainRow };
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AnyObject } from '../types';
3
+ import type { UseFiltersParams, UseFiltersReturn } from './useFilters';
4
+ export type FiltersProviderProps<V extends AnyObject = AnyObject> = UseFiltersParams<V> & {
5
+ onDrawerOpen?: (values: V) => void;
6
+ };
7
+ export type FiltersContextValue<V extends AnyObject = AnyObject> = {
8
+ filters: UseFiltersReturn<V>;
9
+ isDrawerOpen: boolean;
10
+ openDrawer: () => void;
11
+ closeDrawer: () => void;
12
+ };
13
+ export declare const FiltersProvider: <V extends AnyObject = AnyObject>({ children, defaultValues: initialDefaultValues, initialValues, onChange, onSubmit, onDrawerOpen, }: FiltersProviderProps<V> & {
14
+ children: ReactNode | ((ctx: FiltersContextValue<V>) => ReactNode);
15
+ }) => import("react").JSX.Element;
16
+ export declare const useFiltersContext: <V extends AnyObject>() => FiltersContextValue<V>;
17
+ //# sourceMappingURL=FiltersProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FiltersProvider.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/FiltersProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEtE,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG;IACxF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACjE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAID,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,uGAO5D,oBAAoB,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;CAAE,gCA6BlG,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,SAAS,OAAK,mBAAmB,CAAC,CAAC,CAM9E,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { init_useFilters, useFilters } from "./useFilters.js";
3
+ import { createContext, useCallback, useContext, useMemo, useState } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/compositions/Filters/parts/FiltersProvider.tsx
7
+ var FiltersContext, FiltersProvider, useFiltersContext;
8
+ var init_FiltersProvider = __esmMin(() => {
9
+ init_useFilters();
10
+ FiltersContext = createContext(null);
11
+ FiltersProvider = ({ children, defaultValues: initialDefaultValues, initialValues, onChange, onSubmit, onDrawerOpen }) => {
12
+ const filters = useFilters({
13
+ initialValues,
14
+ defaultValues: initialDefaultValues,
15
+ onChange,
16
+ onSubmit
17
+ });
18
+ const [isDrawerOpen, setIsDrawerOpen] = useState(false);
19
+ const openDrawer = useCallback(() => {
20
+ setIsDrawerOpen(true);
21
+ onDrawerOpen === null || onDrawerOpen === void 0 || onDrawerOpen(filters.values);
22
+ }, [
23
+ onDrawerOpen,
24
+ setIsDrawerOpen,
25
+ filters.values
26
+ ]);
27
+ const closeDrawer = useCallback(() => {
28
+ setIsDrawerOpen(false);
29
+ }, [setIsDrawerOpen]);
30
+ const value = useMemo(() => ({
31
+ filters,
32
+ isDrawerOpen,
33
+ openDrawer,
34
+ closeDrawer
35
+ }), [
36
+ filters,
37
+ isDrawerOpen,
38
+ openDrawer,
39
+ closeDrawer
40
+ ]);
41
+ return /* @__PURE__ */ jsx(FiltersContext.Provider, {
42
+ value,
43
+ children: typeof children === "function" ? children(value) : children
44
+ });
45
+ };
46
+ useFiltersContext = () => {
47
+ const context = useContext(FiltersContext);
48
+ if (!context) throw new Error("useFiltersContext must be used within a FiltersProvider");
49
+ return context;
50
+ };
51
+ });
52
+
53
+ //#endregion
54
+ init_FiltersProvider();
55
+ export { FiltersProvider, init_FiltersProvider, useFiltersContext };
@@ -0,0 +1,5 @@
1
+ import type { AnyObject, FilterConfig, FilterConfigGroup } from '../types';
2
+ export declare const isFilterConfigGroup: <V extends AnyObject>(item: FilterConfig<V>) => item is FilterConfigGroup<V>;
3
+ export declare const getKeysWithDifferentValues: <Values extends AnyObject>(a?: Values, b?: Values) => (keyof Values)[];
4
+ export declare const isSameValues: <Values extends AnyObject>(a?: Values, b?: Values) => boolean;
5
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE1E,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,SAAS,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAG,IAAI,IAAI,iBAAiB,CAAC,CAAC,CACrF,CAAA;AAEvB,eAAO,MAAM,0BAA0B,GAAI,MAAM,SAAS,SAAS,MAAM,MAAM,MAAM,MAAM,KAAG,CAAC,MAAM,MAAM,CAAC,EAgD3G,CAAA;AAID,eAAO,MAAM,YAAY,GAAI,MAAM,SAAS,SAAS,MAAM,MAAM,MAAM,MAAM,YAa5E,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+
3
+ //#region src/compositions/Filters/parts/helpers.ts
4
+ var isFilterConfigGroup, getKeysWithDifferentValues, isSameValues;
5
+ var init_helpers = __esmMin(() => {
6
+ isFilterConfigGroup = (item) => item.type === "group";
7
+ getKeysWithDifferentValues = (a, b) => {
8
+ if (a === b) return [];
9
+ if (!a || !b) return [];
10
+ const keysA = Object.keys(a);
11
+ const keysB = Object.keys(b);
12
+ return keysA.filter((_, i) => {
13
+ const keyA = keysA[i];
14
+ const keyB = keysB[i];
15
+ if (!Object.hasOwn(b, keyA)) return true;
16
+ if (!Object.hasOwn(a, keyB)) return true;
17
+ const valueA = a[keyA];
18
+ const valueB = b[keyA];
19
+ if (valueA === valueB) return false;
20
+ if (Array.isArray(valueA) && Array.isArray(valueB)) {
21
+ if (valueA.length !== valueB.length) return true;
22
+ if (valueA.length === 2 && valueB.length === 2 && (valueA[0] !== valueB[0] || valueA[1] !== valueB[1])) return true;
23
+ return !valueA.every((aValueInValueA) => valueB.includes(aValueInValueA));
24
+ }
25
+ return true;
26
+ });
27
+ };
28
+ isSameValues = (a, b) => {
29
+ if (a === b) return true;
30
+ if (!a || !b) return false;
31
+ if (Object.keys(a).length !== Object.keys(b).length) return false;
32
+ return getKeysWithDifferentValues(a, b).length === 0;
33
+ };
34
+ });
35
+
36
+ //#endregion
37
+ init_helpers();
38
+ export { getKeysWithDifferentValues, init_helpers, isFilterConfigGroup, isSameValues };
@@ -0,0 +1,40 @@
1
+ import type { AnyObject } from '../types';
2
+ export type FiltersState<V extends AnyObject> = {
3
+ values: V;
4
+ lastSubmittedValues: V;
5
+ defaultValues: V;
6
+ };
7
+ export type FiltersAction<V extends AnyObject> = {
8
+ type: 'SET_VALUE';
9
+ payload: {
10
+ name: keyof V;
11
+ value: unknown;
12
+ };
13
+ } | {
14
+ type: 'SET_VALUES';
15
+ payload: {
16
+ values: Partial<V>;
17
+ };
18
+ } | {
19
+ type: 'RESET_FIELD';
20
+ payload: {
21
+ name: keyof V;
22
+ defaultValue?: V[keyof V];
23
+ };
24
+ } | {
25
+ type: 'RESET_FIELDS';
26
+ payload: {
27
+ names: (keyof V)[];
28
+ };
29
+ } | {
30
+ type: 'RESET';
31
+ payload: {
32
+ values?: Partial<V>;
33
+ };
34
+ } | {
35
+ type: 'SUBMIT';
36
+ } | {
37
+ type: 'DISCARD';
38
+ };
39
+ export declare const filtersReducer: <V extends AnyObject>(state: FiltersState<V>, action: FiltersAction<V>) => FiltersState<V>;
40
+ //# sourceMappingURL=reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGzC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,SAAS,IAAI;IAC9C,MAAM,EAAE,CAAC,CAAA;IACT,mBAAmB,EAAE,CAAC,CAAA;IACtB,aAAa,EAAE,CAAC,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,IACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;KAAE,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAavB,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,SAAS,SACzC,YAAY,CAAC,CAAC,CAAC,UACd,aAAa,CAAC,CAAC,CAAC,KACvB,YAAY,CAAC,CAAC,CAuFhB,CAAA"}
@@ -0,0 +1,50 @@
1
+ import { __esmMin, __name } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { _objectSpread2, init_objectSpread2 } from "../../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
3
+ import { init_helpers, isSameValues } from "./helpers.js";
4
+
5
+ //#region src/compositions/Filters/parts/reducer.ts
6
+ var getNewState, filtersReducer;
7
+ var init_reducer = __esmMin(() => {
8
+ init_helpers();
9
+ init_objectSpread2();
10
+ getNewState = (newValues, state) => {
11
+ if (isSameValues(newValues, state.values)) return state;
12
+ return _objectSpread2(_objectSpread2({}, state), {}, { values: newValues });
13
+ };
14
+ filtersReducer = (state, action) => {
15
+ switch (action.type) {
16
+ case "SET_VALUE": return getNewState(_objectSpread2(_objectSpread2({}, state.values), {}, { [action.payload.name]: action.payload.value }), state);
17
+ case "SET_VALUES": return getNewState(_objectSpread2(_objectSpread2({}, state.values), action.payload.values), state);
18
+ case "RESET_FIELD": {
19
+ const newDefaultValue = action.payload.defaultValue === void 0 ? state.defaultValues[action.payload.name] : action.payload.defaultValue;
20
+ const newValues = _objectSpread2(_objectSpread2({}, state.values), {}, { [action.payload.name]: newDefaultValue });
21
+ const newDefaultValues = _objectSpread2(_objectSpread2({}, state.defaultValues), {}, { [action.payload.name]: newDefaultValue });
22
+ if (isSameValues(newValues, state.values) && isSameValues(newDefaultValues, state.defaultValues)) return state;
23
+ return _objectSpread2(_objectSpread2({}, state), {}, {
24
+ values: newValues,
25
+ defaultValues: newDefaultValues
26
+ });
27
+ }
28
+ case "RESET_FIELDS": {
29
+ const newValues = _objectSpread2({}, state.values);
30
+ for (const key of action.payload.names) newValues[key] = state.defaultValues[key];
31
+ return getNewState(newValues, state);
32
+ }
33
+ case "RESET": {
34
+ const newDefaultValues = _objectSpread2(_objectSpread2({}, state.defaultValues), action.payload.values);
35
+ if (isSameValues(newDefaultValues, state.values) && isSameValues(newDefaultValues, state.defaultValues)) return state;
36
+ return _objectSpread2(_objectSpread2({}, state), {}, {
37
+ values: newDefaultValues,
38
+ defaultValues: newDefaultValues
39
+ });
40
+ }
41
+ case "SUBMIT": return _objectSpread2(_objectSpread2({}, state), {}, { lastSubmittedValues: state.values });
42
+ case "DISCARD": return getNewState(state.lastSubmittedValues, state);
43
+ default: return state;
44
+ }
45
+ };
46
+ });
47
+
48
+ //#endregion
49
+ init_reducer();
50
+ export { filtersReducer, init_reducer };
@@ -0,0 +1,4 @@
1
+ export declare const filterStyles: {
2
+ mainRow: string;
3
+ };
4
+ //# sourceMappingURL=styles.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../../../src/compositions/Filters/parts/styles.css.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY;;CAExB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { init_styles_css_ts_vanilla } from "./styles.css.ts.vanilla.js";
3
+
4
+ //#region src/compositions/Filters/parts/styles.css.ts
5
+ var filterStyles;
6
+ var init_styles_css = __esmMin(() => {
7
+ init_styles_css_ts_vanilla();
8
+ filterStyles = { mainRow: "uv_1mgfhqz0" };
9
+ });
10
+
11
+ //#endregion
12
+ init_styles_css();
13
+ export { filterStyles, init_styles_css };
@@ -0,0 +1,8 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+
3
+ //#region src/compositions/Filters/parts/styles.css.ts.vanilla.css
4
+ var init_styles_css_ts_vanilla = __esmMin(() => {});
5
+
6
+ //#endregion
7
+ init_styles_css_ts_vanilla();
8
+ export { init_styles_css_ts_vanilla };