@envive-ai/react-toolkit 0.1.12 → 0.1.13

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 (181) hide show
  1. package/dist/Accordion/index.cjs +3 -3
  2. package/dist/Accordion/index.d.cts +2 -2
  3. package/dist/Accordion/index.d.ts +2 -2
  4. package/dist/Accordion/index.js +3 -3
  5. package/dist/{Accordion-DBZpiQe7.cjs → Accordion-D9gO9_y3.cjs} +1 -1
  6. package/dist/{Accordion-Cp3Hx2zm.js → Accordion-ZEdp99Ph.js} +1 -1
  7. package/dist/AppliedFiltersScrollbar/index.cjs +25 -27
  8. package/dist/AppliedFiltersScrollbar/index.d.cts +2 -2
  9. package/dist/AppliedFiltersScrollbar/index.d.ts +2 -2
  10. package/dist/AppliedFiltersScrollbar/index.js +25 -27
  11. package/dist/ButtonBase/index.cjs +3 -3
  12. package/dist/ButtonBase/index.d.cts +2 -3
  13. package/dist/ButtonBase/index.d.ts +2 -3
  14. package/dist/ButtonBase/index.js +3 -3
  15. package/dist/{ButtonBase-BAf-nlCm.js → ButtonBase-DgRupM53.js} +3 -3
  16. package/dist/{ButtonBase-Do88ndKa.cjs → ButtonBase-DrIwVGTR.cjs} +3 -3
  17. package/dist/DynamicFiltersScrollbar/index.cjs +23 -25
  18. package/dist/DynamicFiltersScrollbar/index.d.cts +2 -2
  19. package/dist/DynamicFiltersScrollbar/index.d.ts +2 -2
  20. package/dist/DynamicFiltersScrollbar/index.js +23 -25
  21. package/dist/DynamicFiltersScrollbar-B1j53y2q.cjs +81 -0
  22. package/dist/DynamicFiltersScrollbar-D7WYp6x9.js +66 -0
  23. package/dist/FilterScrollbar/index.cjs +3 -3
  24. package/dist/FilterScrollbar/index.d.cts +3 -3
  25. package/dist/FilterScrollbar/index.d.ts +3 -3
  26. package/dist/FilterScrollbar/index.js +3 -3
  27. package/dist/Headline/index.cjs +2 -2
  28. package/dist/Headline/index.d.cts +2 -2
  29. package/dist/Headline/index.d.ts +2 -2
  30. package/dist/Headline/index.js +2 -2
  31. package/dist/{Headline-DNEWF8ly.js → Headline-COv0Jbn8.js} +1 -1
  32. package/dist/{Headline-DTT4RSv2.cjs → Headline-Cp79THVF.cjs} +1 -1
  33. package/dist/ImageWithFallback/index.d.cts +2 -2
  34. package/dist/ImageWithFallback/index.d.ts +2 -2
  35. package/dist/ModalSheet/index.d.cts +2 -2
  36. package/dist/ModalSheet/index.d.ts +2 -2
  37. package/dist/ProductCard/index.cjs +4 -4
  38. package/dist/ProductCard/index.d.cts +1 -1
  39. package/dist/ProductCard/index.d.ts +1 -1
  40. package/dist/ProductCard/index.js +4 -4
  41. package/dist/{ProductCard-C3MjnfZJ.js → ProductCard-CNwmHggx.js} +32 -32
  42. package/dist/{ProductCard-FDyIMnZs.cjs → ProductCard-EmdDy2af.cjs} +32 -32
  43. package/dist/ProductGrid/index.cjs +5 -5
  44. package/dist/ProductGrid/index.d.cts +4 -8
  45. package/dist/ProductGrid/index.d.ts +4 -8
  46. package/dist/ProductGrid/index.js +5 -5
  47. package/dist/{ProductGrid-TlntVJ6h.cjs → ProductGrid-CMoomZLc.cjs} +3 -7
  48. package/dist/{ProductGrid-C9OKsyB2.js → ProductGrid-nmWSp0qX.js} +3 -7
  49. package/dist/RadioButton/index.cjs +3 -3
  50. package/dist/RadioButton/index.d.cts +5 -3
  51. package/dist/RadioButton/index.d.ts +5 -3
  52. package/dist/RadioButton/index.js +3 -3
  53. package/dist/{RadioButton-DZ6QXkrN.cjs → RadioButton-BdKJRzLM.cjs} +17 -10
  54. package/dist/{RadioButton-Bf68dZl7.js → RadioButton-S5dALI2f.js} +18 -11
  55. package/dist/RadioButtonGroup/index.cjs +4 -4
  56. package/dist/RadioButtonGroup/index.d.cts +2 -2
  57. package/dist/RadioButtonGroup/index.d.ts +2 -2
  58. package/dist/RadioButtonGroup/index.js +4 -4
  59. package/dist/{RadioButtonGroup-8k7hkJYB.js → RadioButtonGroup-BipNsoHL.js} +2 -1
  60. package/dist/{RadioButtonGroup-Dc_n5amh.cjs → RadioButtonGroup-TAJMA1j_.cjs} +2 -1
  61. package/dist/SearchAutocomplete/index.cjs +56 -2
  62. package/dist/SearchAutocomplete/index.js +49 -1
  63. package/dist/SearchFilter/index.cjs +8 -8
  64. package/dist/SearchFilter/index.d.cts +4 -4
  65. package/dist/SearchFilter/index.d.ts +4 -4
  66. package/dist/SearchFilter/index.js +8 -8
  67. package/dist/{SearchFilter-CTVBi5s3.cjs → SearchFilter-BcLc0TMq.cjs} +26 -16
  68. package/dist/{SearchFilter-DvqBIXa1.js → SearchFilter-w-0s2YVu.js} +26 -16
  69. package/dist/SearchInput/index.cjs +96 -6
  70. package/dist/SearchInput/index.d.cts +1 -1
  71. package/dist/SearchInput/index.d.ts +2 -2
  72. package/dist/SearchInput/index.js +88 -4
  73. package/dist/SearchInputForm/index.cjs +0 -39
  74. package/dist/SearchInputForm/index.d.cts +2 -2
  75. package/dist/SearchInputForm/index.d.ts +2 -2
  76. package/dist/SearchInputForm/index.js +1 -37
  77. package/dist/SearchResultsContent/index.cjs +34 -37
  78. package/dist/SearchResultsContent/index.d.cts +4 -6
  79. package/dist/SearchResultsContent/index.d.ts +4 -6
  80. package/dist/SearchResultsContent/index.js +34 -37
  81. package/dist/SearchResultsFilterSidebar/index.cjs +10 -10
  82. package/dist/SearchResultsFilterSidebar/index.d.cts +1 -1
  83. package/dist/SearchResultsFilterSidebar/index.d.ts +1 -1
  84. package/dist/SearchResultsFilterSidebar/index.js +10 -10
  85. package/dist/SearchResultsStates/index.cjs +10 -10
  86. package/dist/SearchResultsStates/index.d.cts +6 -8
  87. package/dist/SearchResultsStates/index.d.ts +6 -8
  88. package/dist/SearchResultsStates/index.js +10 -10
  89. package/dist/{SearchResultsStates-iKz64Pd4.js → SearchResultsStates-DlZz14yy.js} +8 -10
  90. package/dist/{SearchResultsStates-CH4agenX.cjs → SearchResultsStates-DwcPrsdd.cjs} +8 -10
  91. package/dist/SparkleAnimation/index.cjs +1 -1
  92. package/dist/SparkleAnimation/index.d.cts +2 -2
  93. package/dist/SparkleAnimation/index.d.ts +2 -2
  94. package/dist/SparkleAnimation/index.js +1 -1
  95. package/dist/{SparkleAnimation-qi5WCJ9B.cjs → SparkleAnimation-CvGlWUqv.cjs} +0 -1
  96. package/dist/{SparkleAnimation-BLfNojLv.js → SparkleAnimation-paLhSu5E.js} +0 -1
  97. package/dist/Spinner/index.d.cts +2 -2
  98. package/dist/SuggestionButton/index.cjs +3 -3
  99. package/dist/SuggestionButton/index.d.cts +2 -2
  100. package/dist/SuggestionButton/index.d.ts +2 -2
  101. package/dist/SuggestionButton/index.js +3 -3
  102. package/dist/Text/index.cjs +2 -2
  103. package/dist/Text/index.d.cts +2 -2
  104. package/dist/Text/index.d.ts +3 -3
  105. package/dist/Text/index.js +2 -2
  106. package/dist/{Text-Bod4OMPk.js → Text-BLzNhX4H.js} +1 -1
  107. package/dist/{Text-MQjxqgZZ.cjs → Text-DllCE9_D.cjs} +1 -1
  108. package/dist/TextInput/index.cjs +2 -2
  109. package/dist/TextInput/index.d.ts +1 -1
  110. package/dist/TextInput/index.js +2 -2
  111. package/dist/{TextInput-DoM41M53.js → TextInput-DmsOxxPN.js} +1 -1
  112. package/dist/{TextInput-B3dTeD3q.cjs → TextInput-HMW0hxLI.cjs} +1 -1
  113. package/dist/ToggleButton/index.cjs +3 -3
  114. package/dist/ToggleButton/index.d.cts +2 -2
  115. package/dist/ToggleButton/index.d.ts +2 -2
  116. package/dist/ToggleButton/index.js +3 -3
  117. package/dist/{ToggleButton-CK_vkMvt.cjs → ToggleButton-DblAj4Cd.cjs} +1 -1
  118. package/dist/{ToggleButton-GIVd2-Z4.js → ToggleButton-r7Y7Kzzo.js} +1 -1
  119. package/dist/index-BKvXn5sj.d.ts +4 -0
  120. package/dist/{index-B8l3muO3.d.ts → index-Br1B7Jta.d.cts} +2 -3
  121. package/dist/{index-CFH3KUVw.d.cts → index-DADHwW6M.d.ts} +5 -9
  122. package/dist/{index-Vck3pox6.d.ts → index-DDp-fLgm.d.cts} +5 -9
  123. package/dist/{index-BMt66uqr.d.cts → index-Dh8rcWev.d.ts} +2 -3
  124. package/dist/index-W1wCDiw_.d.cts +4 -0
  125. package/dist/{searchFilterSidebarVariants-CI782ylo.js → searchFilterSidebarVariants-J0FJ8pck.js} +1 -1
  126. package/dist/{searchFilterSidebarVariants-DFfOTqjc.cjs → searchFilterSidebarVariants-kkTjYEIF.cjs} +1 -1
  127. package/dist/{textVariantClasses-Dgz7Zaql.cjs → textVariantClasses-CBre7vXv.cjs} +5 -7
  128. package/dist/{textVariantClasses-D77TGEy1.js → textVariantClasses-CRrTb43V.js} +5 -7
  129. package/package.json +2 -6
  130. package/src/components/AppliedFiltersScrollbar/AppliedFiltersScrollbar.tsx +25 -27
  131. package/src/components/ButtonBase/ButtonBase.tsx +1 -2
  132. package/src/components/DynamicFiltersScrollbar/DynamicFiltersScrollbar.tsx +26 -28
  133. package/src/components/FilterScrollbar/AppliedFiltersScrollbar.tsx +25 -27
  134. package/src/components/FilterScrollbar/DynamicFiltersScrollbar.tsx +26 -28
  135. package/src/components/ModalSheet/ModalSheet.tsx +1 -1
  136. package/src/components/ModalSheet/common/closeIcon.tsx +2 -2
  137. package/src/components/ModalSheet/mobile/mobileHeader.tsx +1 -1
  138. package/src/components/ProductCard/ProductCard.tsx +5 -28
  139. package/src/components/ProductGrid/ProductGrid.tsx +3 -11
  140. package/src/components/RadioButton/RadioButton.tsx +15 -6
  141. package/src/components/RadioButtonGroup/RadioButtonGroup.tsx +1 -0
  142. package/src/components/SearchFilter/SearchFilter.tsx +2 -2
  143. package/src/components/SearchFilter/SearchFilterFooter.tsx +1 -1
  144. package/src/components/SearchFilter/SearchFilterHeader.tsx +6 -1
  145. package/src/components/SearchFilter/SearchFilterItem.tsx +17 -3
  146. package/src/components/SearchFilter/useHasFilterStateChanged.tsx +1 -0
  147. package/src/components/SearchFilter/utils.ts +4 -6
  148. package/src/components/SearchInput/SearchInput.tsx +2 -2
  149. package/src/components/SearchInputForm/index.ts +0 -1
  150. package/src/components/SearchResultsContent/SearchResultsContent.tsx +33 -38
  151. package/src/components/SearchResultsFilterSidebar/SearchResultsFilter.tsx +2 -3
  152. package/src/components/SearchResultsFilterSidebar/searchFilterSidebarVariants.ts +1 -1
  153. package/src/components/SearchResultsStates/SearchResultsGrid.tsx +4 -8
  154. package/src/components/SearchResultsStates/SearchResultsLoadingGrid.tsx +3 -3
  155. package/src/components/SparkleAnimation/SparkleAnimation.tsx +0 -1
  156. package/src/components/Spinner/Spinner.tsx +29 -14
  157. package/src/components/SuggestionButton/SuggestionButton.tsx +1 -1
  158. package/src/components/SuggestionButton/types.ts +1 -1
  159. package/src/components/Text/textVariantClasses.ts +12 -10
  160. package/src/components/TextInput/TextInput.tsx +1 -0
  161. package/src/util/camelCasedPropertiesDeep.ts +22 -22
  162. package/src/util/internal.ts +4 -2
  163. package/src/util/splitWords.ts +35 -31
  164. package/dist/DynamicFiltersScrollbar-C4kdNSJ9.js +0 -70
  165. package/dist/DynamicFiltersScrollbar-CVw1PINp.cjs +0 -85
  166. package/dist/SearchAutocomplete-BlpII8Xs.js +0 -51
  167. package/dist/SearchAutocomplete-DIEhLT4C.cjs +0 -62
  168. package/dist/SearchInput-CVaCPWCE.js +0 -89
  169. package/dist/SearchInput-vJMWoLzS.cjs +0 -106
  170. package/dist/Styles/index.cjs +0 -274
  171. package/dist/Styles/index.d.cts +0 -258
  172. package/dist/Styles/index.d.ts +0 -258
  173. package/dist/Styles/index.js +0 -274
  174. package/dist/index-H_9LhS_1.d.cts +0 -36
  175. package/dist/index-h-QwQNnu.d.ts +0 -36
  176. package/src/components/Styles/EnviveTailwindPreset.ts +0 -285
  177. package/src/components/Styles/index.ts +0 -2
  178. package/tailwind-preset.js +0 -3
  179. /package/dist/{colorsConfig-D-MZuBvt.cjs → colorsConfig-B3-SMUSx.cjs} +0 -0
  180. /package/dist/{colorsConfig-DEfiLHH0.js → colorsConfig-DZ-GSPWy.js} +0 -0
  181. /package/dist/{textVariantClasses-kyZtL8F5.d.ts → textVariantClasses-C8OCWZAw.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime10 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime22 from "react/jsx-runtime";
2
2
  import { SearchFilterDatum, SelectFilterItem } from "@envive-ai/react-hooks/types";
3
3
 
4
4
  //#region src/components/SearchResultsFilterSidebar/types.d.ts
@@ -28,7 +28,6 @@ type SearchResultsFilterProps = {
28
28
  setIsOpen: (isOpen: boolean) => void;
29
29
  searchFilters: SearchFilterDatum[];
30
30
  searchFilterSidebarVariant: SearchFilterSidebarVariant;
31
- searchText: string;
32
31
  onSelectFilterItem: SelectFilterItem;
33
32
  onClearAllFilters: () => void;
34
33
  filterButtonText: string;
@@ -42,6 +41,6 @@ declare const SearchResultsFilter: ({
42
41
  onSelectFilterItem,
43
42
  onClearAllFilters,
44
43
  filterButtonText
45
- }: SearchResultsFilterProps) => react_jsx_runtime10.JSX.Element;
44
+ }: SearchResultsFilterProps) => react_jsx_runtime22.JSX.Element;
46
45
  //#endregion
