@faststore/components 2.0.89-alpha.0 → 2.0.91-alpha.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.
Files changed (39) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +1 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/organisms/Filter/Filter.d.ts +26 -0
  5. package/dist/organisms/Filter/Filter.js +9 -0
  6. package/dist/organisms/Filter/Filter.js.map +1 -0
  7. package/dist/organisms/Filter/FilterFacetBoolean.d.ts +5 -0
  8. package/dist/organisms/Filter/FilterFacetBoolean.js +7 -0
  9. package/dist/organisms/Filter/FilterFacetBoolean.js.map +1 -0
  10. package/dist/organisms/Filter/FilterFacetBooleanItem.d.ts +38 -0
  11. package/dist/organisms/Filter/FilterFacetBooleanItem.js +12 -0
  12. package/dist/organisms/Filter/FilterFacetBooleanItem.js.map +1 -0
  13. package/dist/organisms/Filter/FilterFacetRange.d.ts +32 -0
  14. package/dist/organisms/Filter/FilterFacetRange.js +11 -0
  15. package/dist/organisms/Filter/FilterFacetRange.js.map +1 -0
  16. package/dist/organisms/Filter/FilterFacets.d.ts +21 -0
  17. package/dist/organisms/Filter/FilterFacets.js +9 -0
  18. package/dist/organisms/Filter/FilterFacets.js.map +1 -0
  19. package/dist/organisms/Filter/FilterSlider.d.ts +31 -0
  20. package/dist/organisms/Filter/FilterSlider.js +22 -0
  21. package/dist/organisms/Filter/FilterSlider.js.map +1 -0
  22. package/dist/organisms/Filter/index.d.ts +11 -0
  23. package/dist/organisms/Filter/index.js +7 -0
  24. package/dist/organisms/Filter/index.js.map +1 -0
  25. package/dist/organisms/SlideOver/SlideOver.d.ts +2 -2
  26. package/dist/organisms/SlideOver/SlideOver.js.map +1 -1
  27. package/dist/organisms/SlideOver/index.d.ts +1 -1
  28. package/dist/organisms/SlideOver/index.js.map +1 -1
  29. package/package.json +4 -4
  30. package/src/index.ts +16 -0
  31. package/src/organisms/Filter/Filter.tsx +50 -0
  32. package/src/organisms/Filter/FilterFacetBoolean.tsx +8 -0
  33. package/src/organisms/Filter/FilterFacetBooleanItem.tsx +72 -0
  34. package/src/organisms/Filter/FilterFacetRange.tsx +58 -0
  35. package/src/organisms/Filter/FilterFacets.tsx +47 -0
  36. package/src/organisms/Filter/FilterSlider.tsx +90 -0
  37. package/src/organisms/Filter/index.ts +12 -0
  38. package/src/organisms/SlideOver/SlideOver.tsx +4 -4
  39. package/src/organisms/SlideOver/index.ts +3 -2
package/dist/index.d.ts CHANGED
@@ -94,6 +94,8 @@ export { default as ToggleField } from './molecules/ToggleField';
94
94
  export type { ToggleFieldProps } from './molecules/ToggleField';
95
95
  export { default as QuantitySelector } from './molecules/QuantitySelector';
96
96
  export type { QuantitySelectorProps } from './molecules/QuantitySelector';
97
+ export { default as Filter, FilterFacetBoolean, FilterFacetBooleanItem, FilterFacetRange, FilterFacets, FilterSlider } from './organisms/Filter';
98
+ export type { FilterFacetBooleanItemProps, FilterFacetRangeProps, FilterFacetsProps, FilterProps, FilterSliderProps } from './organisms/Filter';
97
99
  export { default as Hero, HeroImage, HeroHeader } from './organisms/Hero';
98
100
  export type { HeroProps, HeroImageProps, HeroHeaderProps, } from './organisms/Hero';
99
101
  export { default as OutOfStock } from './organisms/OutOfStock';
package/dist/index.js CHANGED
@@ -54,6 +54,7 @@ export { default as Toggle } from './molecules/Toggle';
54
54
  export { default as ToggleField } from './molecules/ToggleField';
55
55
  export { default as QuantitySelector } from './molecules/QuantitySelector';
56
56
  // Organisms
57
+ export { default as Filter, FilterFacetBoolean, FilterFacetBooleanItem, FilterFacetRange, FilterFacets, FilterSlider } from './organisms/Filter';
57
58
  export { default as Hero, HeroImage, HeroHeader } from './organisms/Hero';
58
59
  export { default as OutOfStock } from './organisms/OutOfStock';
59
60
  export { default as PaymentMethods } from './organisms/PaymentMethods';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export type OnFacetChange = (item: {
3
+ key: string;
4
+ value: string;
5
+ }, type: 'BOOLEAN' | 'RANGE') => void;
6
+ export interface FilterProps {
7
+ /**
8
+ * ID to find this component in testing tools (e.g.: cypress,
9
+ * testing-library, and jest).
10
+ */
11
+ testId: string;
12
+ /**
13
+ * Title for the `Filter` component.
14
+ */
15
+ title?: string;
16
+ /**
17
+ * The expanded items from the `Accordion`.
18
+ */
19
+ indicesExpanded: Set<number>;
20
+ /**
21
+ * This function is called when `Accordion` is expanded or collapsed.
22
+ */
23
+ onAccordionChange: (index: number) => void;
24
+ }
25
+ declare function Filter({ testId, title, indicesExpanded, onAccordionChange, children, }: PropsWithChildren<FilterProps>): JSX.Element;
26
+ export default Filter;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { Accordion } from '../../';
3
+ function Filter({ testId, title, indicesExpanded, onAccordionChange, children, }) {
4
+ return (React.createElement("div", { "data-fs-filter": true, "data-testid": testId },
5
+ React.createElement("h2", { "data-fs-filter-title": true }, title),
6
+ React.createElement(Accordion, { indices: indicesExpanded, onChange: onAccordionChange, "data-fs-filter-accordion": true }, children)));
7
+ }
8
+ export default Filter;
9
+ //# sourceMappingURL=Filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../../src/organisms/Filter/Filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AA2BlC,SAAS,MAAM,CAAC,EACd,MAAM,EACN,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,QAAQ,GACuB;IAC/B,OAAO,CACL,oEAAiC,MAAM;QACrC,4DAA0B,KAAK,CAAM;QACrC,oBAAC,SAAS,IACR,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,iBAAiB,sCAG1B,QAAQ,CACC,CACR,CACP,CAAA;AACH,CAAC;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ declare function FilterFacetBoolean({ children }: {
3
+ children: ReactNode;
4
+ }): JSX.Element;
5
+ export default FilterFacetBoolean;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { List } from '../../';
3
+ function FilterFacetBoolean({ children }) {
4
+ return React.createElement(List, { "data-fs-filter-list": true }, children);
5
+ }
6
+ export default FilterFacetBoolean;
7
+ //# sourceMappingURL=FilterFacetBoolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterFacetBoolean.js","sourceRoot":"","sources":["../../../src/organisms/Filter/FilterFacetBoolean.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,SAAS,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IAC/D,OAAO,oBAAC,IAAI,mCAAsB,QAAQ,CAAQ,CAAA;AACpD,CAAC;AAED,eAAe,kBAAkB,CAAA"}
@@ -0,0 +1,38 @@
1
+ /// <reference types="react" />
2
+ import { OnFacetChange } from './Filter';
3
+ export interface FilterFacetBooleanItemProps {
4
+ /**
5
+ * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).
6
+ */
7
+ testId: string;
8
+ /**
9
+ * The text displayed to identify the Boolean Facet Item.
10
+ */
11
+ label: string;
12
+ /**
13
+ * Value to be emitted when Checkbox is clicked.
14
+ */
15
+ value: string;
16
+ /**
17
+ * Boolean that represents the Checkbox checked state.
18
+ */
19
+ selected: boolean;
20
+ /**
21
+ * Counter badge shown besides the Facet Item.
22
+ */
23
+ quantity: number;
24
+ /**
25
+ * ID to identify the Checkbox and corresponding label.
26
+ */
27
+ id: string;
28
+ /**
29
+ * String that identifies the current Facet key.
30
+ */
31
+ facetKey: string;
32
+ /**
33
+ * This function is called when `Checkbox` from the facet changes.
34
+ */
35
+ onFacetChange: OnFacetChange;
36
+ }
37
+ declare function FilterFacetBooleanItem({ testId, id, selected, value, quantity, facetKey, label, onFacetChange, }: FilterFacetBooleanItemProps): JSX.Element;
38
+ export default FilterFacetBooleanItem;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { Badge, Checkbox, Label } from '../..';
3
+ function FilterFacetBooleanItem({ testId, id, selected, value, quantity, facetKey, label, onFacetChange, }) {
4
+ return (React.createElement("li", { key: id, "data-fs-filter-list-item": true },
5
+ React.createElement(Checkbox, { id: id, checked: selected, onChange: () => onFacetChange({ key: facetKey, value }, 'BOOLEAN'), "data-fs-filter-list-item-checkbox": true, "data-testid": `${testId}-accordion-panel-checkbox`, "data-value": value, "data-quantity": quantity }),
6
+ React.createElement(Label, { htmlFor: id, className: "text__title-mini-alt", "data-fs-filter-list-item-label": true },
7
+ label,
8
+ " ",
9
+ React.createElement(Badge, { "data-fs-filter-list-item-badge": true }, quantity))));
10
+ }
11
+ export default FilterFacetBooleanItem;
12
+ //# sourceMappingURL=FilterFacetBooleanItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterFacetBooleanItem.js","sourceRoot":"","sources":["../../../src/organisms/Filter/FilterFacetBooleanItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAsC9C,SAAS,sBAAsB,CAAC,EAC9B,MAAM,EACN,EAAE,EACF,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,aAAa,GACe;IAC5B,OAAO,CACL,4BAAI,GAAG,EAAE,EAAE;QACT,oBAAC,QAAQ,IACP,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,4DAErD,GAAG,MAAM,2BAA2B,gBACrC,KAAK,mBACF,QAAQ,GACvB;QACF,oBAAC,KAAK,IACJ,OAAO,EAAE,EAAE,EACX,SAAS,EAAC,sBAAsB;YAG/B,KAAK;;YAAE,oBAAC,KAAK,8CAAiC,QAAQ,CAAS,CAC1D,CACL,CACN,CAAA;AACH,CAAC;AAED,eAAe,sBAAsB,CAAA"}
@@ -0,0 +1,32 @@
1
+ /// <reference types="react" />
2
+ import { OnFacetChange } from './Filter';
3
+ export interface FilterFacetRangeProps {
4
+ /**
5
+ * The minimum value of the Slider Range Facet
6
+ */
7
+ min: {
8
+ selected: number;
9
+ absolute: number;
10
+ };
11
+ /**
12
+ * The maximum value of the Slider Range Facet
13
+ */
14
+ max: {
15
+ selected: number;
16
+ absolute: number;
17
+ };
18
+ /**
19
+ * String that identifies the current Facet key.
20
+ */
21
+ facetKey: string;
22
+ /**
23
+ * Formatter function that transforms the raw price value and render the result.
24
+ */
25
+ formatter: (price: number) => string;
26
+ /**
27
+ * This function is called when `Checkbox` from the facet changes.
28
+ */
29
+ onFacetChange: OnFacetChange;
30
+ }
31
+ declare function FilterFacetRange({ min, max, formatter, facetKey, onFacetChange, }: FilterFacetRangeProps): JSX.Element;
32
+ export default FilterFacetRange;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { PriceRange } from '../..';
3
+ const formatRange = (min, max) => `${min.toFixed(2)}-to-${max.toFixed(2)}`;
4
+ function FilterFacetRange({ min, max, formatter, facetKey, onFacetChange, }) {
5
+ return (React.createElement(PriceRange, { "data-fs-filter-facet-range": true, min: min, max: max, formatter: formatter, step: 1, onEnd: (v) => onFacetChange({
6
+ key: facetKey,
7
+ value: formatRange(v.min, v.max),
8
+ }, 'RANGE') }));
9
+ }
10
+ export default FilterFacetRange;
11
+ //# sourceMappingURL=FilterFacetRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterFacetRange.js","sourceRoot":"","sources":["../../../src/organisms/Filter/FilterFacetRange.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AA0BlC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAC/C,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAE1C,SAAS,gBAAgB,CAAC,EACxB,GAAG,EACH,GAAG,EACH,SAAS,EACT,QAAQ,EACR,aAAa,GACS;IACtB,OAAO,CACL,oBAAC,UAAU,wCAET,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,aAAa,CACX;YACE,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;SACjC,EACD,OAAO,CACR,GAEH,CACH,CAAA;AACH,CAAC;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export interface FilterFacetsProps {
3
+ /**
4
+ * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).
5
+ */
6
+ testId: string;
7
+ /**
8
+ * Current Facet's position in a list of facets.
9
+ */
10
+ index: number;
11
+ /**
12
+ * Current Facet's type, usually `StoreFacetBoolean` or `StoreFacetRange`.
13
+ */
14
+ type: string;
15
+ /**
16
+ * The text displayed to identify the Facet.
17
+ */
18
+ label: string;
19
+ }
20
+ declare function FilterFacets({ testId, label, index, children, type, }: PropsWithChildren<FilterFacetsProps>): JSX.Element;
21
+ export default FilterFacets;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { AccordionButton, AccordionItem, AccordionPanel } from '../..';
3
+ function FilterFacets({ testId, label, index, children, type, }) {
4
+ return (React.createElement(AccordionItem, { key: `${label}-${index}`, prefixId: testId, testId: `${testId}-accordion`, index: index, "data-type": type, "data-fs-filter-accordion-item": true },
5
+ React.createElement(AccordionButton, { testId: `${testId}-accordion-button` }, label),
6
+ React.createElement(AccordionPanel, null, children)));
7
+ }
8
+ export default FilterFacets;
9
+ //# sourceMappingURL=FilterFacets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterFacets.js","sourceRoot":"","sources":["../../../src/organisms/Filter/FilterFacets.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAqBtE,SAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,GACiC;IACrC,OAAO,CACL,oBAAC,aAAa,IACZ,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,EAAE,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,MAAM,YAAY,EAC7B,KAAK,EAAE,KAAK,eACD,IAAI;QAGf,oBAAC,eAAe,IAAC,MAAM,EAAE,GAAG,MAAM,mBAAmB,IAClD,KAAK,CACU;QAClB,oBAAC,cAAc,QAAE,QAAQ,CAAkB,CAC7B,CACjB,CAAA;AACH,CAAC;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { ButtonProps } from '../../';
3
+ import { SlideOverDirection, SlideOverWidthSize } from '../SlideOver';
4
+ export interface FilterSliderProps {
5
+ /**
6
+ * Title for the FilterSlider component.
7
+ */
8
+ title?: string;
9
+ /**
10
+ * Props for the Clear Button from FilterSlider component.
11
+ */
12
+ clearBtnProps?: Partial<ButtonProps>;
13
+ /**
14
+ * Props for the Apply Button from FilterSlider component.
15
+ */
16
+ applyBtnProps?: Partial<ButtonProps>;
17
+ /**
18
+ * Function called when close button is clicked.
19
+ */
20
+ onClose: () => void;
21
+ /**
22
+ * Represents the side that the FilterSlider comes from.
23
+ */
24
+ direction: SlideOverDirection;
25
+ /**
26
+ * Represents the size of the FilterSlider.
27
+ */
28
+ size: SlideOverWidthSize;
29
+ }
30
+ declare function FilterSlider({ title, clearBtnProps, applyBtnProps, onClose, size, direction, children, }: PropsWithChildren<FilterSliderProps>): JSX.Element;
31
+ export default FilterSlider;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { Button, SlideOver, SlideOverHeader, useFadeEffect, useUI, } from '../../';
3
+ function FilterSlider({ title, clearBtnProps, applyBtnProps, onClose, size, direction, children, }) {
4
+ const { closeFilter } = useUI();
5
+ const { fade, fadeOut } = useFadeEffect();
6
+ return (React.createElement(SlideOver, { "data-fs-filter-slider": true, isOpen: true, fade: fade, onDismiss: fadeOut, size: size, direction: direction, onTransitionEnd: () => fade === 'out' && closeFilter() },
7
+ React.createElement("div", { "data-fs-filter-slider-content": true },
8
+ React.createElement(SlideOverHeader, { onClose: () => {
9
+ onClose();
10
+ fadeOut();
11
+ } },
12
+ React.createElement("h2", { "data-fs-filter-slider-title": true }, title)),
13
+ children),
14
+ React.createElement("footer", { "data-fs-filter-slider-footer": true },
15
+ React.createElement(Button, { "data-fs-filter-slider-footer-button-clear": true, ...clearBtnProps }),
16
+ React.createElement(Button, { "data-fs-filter-slider-footer-button-apply": true, "data-testid": "filter-slider-button-apply", ...applyBtnProps, onClick: (e) => {
17
+ applyBtnProps?.onClick?.(e);
18
+ fadeOut();
19
+ } }))));
20
+ }
21
+ export default FilterSlider;
22
+ //# sourceMappingURL=FilterSlider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterSlider.js","sourceRoot":"","sources":["../../../src/organisms/Filter/FilterSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,OAAO,EACL,MAAM,EAEN,SAAS,EACT,eAAe,EACf,aAAa,EACb,KAAK,GACN,MAAM,QAAQ,CAAA;AA+Bf,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,aAAa,EACb,aAAa,EACb,OAAO,EACP,IAAI,EACJ,SAAS,EACT,QAAQ,GAC6B;IACrC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,CAAA;IAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAA;IAEzC,OAAO,CACL,oBAAC,SAAS,mCAER,MAAM,QACN,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,WAAW,EAAE;QAEtD;YACE,oBAAC,eAAe,IACd,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,EAAE,CAAA;oBACT,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,mEAAiC,KAAK,CAAM,CAC5B;YACjB,QAAQ,CACL;QACN;YACE,oBAAC,MAAM,0DAA+C,aAAa,GAAI;YACvE,oBAAC,MAAM,sEAEO,4BAA4B,KACpC,aAAa,EACjB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;oBAC3B,OAAO,EAAE,CAAA;gBACX,CAAC,GACD,CACK,CACC,CACb,CAAA;AACH,CAAC;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,11 @@
1
+ export { default } from './Filter';
2
+ export type { FilterProps } from './Filter';
3
+ export { default as FilterFacetBoolean } from './FilterFacetBoolean';
4
+ export { default as FilterFacetBooleanItem } from './FilterFacetBooleanItem';
5
+ export type { FilterFacetBooleanItemProps } from './FilterFacetBooleanItem';
6
+ export { default as FilterFacetRange } from './FilterFacetRange';
7
+ export type { FilterFacetRangeProps } from './FilterFacetRange';
8
+ export { default as FilterFacets } from './FilterFacets';
9
+ export type { FilterFacetsProps } from './FilterFacets';
10
+ export { default as FilterSlider } from './FilterSlider';
11
+ export type { FilterSliderProps } from './FilterSlider';
@@ -0,0 +1,7 @@
1
+ export { default } from './Filter';
2
+ export { default as FilterFacetBoolean } from './FilterFacetBoolean';
3
+ export { default as FilterFacetBooleanItem } from './FilterFacetBooleanItem';
4
+ export { default as FilterFacetRange } from './FilterFacetRange';
5
+ export { default as FilterFacets } from './FilterFacets';
6
+ export { default as FilterSlider } from './FilterSlider';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/organisms/Filter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAE5E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ModalProps } from '../../';
3
- type Direction = 'leftSide' | 'rightSide';
4
- type WidthSize = 'full' | 'partial';
3
+ export type Direction = 'leftSide' | 'rightSide';
4
+ export type WidthSize = 'full' | 'partial';
5
5
  export type SlideOverProps = Omit<ModalProps, 'title'> & {
6
6
  /**
7
7
  * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).
@@ -1 +1 @@
1
- {"version":3,"file":"SlideOver.js","sourceRoot":"","sources":["../../../src/organisms/SlideOver/SlideOver.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAmC9B,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,SAAS,GAAG,UAAU,EACtB,IAAI,GAAG,MAAM,EACb,IAAI,GAAG,KAAK,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,GAAG,eAAe,EACxB,GAAG,UAAU,EACE;IACf,OAAO,CACL,oBAAC,KAAK,qBACW,IAAI,8DAEW,SAAS,6BACd,IAAI,8BACH,IAAI,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,KAChB,UAAU,IAEb,QAAQ,CACH,CACT,CAAA;AACH,CAAC;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"SlideOver.js","sourceRoot":"","sources":["../../../src/organisms/SlideOver/SlideOver.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAkC9B,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,SAAS,GAAG,UAAU,EACtB,IAAI,GAAG,MAAM,EACb,IAAI,GAAG,KAAK,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,GAAG,eAAe,EACxB,GAAG,UAAU,EACE;IACf,OAAO,CACL,oBAAC,KAAK,qBACW,IAAI,8DAEW,SAAS,6BACd,IAAI,8BACH,IAAI,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,KAChB,UAAU,IAEb,QAAQ,CACH,CACT,CAAA;AACH,CAAC;AAED,eAAe,SAAS,CAAA"}
@@ -1,4 +1,4 @@
1
- export { default } from './SlideOver';
1
+ export { default, Direction as SlideOverDirection, WidthSize as SlideOverWidthSize } from './SlideOver';
2
2
  export type { SlideOverProps } from './SlideOver';
3
3
  export { default as SlideOverHeader } from './SlideOverHeader';
4
4
  export type { SlideOverHeaderProps } from './SlideOverHeader';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/organisms/SlideOver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGrC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/organisms/SlideOver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAoE,MAAM,aAAa,CAAA;AAEvG,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/components",
3
- "version": "2.0.89-alpha.0",
3
+ "version": "2.0.91-alpha.0",
4
4
  "module": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
6
6
  "author": "Emerson Laurentino @emersonlaurentino",
@@ -21,8 +21,8 @@
21
21
  "src"
22
22
  ],
23
23
  "devDependencies": {
24
- "@faststore/eslint-config": "^2.0.79-alpha.0",
25
- "@faststore/shared": "^2.0.79-alpha.0",
24
+ "@faststore/eslint-config": "^2.0.91-alpha.0",
25
+ "@faststore/shared": "^2.0.91-alpha.0",
26
26
  "eslint": "7.32.0",
27
27
  "typescript": "^4.8.4"
28
28
  },
@@ -30,5 +30,5 @@
30
30
  "node": "16.18.0",
31
31
  "yarn": "1.19.1"
32
32
  },
33
- "gitHead": "110810c0f5ff267980370f556fe7e9ad34e4d68a"
33
+ "gitHead": "837e0d4445c0366c8f99750eed611091e5d68933"
34
34
  }
package/src/index.ts CHANGED
@@ -192,6 +192,22 @@ export { default as QuantitySelector } from './molecules/QuantitySelector'
192
192
  export type { QuantitySelectorProps } from './molecules/QuantitySelector'
193
193
 
194
194
  // Organisms
195
+ export {
196
+ default as Filter,
197
+ FilterFacetBoolean,
198
+ FilterFacetBooleanItem,
199
+ FilterFacetRange,
200
+ FilterFacets,
201
+ FilterSlider
202
+ } from './organisms/Filter'
203
+ export type {
204
+ FilterFacetBooleanItemProps,
205
+ FilterFacetRangeProps,
206
+ FilterFacetsProps,
207
+ FilterProps,
208
+ FilterSliderProps
209
+ } from './organisms/Filter'
210
+
195
211
  export { default as Hero, HeroImage, HeroHeader } from './organisms/Hero'
196
212
  export type {
197
213
  HeroProps,
@@ -0,0 +1,50 @@
1
+ import React, { PropsWithChildren } from 'react'
2
+ import { Accordion } from '../../'
3
+
4
+ export type OnFacetChange = (
5
+ item: { key: string; value: string },
6
+ type: 'BOOLEAN' | 'RANGE'
7
+ ) => void
8
+
9
+ export interface FilterProps {
10
+ /**
11
+ * ID to find this component in testing tools (e.g.: cypress,
12
+ * testing-library, and jest).
13
+ */
14
+ testId: string
15
+ /**
16
+ * Title for the `Filter` component.
17
+ */
18
+ title?: string
19
+ /**
20
+ * The expanded items from the `Accordion`.
21
+ */
22
+ indicesExpanded: Set<number>
23
+ /**
24
+ * This function is called when `Accordion` is expanded or collapsed.
25
+ */
26
+ onAccordionChange: (index: number) => void
27
+ }
28
+
29
+ function Filter({
30
+ testId,
31
+ title,
32
+ indicesExpanded,
33
+ onAccordionChange,
34
+ children,
35
+ }: PropsWithChildren<FilterProps>) {
36
+ return (
37
+ <div data-fs-filter data-testid={testId}>
38
+ <h2 data-fs-filter-title>{title}</h2>
39
+ <Accordion
40
+ indices={indicesExpanded}
41
+ onChange={onAccordionChange}
42
+ data-fs-filter-accordion
43
+ >
44
+ {children}
45
+ </Accordion>
46
+ </div>
47
+ )
48
+ }
49
+
50
+ export default Filter
@@ -0,0 +1,8 @@
1
+ import React, { ReactNode } from 'react'
2
+ import { List } from '../../'
3
+
4
+ function FilterFacetBoolean({ children }: { children: ReactNode }) {
5
+ return <List data-fs-filter-list>{children}</List>
6
+ }
7
+
8
+ export default FilterFacetBoolean
@@ -0,0 +1,72 @@
1
+ import React from 'react'
2
+ import { Badge, Checkbox, Label } from '../..'
3
+ import { OnFacetChange } from './Filter'
4
+
5
+ export interface FilterFacetBooleanItemProps {
6
+ /**
7
+ * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).
8
+ */
9
+ testId: string
10
+ /**
11
+ * The text displayed to identify the Boolean Facet Item.
12
+ */
13
+ label: string
14
+ /**
15
+ * Value to be emitted when Checkbox is clicked.
16
+ */
17
+ value: string
18
+ /**
19
+ * Boolean that represents the Checkbox checked state.
20
+ */
21
+ selected: boolean
22
+ /**
23
+ * Counter badge shown besides the Facet Item.
24
+ */
25
+ quantity: number
26
+ /**
27
+ * ID to identify the Checkbox and corresponding label.
28
+ */
29
+ id: string
30
+ /**
31
+ * String that identifies the current Facet key.
32
+ */
33
+ facetKey: string
34
+ /**
35
+ * This function is called when `Checkbox` from the facet changes.
36
+ */
37
+ onFacetChange: OnFacetChange
38
+ }
39
+
40
+ function FilterFacetBooleanItem({
41
+ testId,
42
+ id,
43
+ selected,
44
+ value,
45
+ quantity,
46
+ facetKey,
47
+ label,
48
+ onFacetChange,
49
+ }: FilterFacetBooleanItemProps) {
50
+ return (
51
+ <li key={id} data-fs-filter-list-item>
52
+ <Checkbox
53
+ id={id}
54
+ checked={selected}
55
+ onChange={() => onFacetChange({ key: facetKey, value }, 'BOOLEAN')}
56
+ data-fs-filter-list-item-checkbox
57
+ data-testid={`${testId}-accordion-panel-checkbox`}
58
+ data-value={value}
59
+ data-quantity={quantity}
60
+ />
61
+ <Label
62
+ htmlFor={id}
63
+ className="text__title-mini-alt"
64
+ data-fs-filter-list-item-label
65
+ >
66
+ {label} <Badge data-fs-filter-list-item-badge>{quantity}</Badge>
67
+ </Label>
68
+ </li>
69
+ )
70
+ }
71
+
72
+ export default FilterFacetBooleanItem
@@ -0,0 +1,58 @@
1
+ import React from 'react'
2
+ import { PriceRange } from '../..'
3
+ import { OnFacetChange } from './Filter'
4
+
5
+ export interface FilterFacetRangeProps {
6
+ /**
7
+ * The minimum value of the Slider Range Facet
8
+ */
9
+ min: { selected: number; absolute: number }
10
+ /**
11
+ * The maximum value of the Slider Range Facet
12
+ */
13
+ max: { selected: number; absolute: number }
14
+ /**
15
+ * String that identifies the current Facet key.
16
+ */
17
+ facetKey: string
18
+ /**
19
+ * Formatter function that transforms the raw price value and render the result.
20
+ */
21
+ formatter: (price: number) => string
22
+ /**
23
+ * This function is called when `Checkbox` from the facet changes.
24
+ */
25
+ onFacetChange: OnFacetChange
26
+ }
27
+
28
+ const formatRange = (min: number, max: number) =>
29
+ `${min.toFixed(2)}-to-${max.toFixed(2)}`
30
+
31
+ function FilterFacetRange({
32
+ min,
33
+ max,
34
+ formatter,
35
+ facetKey,
36
+ onFacetChange,
37
+ }: FilterFacetRangeProps) {
38
+ return (
39
+ <PriceRange
40
+ data-fs-filter-facet-range
41
+ min={min}
42
+ max={max}
43
+ formatter={formatter}
44
+ step={1}
45
+ onEnd={(v) =>
46
+ onFacetChange(
47
+ {
48
+ key: facetKey,
49
+ value: formatRange(v.min, v.max),
50
+ },
51
+ 'RANGE'
52
+ )
53
+ }
54
+ />
55
+ )
56
+ }
57
+
58
+ export default FilterFacetRange
@@ -0,0 +1,47 @@
1
+ import React, { PropsWithChildren } from 'react'
2
+ import { AccordionButton, AccordionItem, AccordionPanel } from '../..'
3
+
4
+ export interface FilterFacetsProps {
5
+ /**
6
+ * ID to find this component in testing tools (e.g.: cypress, testing library, and jest).
7
+ */
8
+ testId: string
9
+ /**
10
+ * Current Facet's position in a list of facets.
11
+ */
12
+ index: number
13
+ /**
14
+ * Current Facet's type, usually `StoreFacetBoolean` or `StoreFacetRange`.
15
+ */
16
+ type: string
17
+ /**
18
+ * The text displayed to identify the Facet.
19
+ */
20
+ label: string
21
+ }
22
+
23
+ function FilterFacets({
24
+ testId,
25
+ label,
26
+ index,
27
+ children,
28
+ type,
29
+ }: PropsWithChildren<FilterFacetsProps>) {
30
+ return (
31
+ <AccordionItem
32
+ key={`${label}-${index}`}
33
+ prefixId={testId}
34
+ testId={`${testId}-accordion`}
35
+ index={index}
36
+ data-type={type}
37
+ data-fs-filter-accordion-item
38
+ >
39
+ <AccordionButton testId={`${testId}-accordion-button`}>
40
+ {label}
41
+ </AccordionButton>
42
+ <AccordionPanel>{children}</AccordionPanel>
43
+ </AccordionItem>
44
+ )
45
+ }
46
+
47
+ export default FilterFacets
@@ -0,0 +1,90 @@
1
+ import React, { PropsWithChildren } from 'react'
2
+
3
+ import {
4
+ Button,
5
+ ButtonProps,
6
+ SlideOver,
7
+ SlideOverHeader,
8
+ useFadeEffect,
9
+ useUI,
10
+ } from '../../'
11
+
12
+ import { SlideOverDirection, SlideOverWidthSize } from '../SlideOver'
13
+
14
+ export interface FilterSliderProps {
15
+ /**
16
+ * Title for the FilterSlider component.
17
+ */
18
+ title?: string
19
+ /**
20
+ * Props for the Clear Button from FilterSlider component.
21
+ */
22
+ clearBtnProps?: Partial<ButtonProps>
23
+ /**
24
+ * Props for the Apply Button from FilterSlider component.
25
+ */
26
+ applyBtnProps?: Partial<ButtonProps>
27
+ /**
28
+ * Function called when close button is clicked.
29
+ */
30
+ onClose: () => void
31
+ /**
32
+ * Represents the side that the FilterSlider comes from.
33
+ */
34
+ direction: SlideOverDirection
35
+ /**
36
+ * Represents the size of the FilterSlider.
37
+ */
38
+ size: SlideOverWidthSize
39
+ }
40
+
41
+ function FilterSlider({
42
+ title,
43
+ clearBtnProps,
44
+ applyBtnProps,
45
+ onClose,
46
+ size,
47
+ direction,
48
+ children,
49
+ }: PropsWithChildren<FilterSliderProps>) {
50
+ const { closeFilter } = useUI()
51
+ const { fade, fadeOut } = useFadeEffect()
52
+
53
+ return (
54
+ <SlideOver
55
+ data-fs-filter-slider
56
+ isOpen
57
+ fade={fade}
58
+ onDismiss={fadeOut}
59
+ size={size}
60
+ direction={direction}
61
+ onTransitionEnd={() => fade === 'out' && closeFilter()}
62
+ >
63
+ <div data-fs-filter-slider-content>
64
+ <SlideOverHeader
65
+ onClose={() => {
66
+ onClose()
67
+ fadeOut()
68
+ }}
69
+ >
70
+ <h2 data-fs-filter-slider-title>{title}</h2>
71
+ </SlideOverHeader>
72
+ {children}
73
+ </div>
74
+ <footer data-fs-filter-slider-footer>
75
+ <Button data-fs-filter-slider-footer-button-clear {...clearBtnProps} />
76
+ <Button
77
+ data-fs-filter-slider-footer-button-apply
78
+ data-testid="filter-slider-button-apply"
79
+ {...applyBtnProps}
80
+ onClick={(e) => {
81
+ applyBtnProps?.onClick?.(e)
82
+ fadeOut()
83
+ }}
84
+ />
85
+ </footer>
86
+ </SlideOver>
87
+ )
88
+ }
89
+
90
+ export default FilterSlider
@@ -0,0 +1,12 @@
1
+ export { default } from './Filter'
2
+ export type { FilterProps } from './Filter'
3
+ export { default as FilterFacetBoolean } from './FilterFacetBoolean'
4
+ export { default as FilterFacetBooleanItem } from './FilterFacetBooleanItem'
5
+ export type { FilterFacetBooleanItemProps } from './FilterFacetBooleanItem'
6
+ export { default as FilterFacetRange } from './FilterFacetRange'
7
+ export type { FilterFacetRangeProps } from './FilterFacetRange'
8
+ export { default as FilterFacets } from './FilterFacets'
9
+ export type { FilterFacetsProps } from './FilterFacets'
10
+ export { default as FilterSlider } from './FilterSlider'
11
+ export type { FilterSliderProps } from './FilterSlider'
12
+
@@ -1,11 +1,11 @@
1
- import React from 'react'
2
1
  import type { ReactNode } from 'react'
2
+ import React from 'react'
3
3
 
4
- import { Modal } from '../../'
5
4
  import type { ModalProps } from '../../'
5
+ import { Modal } from '../../'
6
6
 
7
- type Direction = 'leftSide' | 'rightSide'
8
- type WidthSize = 'full' | 'partial'
7
+ export type Direction = 'leftSide' | 'rightSide'
8
+ export type WidthSize = 'full' | 'partial'
9
9
 
10
10
  export type SlideOverProps = Omit<ModalProps, 'title'> & {
11
11
  /**
@@ -1,5 +1,6 @@
1
- export { default } from './SlideOver'
1
+ export { default, Direction as SlideOverDirection, WidthSize as SlideOverWidthSize } from './SlideOver'
2
2
  export type { SlideOverProps } from './SlideOver'
3
-
4
3
  export { default as SlideOverHeader } from './SlideOverHeader'
5
4
  export type { SlideOverHeaderProps } from './SlideOverHeader'
5
+
6
+