47
46
  export { CloseIconVariant$1 as CloseIconVariant, SearchFilterSidebarVariant, SearchResultsFilter, SearchResultsFilterProps, searchFilterSidebarVariantClasses };
@@ -0,0 +1,4 @@
1
+ //#region src/components/SearchInputForm/types.d.ts
2
+ type SearchInputVariant = 'standard';
3
+ //#endregion
4
+ export { SearchInputVariant };
@@ -1,4 +1,4 @@
1
- import { ColorNames, colorVar } from "./colorsConfig-DEfiLHH0.js";
1
+ import { ColorNames, colorVar } from "./colorsConfig-DZ-GSPWy.js";
2
2
 
3
3
  //#region src/components/SearchResultsFilterSidebar/searchFilterSidebarVariants.ts
4
4
  const searchFilterSidebarVariantClasses = {
@@ -1,4 +1,4 @@
1
- const require_colorsConfig = require('./colorsConfig-D-MZuBvt.cjs');
1
+ const require_colorsConfig = require('./colorsConfig-B3-SMUSx.cjs');
2
2
 
3
3
  //#region src/components/SearchResultsFilterSidebar/searchFilterSidebarVariants.ts
4
4
  const searchFilterSidebarVariantClasses = {
@@ -90,13 +90,11 @@ const TextStyleVariantMap = {
90
90
  ...TextVariantMap,
91
91
  ...HeadlineVariantMap
92
92
  };
93
- const getVariantPlaceholderClassNames = (classes) => {
94
- return Object.keys(classes).reduce((acc, key) => {
95
- if (key.includes("spiffy-tw")) acc[`placeholder:${key}`] = classes[key];
96
- else acc[`${key}-placeholder`] = classes[key];
97
- return acc;
98
- }, {});
99
- };
93
+ const getVariantPlaceholderClassNames = (classes) => Object.keys(classes).reduce((acc, key) => {
94
+ if (key.includes("spiffy-tw")) acc[`placeholder:${key}`] = classes[key];
95
+ else acc[`${key}-placeholder`] = classes[key];
96
+ return acc;
97
+ }, {});
100
98
 
101
99
  //#endregion
102
100
  Object.defineProperty(exports, 'HeadlineVariantMap', {
@@ -89,13 +89,11 @@ const TextStyleVariantMap = {
89
89
  ...TextVariantMap,
90
90
  ...HeadlineVariantMap
91
91
  };
92
- const getVariantPlaceholderClassNames = (classes) => {
93
- return Object.keys(classes).reduce((acc, key) => {
94
- if (key.includes("spiffy-tw")) acc[`placeholder:${key}`] = classes[key];
95
- else acc[`${key}-placeholder`] = classes[key];
96
- return acc;
97
- }, {});
98
- };
92
+ const getVariantPlaceholderClassNames = (classes) => Object.keys(classes).reduce((acc, key) => {
93
+ if (key.includes("spiffy-tw")) acc[`placeholder:${key}`] = classes[key];
94
+ else acc[`${key}-placeholder`] = classes[key];
95
+ return acc;
96
+ }, {});
99
97
 
100
98
  //#endregion
101
99
  export { HeadlineVariantMap, TextStyleVariantMap, TextVariantMap, getVariantPlaceholderClassNames };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-toolkit",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "React component library for Envive services.",
5
5
  "keywords": [
6
6
  "react",
@@ -45,7 +45,7 @@
45
45
  "postcss": "^8.5.6",
46
46
  "tailwindcss": "^3.4.17",
47
47
  "tsdown": "^0.14.2",
48
- "typescript": "~5.8.3"
48
+ "typescript": "^5.4.3"
49
49
  },
50
50
  "exports": {
51
51
  "./Accordion": {
@@ -132,10 +132,6 @@
132
132
  "import": "./dist/Spinner/index.js",
133
133
  "require": "./dist/Spinner/index.cjs"
134
134
  },
135
- "./Styles": {
136
- "import": "./dist/Styles/index.js",
137
- "require": "./dist/Styles/index.cjs"
138
- },
139
135
  "./SuggestionButton": {
140
136
  "import": "./dist/SuggestionButton/index.js",
141
137
  "require": "./dist/SuggestionButton/index.cjs"
@@ -38,33 +38,31 @@ export const AppliedFiltersScrollbar = ({
38
38
 
39
39
  return (
40
40
  <ScrollContainer className={filterBarClassNames} hideScrollbars>
41
- {selectedFilterOptions.map((filter) => {
42
- return (
43
- <button
44
- key={filter.id}
45
- className={buttonClasses}
46
- type="button"
47
- onClick={() => onRemoveFilter(filter)}
48
- aria-label={`Remove filter: ${filter.displayName}`}
49
- >
50
- <div className="spiffy-tw-flex spiffy-tw-items-center spiffy-tw-gap-[8px]">
51
- <Text variant="body3">{filter.displayName}</Text>
52
- <svg
53
- xmlns="http://www.w3.org/2000/svg"
54
- width="10"
55
- height="10"
56
- viewBox="0 0 10 10"
57
- fill="none"
58
- >
59
- <path
60
- d="M4.59766 4.29297L8.48535 0.405273L9.19238 1.1123L5.30469 5L9.19238 8.8877L8.48535 9.59473L4.59766 5.70703L0.707031 9.59766L0 8.89062L3.89062 5L0 1.10938L0.707031 0.402344L4.59766 4.29297Z"
61
- fill={iconColor}
62
- />
63
- </svg>
64
- </div>
65
- </button>
66
- );
67
- })}
41
+ {selectedFilterOptions.map((filter) => (
42
+ <button
43
+ key={filter.id}
44
+ className={buttonClasses}
45
+ type="button"
46
+ onClick={() => onRemoveFilter(filter)}
47
+ aria-label={`Remove filter: ${filter.displayName}`}
48
+ >
49
+ <div className="spiffy-tw-flex spiffy-tw-items-center spiffy-tw-gap-[8px]">
50
+ <Text variant="body3">{filter.displayName}</Text>
51
+ <svg
52
+ xmlns="http://www.w3.org/2000/svg"
53
+ width="10"
54
+ height="10"
55
+ viewBox="0 0 10 10"
56
+ fill="none"
57
+ >
58
+ <path
59
+ d="M4.59766 4.29297L8.48535 0.405273L9.19238 1.1123L5.30469 5L9.19238 8.8877L8.48535 9.59473L4.59766 5.70703L0.707031 9.59766L0 8.89062L3.89062 5L0 1.10938L0.707031 0.402344L4.59766 4.29297Z"
60
+ fill={iconColor}
61
+ />
62
+ </svg>
63
+ </div>
64
+ </button>
65
+ ))}
68
66
  </ScrollContainer>
69
67
  );
70
68
  };
@@ -4,7 +4,6 @@ import { ButtonBaseOverrides, ButtonBaseProps } from './types';
4
4
  import { Text } from '../Text/Text';
5
5
 
6
6
  export const ButtonBase = ({
7
- type = 'button',
8
7
  isDisabled = false,
9
8
  dataAttributes,
10
9
  buttonClass,
@@ -53,7 +52,7 @@ export const ButtonBase = ({
53
52
 
54
53
  return (
55
54
  <button
56
- type={type}
55
+ type="button"
57
56
  ref={buttonRef}
58
57
  className={buttonClassName}
59
58
  disabled={isDisabled}
@@ -22,31 +22,29 @@ export const DynamicFiltersScrollbar = ({
22
22
  filterDefaultClasses,
23
23
  filterHoverClasses,
24
24
  onToggleDynamicFilter,
25
- }: DynamicFiltersScrollbarProps) => {
26
- return (
27
- <ScrollContainer className={filterBarClassNames} hideScrollbars>
28
- {availableDynamicFilters.map(({ name, displayName }) => {
29
- const buttonClasses = classNames(
30
- 'spiffy-tw-px-[12px] spiffy-tw-py-2 spiffy-tw-rounded-full spiffy-tw-border spiffy-tw-whitespace-nowrap ',
31
- filterHoverClasses,
32
- filterDefaultClasses,
33
- );
34
- return (
35
- <button
36
- key={name}
37
- type="button"
38
- className={buttonClasses}
39
- onClick={() => {
40
- onToggleDynamicFilter({
41
- filter: name,
42
- dynamicFilterDisplayName: displayName,
43
- });
44
- }}
45
- >
46
- <Text variant="body3">{displayName}</Text>
47
- </button>
48
- );
49
- })}
50
- </ScrollContainer>
51
- );
52
- };
25
+ }: DynamicFiltersScrollbarProps) => (
26
+ <ScrollContainer className={filterBarClassNames} hideScrollbars>
27
+ {availableDynamicFilters.map(({ name, displayName }) => {
28
+ const buttonClasses = classNames(
29
+ 'spiffy-tw-px-[12px] spiffy-tw-py-2 spiffy-tw-rounded-full spiffy-tw-border spiffy-tw-whitespace-nowrap ',
30
+ filterHoverClasses,
31
+ filterDefaultClasses,
32
+ );
33
+ return (
34
+ <button
35
+ key={name}
36
+ type="button"
37
+ className={buttonClasses}
38
+ onClick={() => {
39
+ onToggleDynamicFilter({
40
+ filter: name,
41
+ dynamicFilterDisplayName: displayName,
42
+ });
43
+ }}
44
+ >
45
+ <Text variant="body3">{displayName}</Text>
46
+ </button>
47
+ );
48
+ })}
49
+ </ScrollContainer>
50
+ );
@@ -38,33 +38,31 @@ export const AppliedFiltersScrollbar = ({
38
38
 
39
39
  return (
40
40
  <ScrollContainer className={filterBarClassNames} hideScrollbars>
41
- {selectedFilterOptions.map((filter) => {
42
- return (
43
- <button
44
- key={filter.id}
45
- className={buttonClasses}
46
- type="button"
47
- onClick={() => onRemoveFilter(filter)}
48
- aria-label={`Remove filter: ${filter.displayName}`}
49
- >
50
- <div className="spiffy-tw-flex spiffy-tw-items-center spiffy-tw-gap-[8px]">
51
- <Text variant="body3">{filter.displayName}</Text>
52
- <svg
53
- xmlns="http://www.w3.org/2000/svg"
54
- width="10"
55
- height="10"
56
- viewBox="0 0 10 10"
57
- fill="none"
58
- >
59
- <path
60
- d="M4.59766 4.29297L8.48535 0.405273L9.19238 1.1123L5.30469 5L9.19238 8.8877L8.48535 9.59473L4.59766 5.70703L0.707031 9.59766L0 8.89062L3.89062 5L0 1.10938L0.707031 0.402344L4.59766 4.29297Z"
61
- fill={iconColor}
62
- />
63
- </svg>
64
- </div>
65
- </button>
66
- );
67
- })}
41
+ {selectedFilterOptions.map((filter) => (
42
+ <button
43
+ key={filter.id}
44
+ className={buttonClasses}
45
+ type="button"
46
+ onClick={() => onRemoveFilter(filter)}
47
+ aria-label={`Remove filter: ${filter.displayName}`}
48
+ >
49
+ <div className="spiffy-tw-flex spiffy-tw-items-center spiffy-tw-gap-[8px]">
50
+ <Text variant="body3">{filter.displayName}</Text>
51
+ <svg
52
+ xmlns="http://www.w3.org/2000/svg"
53
+ width="10"
54
+ height="10"
55
+ viewBox="0 0 10 10"
56
+ fill="none"
57
+ >
58
+ <path
59
+ d="M4.59766 4.29297L8.48535 0.405273L9.19238 1.1123L5.30469 5L9.19238 8.8877L8.48535 9.59473L4.59766 5.70703L0.707031 9.59766L0 8.89062L3.89062 5L0 1.10938L0.707031 0.402344L4.59766 4.29297Z"
60
+ fill={iconColor}
61
+ />
62
+ </svg>
63
+ </div>
64
+ </button>
65
+ ))}
68
66
  </ScrollContainer>
69
67
  );
70
68
  };
@@ -22,31 +22,29 @@ export const DynamicFiltersScrollbar = ({
22
22
  filterDefaultClasses,
23
23
  filterHoverClasses,
24
24
  onToggleDynamicFilter,
25
- }: DynamicFiltersScrollbarProps) => {
26
- return (
27
- <ScrollContainer className={filterBarClassNames} hideScrollbars>
28
- {availableDynamicFilters.map(({ name, displayName }) => {
29
- const buttonClasses = classNames(
30
- 'spiffy-tw-px-[12px] spiffy-tw-py-2 spiffy-tw-rounded-full spiffy-tw-border spiffy-tw-whitespace-nowrap ',
31
- filterHoverClasses,
32
- filterDefaultClasses,
33
- );
34
- return (
35
- <button
36
- key={name}
37
- type="button"
38
- className={buttonClasses}
39
- onClick={() => {
40
- onToggleDynamicFilter({
41
- filter: name,
42
- dynamicFilterDisplayName: displayName,
43
- });
44
- }}
45
- >
46
- <Text variant="body3">{displayName}</Text>
47
- </button>
48
- );
49
- })}
50
- </ScrollContainer>
51
- );
52
- };
25
+ }: DynamicFiltersScrollbarProps) => (
26
+ <ScrollContainer className={filterBarClassNames} hideScrollbars>
27
+ {availableDynamicFilters.map(({ name, displayName }) => {
28
+ const buttonClasses = classNames(
29
+ 'spiffy-tw-px-[12px] spiffy-tw-py-2 spiffy-tw-rounded-full spiffy-tw-border spiffy-tw-whitespace-nowrap ',
30
+ filterHoverClasses,
31
+ filterDefaultClasses,
32
+ );
33
+ return (
34
+ <button
35
+ key={name}
36
+ type="button"
37
+ className={buttonClasses}
38
+ onClick={() => {
39
+ onToggleDynamicFilter({
40
+ filter: name,
41
+ dynamicFilterDisplayName: displayName,
42
+ });
43
+ }}
44
+ >
45
+ <Text variant="body3">{displayName}</Text>
46
+ </button>
47
+ );
48
+ })}
49
+ </ScrollContainer>
50
+ );
@@ -1,7 +1,7 @@
1
+ import { useIsSmallScreen } from '@envive-ai/react-hooks/hooks/IsSmallScreen';
1
2
  import { ModalSheetMobile } from './mobile';
2
3
  import { ModalSheetDesktop } from './desktop';
3
4
  import { ModalSheetProps } from './types';
4
- import { useIsSmallScreen } from '@envive-ai/react-hooks/hooks/IsSmallScreen';
5
5
 
6
6
  const ANIMATION_DURATION = 0.3;
7
7
 
@@ -33,8 +33,8 @@ export const ModalSheetCloseIcon = ({
33
33
 
34
34
  const closeIconContextValue = useMemo(() => ({ size: iconSize }), [iconSize]);
35
35
  return (
36
- <div className={closeIconClassNames} onClick={closeModal}>
36
+ <button type="button" className={closeIconClassNames} onClick={closeModal}>
37
37
  <IconContext.Provider value={closeIconContextValue}>{closeIcon}</IconContext.Provider>
38
- </div>
38
+ </button>
39
39
  );
40
40
  };
@@ -1,7 +1,7 @@
1
1
  import classNames from 'classnames';
2
2
  import { motion, useMotionValue } from 'framer-motion';
3
- import { ModalSheetHeaderProps } from '../types';
4
3
  import { AnimatedChevron } from 'src/components/AnimatedChevron/AnimatedChevron';
4
+ import { ModalSheetHeaderProps } from '../types';
5
5
 
6
6
  const modalSheetVariants = {
7
7
  primary: {
@@ -1,12 +1,16 @@
1
1
  import classNames from 'classnames';
2
2
  import { MdStar } from 'react-icons/md';
3
+ import Logger from 'src/logging/logger';
4
+ import { Text } from 'src/components/Text/Text';
5
+ import { formatPrice } from 'src/util/formatPrice';
6
+ import { TestProps } from '@envive-ai/react-hooks/types';
7
+ import { useImageResolver } from '@envive-ai/react-hooks/hooks/ImageResolver';
3
8
  import {
4
9
  variantClassMap,
5
10
  variantHoverClassMap,
6
11
  productCardLayoutVariantClasses,
7
12
  variantTitleColorMap,
8
13
  } from './productCardVariants';
9
- import Logger from 'src/logging/logger';
10
14
  import { Headline } from '../Headline';
11
15
  import { ImageWithFallback } from '../ImageWithFallback';
12
16
  import { Spinner } from '../Spinner';
@@ -16,10 +20,6 @@ import {
16
20
  ProductCardHoverVariant,
17
21
  ProductCardLayoutVariant,
18
22
  } from './types';
19
- import { Text } from 'src/components/Text/Text';
20
- import { formatPrice } from 'src/util/formatPrice';
21
- import { TestProps } from '@envive-ai/react-hooks/types';
22
- import { useImageResolver } from '@envive-ai/react-hooks/hooks/ImageResolver';
23
23
 
24
24
  const formatReviews = (stars: number) =>
25
25
  String(
@@ -95,29 +95,11 @@ export const PriceSection = ({ originalPrice, salePrice, pricePrefix }: PriceSec
95
95
  );
96
96
  };
97
97
 
98
- // export const formatPrice = (price?: number, currency: string = '$'): string => {
99
- // if (price == null) {
100
- // return '';
101
- // }
102
-
103
- // const options: Intl.NumberFormatOptions = {};
104
-
105
- // if (!Number.isInteger(price)) {
106
- // options.minimumFractionDigits = 2;
107
- // options.maximumFractionDigits = 2;
108
- // }
109
-
110
- // return `${currency}${price.toLocaleString('en-US', options)}`;
111
- // };
112
-
113
98
  interface ProductCardProps extends TestProps {
114
99
  productCardConfig?: ProductCardConfig;
115
100
  merchantShortName: string;
116
101
  title: string;
117
102
  url: string;
118
- searchResponseId?: string;
119
- productResponseId?: string;
120
- cardDisplayLocation: string;
121
103
  imageUrl?: string;
122
104
  originalPrice?: number;
123
105
  averageRating?: number;
@@ -128,7 +110,6 @@ interface ProductCardProps extends TestProps {
128
110
  layoutVariant?: ProductCardLayoutVariant;
129
111
  zoomOnHover?: boolean;
130
112
  aspectRatio?: '3:4' | 'square' | 'none';
131
- clickPosition?: number | null;
132
113
  growWithContainer?: boolean;
133
114
  handleClick?: (clickedUrl: string) => void;
134
115
  }
@@ -139,8 +120,6 @@ export const ProductCard = ({
139
120
  imageUrl,
140
121
  title,
141
122
  url,
142
- // searchResponseId,
143
- // productResponseId,
144
123
  originalPrice,
145
124
  averageRating,
146
125
  numberReviews,
@@ -149,10 +128,8 @@ export const ProductCard = ({
149
128
  hoverVariant,
150
129
  dataTestId,
151
130
  layoutVariant = 'normal',
152
- // cardDisplayLocation,
153
131
  zoomOnHover = false,
154
132
  aspectRatio = 'none',
155
- // clickPosition = null,
156
133
  growWithContainer = false,
157
134
  handleClick,
158
135
  }: ProductCardProps) => {
@@ -1,8 +1,8 @@
1
- import { ProductGridVariant, ProductCardConfig, ProductCard } from '../ProductCard';
2
- import { productGridVariantClasses } from './productGridVariants';
3
1
  import classNames from 'classnames';
4
2
  import { SearchResponseProduct } from '@spiffy-ai/commerce-api-client';
5
3
  import { CamelCasedPropertiesDeep } from 'src/util/camelCasedPropertiesDeep';
4
+ import { productGridVariantClasses } from './productGridVariants';
5
+ import { ProductGridVariant, ProductCardConfig, ProductCard } from '../ProductCard';
6
6
 
7
7
  interface ProductGridProps {
8
8
  productList: SearchResponseProduct[];
@@ -10,9 +10,7 @@ interface ProductGridProps {
10
10
  productGridClasses: string;
11
11
  productCardConfig?: ProductCardConfig;
12
12
  merchantShortName: string;
13
- searchResponseId: string;
14
13
  cardsGrowWithContainer?: boolean;
15
- cardDisplayLocation: string;
16
14
  }
17
15
 
18
16
  export const ProductGrid = ({
@@ -21,9 +19,7 @@ export const ProductGrid = ({
21
19
  productGridClasses,
22
20
  productCardConfig,
23
21
  merchantShortName,
24
- searchResponseId,
25
22
  cardsGrowWithContainer = true,
26
- cardDisplayLocation,
27
23
  }: ProductGridProps) => {
28
24
  const {
29
25
  productCardVariant,
@@ -40,7 +36,7 @@ export const ProductGrid = ({
40
36
 
41
37
  return (
42
38
  <div className={productGridClasses}>
43
- {productList.map((product: SearchResponseProduct, index: number) => {
39
+ {productList.map((product: SearchResponseProduct) => {
44
40
  const camelCasedProduct: CamelCasedPropertiesDeep<SearchResponseProduct> = product;
45
41
  return (
46
42
  <div key={camelCasedProduct.id} className={cardContainerClasses}>
@@ -49,21 +45,17 @@ export const ProductGrid = ({
49
45
  merchantShortName={merchantShortName}
50
46
  key={camelCasedProduct.id}
51
47
  imageUrl={camelCasedProduct.imageUrl}
52
- searchResponseId={searchResponseId}
53
- productResponseId={camelCasedProduct.responseId}
54
48
  title={camelCasedProduct.title}
55
49
  url={camelCasedProduct.url}
56
50
  originalPrice={camelCasedProduct.originalPrice}
57
51
  salePrice={camelCasedProduct.salePrice}
58
52
  averageRating={camelCasedProduct.averageRating}
59
53
  numberReviews={camelCasedProduct.numberReviews}
60
- cardDisplayLocation={cardDisplayLocation}
61
54
  layoutVariant={productCardLayoutVariant}
62
55
  variant={productCardVariant}
63
56
  hoverVariant={productCardHoverVariant}
64
57
  zoomOnHover={zoomOnHover}
65
58
  aspectRatio={productCardImageAspectRatio}
66
- clickPosition={index}
67
59
  growWithContainer={cardsGrowWithContainer}
68
60
  />
69
61
  </div>
@@ -14,6 +14,7 @@ interface RadioButtonProps extends TestProps {
14
14
  uncheckedBorderColor?: string;
15
15
  checked?: boolean;
16
16
  onChange: (value: string) => void;
17
+ id;
17
18
  }
18
19
 
19
20
  export const RadioButton = ({
@@ -27,6 +28,7 @@ export const RadioButton = ({
27
28
  uncheckedBorderColor,
28
29
  checked = false,
29
30
  onChange,
31
+ id,
30
32
  }: RadioButtonProps) => {
31
33
  const [isHovered, setIsHovered] = useState(false);
32
34
 
@@ -54,14 +56,21 @@ export const RadioButton = ({
54
56
  };
55
57
 
56
58
  return (
57
- <label
58
- className={containerClassName}
59
- onMouseEnter={() => !isDisabled && setIsHovered(true)}
60
- onMouseLeave={() => setIsHovered(false)}
61
- >
59
+ <>
60
+ <label
61
+ className={containerClassName}
62
+ onMouseEnter={() => !isDisabled && setIsHovered(true)}
63
+ onMouseLeave={() => setIsHovered(false)}
64
+ aria-label={label}
65
+ htmlFor={id}
66
+ >
67
+ {label}
68
+ </label>
69
+
62
70
  <div className="spiffy-tw-relative">
63
71
  <input
64
72
  type="radio"
73
+ id={id}
65
74
  name={name}
66
75
  value={value}
67
76
  checked={checked}
@@ -83,6 +92,6 @@ export const RadioButton = ({
83
92
  </svg>
84
93
  </div>
85
94
  <Text variant="body3">{label}</Text>
86
- </label>
95
+ </>
87
96
  );
88
97
  };
@@ -55,6 +55,7 @@ export const RadioButtonGroup = ({
55
55
  {options.map((option) => (
56
56
  <RadioButton
57
57
  key={option.value}
58
+ id={option.value}
58
59
  name={name}
59
60
  value={option.value}
60
61
  fillColor={fillColor}
@@ -1,11 +1,11 @@
1
1
  import classNames from 'classnames';
2
- import { SearchFilterProps } from './types';
3
2
  import { useCallback } from 'react';
3
+ import { FilterItemProps, FilterProps } from '@envive-ai/react-hooks/types';
4
+ import { SearchFilterProps } from './types';
4
5
  import { SearchFilterHeader } from './SearchFilterHeader';
5
6
  import { useHasFilterStateChanged } from './useHasFilterStateChanged';
6
7
  import { getSelectedFilterItemsCount, getTotalSelectedFilterItemsCount } from './utils';
7
8
  import { ModalSheet } from '../ModalSheet';
8
- import { FilterItemProps, FilterProps } from '@envive-ai/react-hooks/types';
9
9
  import { ToggleButton } from '../ToggleButton';
10
10
  import { Accordion } from '../Accordion';
11
11
  import { RadioButtonGroup } from '../RadioButtonGroup';
@@ -1,6 +1,6 @@
1
1
  import classNames from 'classnames';
2
- import { ButtonBase } from '../ButtonBase';
3
2
  import { FilterFooterProps } from '@envive-ai/react-hooks/types';
3
+ import { ButtonBase } from '../ButtonBase';
4
4
 
5
5
  export const SearchFilterFooter = ({
6
6
  closeModal,
@@ -23,7 +23,12 @@ export const SearchFilterHeader = ({
23
23
  <Text variant="body2" className="spiffy-tw-font-medium">
24
24
  Filters ({productCount})
25
25
  </Text>
26
- <button onClick={closeModal} className="spiffy-tw-p-2">
26
+ <button
27
+ onClick={closeModal}
28
+ className="spiffy-tw-p-2"
29
+ type="button"
30
+ aria-label="Open Filter Menu"
31
+ >
27
32
  <svg
28
33
  xmlns="http://www.w3.org/2000/svg"
29
34
  width="14"