@envive-ai/react-toolkit 0.1.5 → 0.1.7

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 (160) hide show
  1. package/dist/Accordion/index.cjs +84 -0
  2. package/dist/Accordion/index.d.cts +13 -0
  3. package/dist/Accordion/index.d.ts +13 -0
  4. package/dist/Accordion/index.js +77 -0
  5. package/dist/AppliedFiltersScrollbar/index.cjs +49 -0
  6. package/dist/AppliedFiltersScrollbar/index.d.cts +22 -0
  7. package/dist/AppliedFiltersScrollbar/index.d.ts +22 -0
  8. package/dist/AppliedFiltersScrollbar/index.js +44 -0
  9. package/dist/ButtonBase/index.cjs +2 -1
  10. package/dist/ButtonBase/index.d.cts +3 -3
  11. package/dist/ButtonBase/index.d.ts +1 -1
  12. package/dist/ButtonBase/index.js +2 -1
  13. package/dist/{ButtonBase-CpmFsiUf.js → ButtonBase-BIAu5fIG.js} +1 -1
  14. package/dist/ButtonBase-BRfuPPzN.js +1 -0
  15. package/dist/ButtonBase-BleAVeo-.cjs +0 -0
  16. package/dist/{ButtonBase-Dlh3bpR3.cjs → ButtonBase-DcyxOe2v.cjs} +2 -2
  17. package/dist/DynamicFiltersScrollbar/index.cjs +37 -0
  18. package/dist/DynamicFiltersScrollbar/index.d.cts +28 -0
  19. package/dist/DynamicFiltersScrollbar/index.d.ts +28 -0
  20. package/dist/DynamicFiltersScrollbar/index.js +32 -0
  21. package/dist/FilterScrollbar/index.cjs +1 -1
  22. package/dist/FilterScrollbar/index.d.cts +4 -4
  23. package/dist/FilterScrollbar/index.d.ts +4 -4
  24. package/dist/FilterScrollbar/index.js +1 -1
  25. package/dist/Headline/index.cjs +1 -1
  26. package/dist/Headline/index.d.cts +2 -2
  27. package/dist/Headline/index.js +1 -1
  28. package/dist/ImageWithFallback/index.cjs +1 -1
  29. package/dist/ImageWithFallback/index.d.ts +2 -2
  30. package/dist/ImageWithFallback/index.js +1 -1
  31. package/dist/{ImageWithFallback-By6QdlCR.cjs → ImageWithFallback-1LqhQK1q.cjs} +2 -2
  32. package/dist/{ImageWithFallback-DtUrq_bk.js → ImageWithFallback-Ckwsmd8P.js} +1 -1
  33. package/dist/ProductCard/index.cjs +7 -8
  34. package/dist/ProductCard/index.d.cts +2 -108
  35. package/dist/ProductCard/index.d.ts +2 -108
  36. package/dist/ProductCard/index.js +4 -5
  37. package/dist/{ProductCard-CvTRvhm7.cjs → ProductCard-DZZKutY-.cjs} +64 -5
  38. package/dist/{ProductCard-aJbQz6Q7.js → ProductCard-SF8-lXlT.js} +46 -6
  39. package/dist/ProductGrid/index.cjs +5 -5
  40. package/dist/ProductGrid/index.d.cts +6 -6
  41. package/dist/ProductGrid/index.d.ts +6 -6
  42. package/dist/ProductGrid/index.js +5 -5
  43. package/dist/{ProductGrid-CSIH2_G9.cjs → ProductGrid-BSSmPr7K.cjs} +48 -46
  44. package/dist/{ProductGrid-NOCayW9O.js → ProductGrid-DTUhH219.js} +48 -46
  45. package/dist/{SearchInputAutocomplete → SearchAutocomplete}/index.cjs +1 -1
  46. package/dist/{SearchInputAutocomplete → SearchAutocomplete}/index.d.cts +1 -1
  47. package/dist/{SearchInputAutocomplete → SearchAutocomplete}/index.d.ts +1 -1
  48. package/dist/SearchAutocomplete/index.js +3 -0
  49. package/dist/{SearchAutocomplete-DCu9-Yfk.js → SearchAutocomplete-BPjlo6qq.js} +4 -4
  50. package/dist/{SearchAutocomplete-CQxxe5Op.cjs → SearchAutocomplete-BzaEXmRQ.cjs} +8 -8
  51. package/dist/SearchFilter/index.cjs +5 -5
  52. package/dist/SearchFilter/index.d.cts +1 -34
  53. package/dist/SearchFilter/index.d.ts +1 -34
  54. package/dist/SearchFilter/index.js +2 -2
  55. package/dist/{SearchFilterHeader-qkRVfAB5.cjs → SearchFilter-B15tybnV.cjs} +1 -1
  56. package/dist/{SearchFilterHeader-BDEcDc_4.js → SearchFilter-D427M2UE.js} +1 -1
  57. package/dist/SearchInput/index.cjs +3 -3
  58. package/dist/SearchInput/index.d.cts +4 -4
  59. package/dist/SearchInput/index.d.ts +5 -5
  60. package/dist/SearchInput/index.js +3 -3
  61. package/dist/{SearchInput-DxGvYGZO.js → SearchInput-C0wB4hSV.js} +6 -6
  62. package/dist/{SearchInput-Cdpwswyv.cjs → SearchInput-D6UW79wT.cjs} +10 -10
  63. package/dist/SearchInputForm/index.cjs +6 -5
  64. package/dist/SearchInputForm/index.d.cts +1 -31
  65. package/dist/SearchInputForm/index.d.ts +1 -31
  66. package/dist/SearchInputForm/index.js +6 -5
  67. package/dist/SearchResultsContent/index.cjs +64 -0
  68. package/dist/SearchResultsContent/index.d.cts +67 -0
  69. package/dist/SearchResultsContent/index.d.ts +67 -0
  70. package/dist/SearchResultsContent/index.js +60 -0
  71. package/dist/SearchResultsFilterSidebar/index.cjs +10 -6
  72. package/dist/SearchResultsFilterSidebar/index.d.cts +3 -44
  73. package/dist/SearchResultsFilterSidebar/index.d.ts +3 -44
  74. package/dist/SearchResultsFilterSidebar/index.js +7 -4
  75. package/dist/SearchResultsStates/index.cjs +15 -125
  76. package/dist/SearchResultsStates/index.d.cts +14 -7
  77. package/dist/SearchResultsStates/index.d.ts +14 -7
  78. package/dist/SearchResultsStates/index.js +12 -117
  79. package/dist/SearchResultsStates-CNp6YCqF.js +112 -0
  80. package/dist/SearchResultsStates-Du7HXBi8.cjs +135 -0
  81. package/dist/SparkleAnimation/index.cjs +1 -1
  82. package/dist/SparkleAnimation/index.d.cts +2 -2
  83. package/dist/SparkleAnimation/index.d.ts +2 -2
  84. package/dist/SparkleAnimation/index.js +1 -1
  85. package/dist/{SparkleAnimation-DfMCtvAQ.js → SparkleAnimation-B0u6JtO3.js} +2 -2
  86. package/dist/{SparkleAnimation-j-mAMEZZ.cjs → SparkleAnimation-D1QpGZIg.cjs} +4 -4
  87. package/dist/Spinner/index.cjs +1 -1
  88. package/dist/Spinner/index.d.cts +2 -2
  89. package/dist/Spinner/index.js +1 -1
  90. package/dist/SuggestionButton/index.cjs +3 -3
  91. package/dist/SuggestionButton/index.d.cts +3 -3
  92. package/dist/SuggestionButton/index.d.ts +3 -3
  93. package/dist/SuggestionButton/index.js +2 -2
  94. package/dist/Text/index.cjs +2 -10
  95. package/dist/Text/index.d.cts +2 -2
  96. package/dist/Text/index.d.ts +3 -3
  97. package/dist/Text/index.js +1 -9
  98. package/dist/Text-DkwDPbHy.js +10 -0
  99. package/dist/Text-Ji61nRRE.cjs +16 -0
  100. package/dist/TextInput/index.cjs +1 -1
  101. package/dist/TextInput/index.d.ts +1 -1
  102. package/dist/TextInput/index.js +1 -1
  103. package/dist/{TextInput-CObd_Wcw.cjs → TextInput-C6fF9cSB.cjs} +2 -2
  104. package/dist/{TextInput-ChPhL54o.js → TextInput-CRMqBW3X.js} +1 -1
  105. package/dist/index-14eDYe9f.d.ts +58 -0
  106. package/dist/{types-Dvgr3ZeV.d.cts → index-B3iEVxkL.d.cts} +108 -23
  107. package/dist/index-B8bifyF-.d.ts +36 -0
  108. package/dist/index-BFdFh46m.d.cts +58 -0
  109. package/dist/{types-B7hf-Lif.d.ts → index-ByucvlTy.d.ts} +108 -23
  110. package/dist/index-C2iKBk7w.d.cts +36 -0
  111. package/dist/index-DLbdcczl.d.ts +78 -0
  112. package/dist/index-DlvTcfAg.d.cts +78 -0
  113. package/dist/{searchFilterSidebarVariants-C_UTEIpZ.js → searchFilterSidebarVariants-CZT1frB-.js} +1 -1
  114. package/dist/{searchFilterSidebarVariants-DcQLi_TT.cjs → searchFilterSidebarVariants-xyhy0PmQ.cjs} +1 -1
  115. package/package.json +22 -5
  116. package/src/components/Accordion/Accordion.tsx +90 -0
  117. package/src/components/Accordion/index.ts +1 -0
  118. package/src/components/AppliedFiltersScrollbar/AppliedFiltersScrollbar.tsx +70 -0
  119. package/src/components/AppliedFiltersScrollbar/index.ts +1 -0
  120. package/src/components/DynamicFiltersScrollbar/DynamicFiltersScrollbar.tsx +52 -0
  121. package/src/components/DynamicFiltersScrollbar/index.ts +1 -0
  122. package/src/components/ProductCard/ProductCard.tsx +34 -17
  123. package/src/components/ProductCard/types.ts +1 -1
  124. package/src/components/ProductGrid/ProductGrid.tsx +33 -33
  125. package/src/components/{SearchInputAutocomplete → SearchAutocomplete}/SearchAutocomplete.tsx +1 -1
  126. package/src/components/SearchInput/SearchInput.tsx +6 -6
  127. package/src/components/SearchInput/searchInputVariants.ts +5 -5
  128. package/src/components/SearchInputForm/SearchInputForm.tsx +6 -4
  129. package/src/components/SearchResultsContent/SearchResultsContent.tsx +87 -0
  130. package/src/components/SearchResultsContent/index.ts +2 -0
  131. package/src/components/SearchResultsContent/utils.ts +28 -0
  132. package/src/components/SearchResultsFilterSidebar/SearchResultsFilter.tsx +5 -6
  133. package/src/components/SearchResultsFilterSidebar/types.ts +14 -1
  134. package/src/components/SearchResultsStates/NoSearchResultsFound.tsx +2 -2
  135. package/src/components/SearchResultsStates/SearchResultsGrid.tsx +14 -12
  136. package/src/components/SearchResultsStates/SearchResultsLoadingGrid.tsx +4 -5
  137. package/dist/ProductCardSkeleton-B6YetUCT.js +0 -43
  138. package/dist/ProductCardSkeleton-BzBK36m-.cjs +0 -63
  139. package/dist/SearchInputAutocomplete/index.js +0 -3
  140. package/dist/types-5luH4G-3.d.cts +0 -5
  141. package/dist/types-BCAU5OQD.d.cts +0 -46
  142. package/dist/types-BIPqyTOJ.d.ts +0 -5
  143. package/dist/types-BwPquD10.d.ts +0 -46
  144. package/dist/types-CosVh8Hj.d.cts +0 -4
  145. package/dist/types-nR3jHgIO.d.ts +0 -4
  146. package/src/types/external.ts +0 -24
  147. /package/dist/{DynamicFiltersScrollbar-D8Lms7Ox.cjs → DynamicFiltersScrollbar-BTopFhyl.cjs} +0 -0
  148. /package/dist/{DynamicFiltersScrollbar-t_JASmYC.js → DynamicFiltersScrollbar-BmPTqym5.js} +0 -0
  149. /package/dist/{Headline-COAnonc2.js → Headline-XpaAeTSR.js} +0 -0
  150. /package/dist/{Headline-CdddUGwy.cjs → Headline-iP_MckEO.cjs} +0 -0
  151. /package/dist/{Spinner-D9kkaM9d.js → Spinner-BgGihEfJ.js} +0 -0
  152. /package/dist/{Spinner-DX35Epv3.cjs → Spinner-DzdIkS6t.cjs} +0 -0
  153. /package/dist/{colorsConfig-CKiMYHO_.js → colorsConfig-BQlaCfxi.js} +0 -0
  154. /package/dist/{colorsConfig-DulwYRIk.cjs → colorsConfig-DCvy_dV4.cjs} +0 -0
  155. /package/dist/{textVariantClasses-sT9E8Uty.d.ts → textVariantClasses-C8OCWZAw.d.ts} +0 -0
  156. /package/dist/{types-B19i3fxM.d.ts → types-Bm-qQyO3.d.ts} +0 -0
  157. /package/dist/{types-BQYpWDJ4.d.cts → types-C0UWKVvw.d.ts} +0 -0
  158. /package/dist/{types-C-Jrlw5Z.d.cts → types-CZHc-1wI.d.cts} +0 -0
  159. /package/dist/{types-DpfHwTzY.d.ts → types-D2xCS4y9.d.cts} +0 -0
  160. /package/src/components/{SearchInputAutocomplete → SearchAutocomplete}/index.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { motion } from 'framer-motion';
3
3
  import classNames from 'classnames';
4
- import OutlinedStar from '@envive-ai/react-icons/src/OutlinedStar';
4
+ import OutlinedStar from '@envive-ai/react-icons/OutlinedStar';
5
5
 
6
6
  interface GlobalSearchAutocompleteProps {
7
7
  id: string;
@@ -1,12 +1,12 @@
1
1
  import React, { useRef, useImperativeHandle } from 'react';
2
2
  import classNames from 'classnames';
3
- import MagnifyingGlassStarVariant from '@envive-ai/react-icons/src/MagnifyingGlassStarVariant';
4
- import CloseIcon from '@envive-ai/react-icons/src/IconClose';
5
- import { TextInput } from 'src/components/TextInput/TextInput';
3
+ import MagnifyingGlassStarVariant from '@envive-ai/react-icons/MagnifyingGlassStarVariant';
4
+ import { SearchInputVariant } from '../SearchInputForm';
5
+ import { TextInput } from '../TextInput';
6
6
  import { searchInputVariantClasses } from './searchInputVariants';
7
- import type { SearchInputVariant } from '../SearchInputForm/types';
7
+ import { IconClose } from '@envive-ai/react-icons/src/index.js';
8
8
 
9
- export interface SearchInputProps {
9
+ interface SearchInputProps {
10
10
  searchInputVariant?: SearchInputVariant;
11
11
  value: string;
12
12
  placeholder?: string;
@@ -126,7 +126,7 @@ export const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(
126
126
  aria-label="Clear search input"
127
127
  type="button"
128
128
  >
129
- <CloseIcon className={closeButtonIconClassName} />
129
+ <IconClose className={closeButtonIconClassName} />
130
130
  </button>
131
131
  )}
132
132
  </div>
@@ -1,8 +1,8 @@
1
- import type { TextStyleVariantMap } from 'src/components/Text/textVariantClasses';
2
- import type { SearchInputVariant } from '../SearchInputForm/types';
3
- import { ColorNames, colorVar } from 'src/models/colorsConfig';
1
+ import { colorVar, ColorNames } from 'src/models/colorsConfig';
2
+ import { SearchInputVariant } from '../SearchInputForm';
3
+ import { TextStyleVariantMap } from '../Text/textVariantClasses';
4
4
 
5
- interface SearchInputVariantClasses {
5
+ type SearchInputVariantClasses = {
6
6
  searchInputIconColor: string;
7
7
  searchInputBorderColor: string;
8
8
  searchInputCloseIconClasses: string;
@@ -10,7 +10,7 @@ interface SearchInputVariantClasses {
10
10
  autocompleteIconColor: string;
11
11
  searchInputClasses: string;
12
12
  placeholderVariant: keyof typeof TextStyleVariantMap;
13
- }
13
+ };
14
14
 
15
15
  export const searchInputVariantClasses: Record<SearchInputVariant, SearchInputVariantClasses> = {
16
16
  standard: {
@@ -1,7 +1,7 @@
1
- import type { SearchInputVariant } from './types';
2
- import { SearchAutocomplete } from '../SearchInputAutocomplete/SearchAutocomplete';
3
- import { searchInputVariantClasses } from '../SearchInput/searchInputVariants';
1
+ import { SearchAutocomplete } from '../SearchAutocomplete';
4
2
  import { SearchInput } from '../SearchInput/SearchInput';
3
+ import { searchInputVariantClasses } from '../SearchInput/searchInputVariants';
4
+ import { SearchInputVariant } from './types';
5
5
 
6
6
  interface SearchInputFormProps {
7
7
  searchInputVariant: SearchInputVariant;
@@ -15,6 +15,7 @@ interface SearchInputFormProps {
15
15
  onAutocompleteSelect: (suggestion: string) => void;
16
16
  onSearchInputChange: (value: string) => void;
17
17
  onSearchSubmit: () => void;
18
+ searchInputDataTestId?: string;
18
19
  }
19
20
 
20
21
  export const SearchInputForm = ({
@@ -29,6 +30,7 @@ export const SearchInputForm = ({
29
30
  onAutocompleteSelect,
30
31
  onSearchInputChange,
31
32
  onSearchSubmit,
33
+ searchInputDataTestId,
32
34
  }: SearchInputFormProps) => {
33
35
  const { searchInputIconColor } = searchInputVariantClasses[searchInputVariant];
34
36
 
@@ -47,7 +49,7 @@ export const SearchInputForm = ({
47
49
  suggestions={autocompleteResults}
48
50
  ariaActivedescendant={focusedOptionId}
49
51
  searchInputVariant={searchInputVariant}
50
- // dataTestId={SEARCH_INPUT_TESTID}
52
+ dataTestId={searchInputDataTestId}
51
53
  onKeyDown={onKeyDown}
52
54
  onChange={onSearchInputChange}
53
55
  />
@@ -0,0 +1,87 @@
1
+ import { SelectedFilterOption } from 'src/atoms/search/types';
2
+ import {
3
+ ProductCardConfig,
4
+ ProductGridVariant,
5
+ SearchResponseProductAttributes,
6
+ } from '../ProductCard';
7
+ import { SearchFilterSidebarVariant } from '../SearchResultsFilterSidebar';
8
+ import {
9
+ NoSearchResultsFound,
10
+ SearchResultsGrid,
11
+ SearchResultsLoadingGrid,
12
+ } from '../SearchResultsStates';
13
+ import { SearchResultsState } from './utils';
14
+
15
+ interface SearchResultsContentProps {
16
+ searchResultsState: SearchResultsState;
17
+ productList: SearchResponseProductAttributes['attributes'][];
18
+ productCardConfig: ProductCardConfig;
19
+ merchantShortName: string;
20
+ searchFilterSidebarVariant: SearchFilterSidebarVariant;
21
+ productGridVariant: ProductGridVariant;
22
+ productGridClasses: string;
23
+ containerXPaddingClasses: string;
24
+ selectedFilterOptions: SelectedFilterOption[];
25
+ availableDynamicFilters: { name: string; displayName: string }[];
26
+ searchResponseId: string;
27
+ onRemoveFilter: (filter: SelectedFilterOption) => void;
28
+ onToggleDynamicFilter: ({
29
+ filter,
30
+ dynamicFilterDisplayName,
31
+ }: {
32
+ filter: string;
33
+ dynamicFilterDisplayName: string;
34
+ }) => void;
35
+ noResultsFoundText?: string;
36
+ }
37
+
38
+ export const SearchResultsContent = ({
39
+ searchResultsState,
40
+ productList,
41
+ productCardConfig,
42
+ merchantShortName,
43
+ searchFilterSidebarVariant,
44
+ productGridVariant,
45
+ productGridClasses,
46
+ containerXPaddingClasses,
47
+ selectedFilterOptions,
48
+ availableDynamicFilters,
49
+ searchResponseId,
50
+ onRemoveFilter,
51
+ onToggleDynamicFilter,
52
+ noResultsFoundText,
53
+ }: SearchResultsContentProps) => {
54
+ return (
55
+ <div>
56
+ {searchResultsState === SearchResultsState.NoResults && (
57
+ <NoSearchResultsFound
58
+ containerPaddingClasses={containerXPaddingClasses}
59
+ includeBottomMargin
60
+ noResultsFoundText={noResultsFoundText}
61
+ />
62
+ )}
63
+ {searchResultsState === SearchResultsState.Results && (
64
+ <SearchResultsGrid
65
+ searchFilterSidebarVariant={searchFilterSidebarVariant}
66
+ productCardConfig={productCardConfig}
67
+ merchantShortName={merchantShortName}
68
+ productList={productList}
69
+ productGridVariant={productGridVariant}
70
+ productGridClasses={productGridClasses}
71
+ containerXPaddingClasses={containerXPaddingClasses}
72
+ selectedFilterOptions={selectedFilterOptions}
73
+ availableDynamicFilters={availableDynamicFilters}
74
+ searchResponseId={searchResponseId}
75
+ onRemoveFilter={onRemoveFilter}
76
+ onToggleDynamicFilter={onToggleDynamicFilter}
77
+ />
78
+ )}
79
+ {searchResultsState === SearchResultsState.Loading && (
80
+ <SearchResultsLoadingGrid
81
+ productGridVariant={productGridVariant}
82
+ productGridClasses={productGridClasses}
83
+ />
84
+ )}
85
+ </div>
86
+ );
87
+ };
@@ -0,0 +1,2 @@
1
+ export * from './SearchResultsContent';
2
+ export * from './utils';
@@ -0,0 +1,28 @@
1
+ import { SearchResponseProduct } from '@spiffy-ai/commerce-api-client';
2
+
3
+ export interface SearchResult {
4
+ products: SearchResponseProduct[]; // Flattened from all responses
5
+ filters: string[]; // Combined from all responses
6
+ generatedQuery?: string;
7
+ totalProductCount: number;
8
+ searchResponseId: string;
9
+ }
10
+
11
+ export const enum SearchResultsState {
12
+ Loading,
13
+ Results,
14
+ NoResults,
15
+ }
16
+
17
+ export const getSearchResultsState = (
18
+ isLoadingSearch: boolean,
19
+ searchData: SearchResult | null,
20
+ ): SearchResultsState => {
21
+ if (isLoadingSearch) {
22
+ return SearchResultsState.Loading;
23
+ }
24
+ if (searchData) {
25
+ return SearchResultsState.Results;
26
+ }
27
+ return SearchResultsState.NoResults;
28
+ };
@@ -1,11 +1,10 @@
1
1
  import { useCallback } from 'react';
2
2
 
3
- import { SearchFilter } from '../SearchFilter/SearchFilter';
4
- import { SearchFilterHeader } from '../SearchFilter/SearchFilterHeader';
5
- import type { SearchFilter as SearchFilterType, SelectFilterItem } from '../SearchFilter/types';
6
- import type { SearchFilterSidebarVariant } from './types';
7
3
  import { searchFilterSidebarVariantClasses } from './searchFilterSidebarVariants';
8
- import { ButtonBase } from 'src/components/ButtonBase/ButtonBase';
4
+ import SettingsVariant from '@envive-ai/react-icons/SettingsVariant';
5
+ import { ButtonBase } from '../ButtonBase';
6
+ import { SelectFilterItem, SearchFilter, SearchFilterHeader } from '../SearchFilter';
7
+ import { SearchFilterSidebarVariant, type SearchFilter as SearchFilterType } from './types';
9
8
 
10
9
  export type SearchResultsFilterProps = {
11
10
  productCount: number;
@@ -70,7 +69,7 @@ export const SearchResultsFilter = ({
70
69
  />
71
70
  <ButtonBase
72
71
  onClick={openFilter}
73
- // icon={SettingsVariant} // Icon is handled by user
72
+ icon={SettingsVariant}
74
73
  iconClass="spiffy-tw-w-[28px] spiffy-tw-h-[28px] spiffy-tw-object-center"
75
74
  text={filterButtonText}
76
75
  textClass="spiffy-tw-uppercase spiffy-tw-text-[--spiffy-colors-text-primary] spiffy-tw-hidden md:spiffy-tw-block"
@@ -1,2 +1,15 @@
1
1
  export type SearchFilterSidebarVariant = 'darkButton' | 'lightButton';
2
- export type CloseIconVariant = 'light' | 'tertiary' | 'dark';
2
+ export type CloseIconVariant = 'light' | 'tertiary' | 'dark';
3
+
4
+ export type SearchFilter = {
5
+ id: string;
6
+ displayName: string;
7
+ items: SearchFilterItem[];
8
+ };
9
+
10
+ export type SearchFilterItem = {
11
+ id: string;
12
+ displayName: string;
13
+ value: string;
14
+ isSelected: boolean;
15
+ };
@@ -1,6 +1,6 @@
1
1
  import classNames from 'classnames';
2
- import Sparkles from '@envive-ai/react-icons/src/Sparkles';
3
- import { Text } from 'src/components/Text/Text';
2
+ import Sparkles from '@envive-ai/react-icons/Sparkles';
3
+ import { Text } from 'src/components/Text';
4
4
 
5
5
  interface NoSearchResultsFoundProps {
6
6
  containerPaddingClasses: string;
@@ -1,16 +1,19 @@
1
- import { motion } from 'framer-motion';
2
- import type { SelectedFilterOption } from 'src/atoms/search/types';
3
- import classNames from 'classnames';
4
- import type { SearchResponseProduct } from 'src/types/external';
5
- import { ProductGrid } from 'src/components/ProductGrid/ProductGrid';
6
1
  import { AppliedFiltersScrollbar } from '../FilterScrollbar/AppliedFiltersScrollbar';
7
2
  import { DynamicFiltersScrollbar } from '../FilterScrollbar/DynamicFiltersScrollbar';
3
+ import { motion } from 'framer-motion';
4
+
8
5
  import { searchFilterSidebarVariantClasses } from '../SearchResultsFilterSidebar/searchFilterSidebarVariants';
9
- import type { SearchFilterSidebarVariant } from '../SearchResultsFilterSidebar/types';
10
- import { ProductGridVariant } from 'src/components/ProductCard/types';
6
+ import classNames from 'classnames';
7
+ import { SearchResponseProduct } from '@spiffy-ai/commerce-api-client';
8
+ import { SelectedFilterOption } from 'src/atoms/search/types';
9
+ import { ProductCardConfig, ProductGridVariant } from '../ProductCard';
10
+ import { ProductGrid } from '../ProductGrid';
11
+ import { SearchFilterSidebarVariant } from '../SearchResultsFilterSidebar';
11
12
 
12
13
  interface SearchResultsGridProps {
13
14
  productList: SearchResponseProduct[];
15
+ productCardConfig: ProductCardConfig;
16
+ merchantShortName: string;
14
17
  availableDynamicFilters: { name: string; displayName: string }[];
15
18
  searchFilterSidebarVariant: SearchFilterSidebarVariant;
16
19
  productGridVariant: ProductGridVariant;
@@ -30,6 +33,8 @@ interface SearchResultsGridProps {
30
33
 
31
34
  export const SearchResultsGrid = ({
32
35
  productList,
36
+ productCardConfig,
37
+ merchantShortName,
33
38
  availableDynamicFilters,
34
39
  searchFilterSidebarVariant,
35
40
  productGridVariant,
@@ -93,12 +98,9 @@ export const SearchResultsGrid = ({
93
98
  productList={productList}
94
99
  productGridVariant={productGridVariant}
95
100
  productGridClasses={productGridClasses}
101
+ productCardConfig={productCardConfig}
102
+ merchantShortName={merchantShortName}
96
103
  searchResponseId={searchResponseId}
97
- merchantShortName={''}
98
- handleClick={function (clickedUrl: string): void {
99
- console.log(clickedUrl);
100
- throw new Error('Function not implemented.');
101
- }}
102
104
  />
103
105
  </motion.div>
104
106
  );
@@ -1,9 +1,8 @@
1
- import { Text } from 'src/components/Text/Text';
2
- import { SparkleAnimation } from 'src/components/SparkleAnimation/SparkleAnimation';
3
1
  import { motion } from 'framer-motion';
4
- import { ProductGridVariant } from 'src/components/ProductCard/types';
5
- import { ProductCardSkeleton } from 'src/components/ProductCard/ProductCardSkeleton';
6
- import { productGridVariantClasses } from 'src/components/ProductGrid/productGridVariants';
2
+ import { ProductGridVariant, ProductCardSkeleton } from '../ProductCard';
3
+ import { productGridVariantClasses } from '../ProductGrid';
4
+ import { SparkleAnimation } from '../SparkleAnimation';
5
+ import { Text } from '@envive-ai/react-toolkit/Text';
7
6
 
8
7
  export const SearchResultsLoadingGrid = ({
9
8
  productGridVariant,
@@ -1,43 +0,0 @@
1
- import { productCardLayoutVariantClasses } from "./ProductCard-aJbQz6Q7.js";
2
- import classNames from "classnames";
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
-
5
- //#region src/components/ProductCard/types.ts
6
- let ProductCardSkeletonOverrides = /* @__PURE__ */ function(ProductCardSkeletonOverrides$1) {
7
- ProductCardSkeletonOverrides$1["PRODUCT_CARD_SKELETON_CONTAINER"] = "spiffy-product-card-skeleton-container";
8
- ProductCardSkeletonOverrides$1["PRODUCT_CARD_SKELETON"] = "spiffy-product-card-skeleton";
9
- return ProductCardSkeletonOverrides$1;
10
- }({});
11
- let AnimatedProductCardOverrides = /* @__PURE__ */ function(AnimatedProductCardOverrides$1) {
12
- AnimatedProductCardOverrides$1["PRODUCT_CARD_ANIMATED_CONTAINER"] = "spiffy-product-card-animated-container";
13
- AnimatedProductCardOverrides$1["PRODUCT_CARD_ANIMATED_IMAGE_CONTAINER"] = "spiffy-product-card-animated";
14
- return AnimatedProductCardOverrides$1;
15
- }({});
16
-
17
- //#endregion
18
- //#region src/components/ProductCard/ProductCardSkeleton.tsx
19
- const ProductCardSkeleton = ({ layoutVariant, aspectRatio, growWithContainer = false }) => {
20
- const layoutClasses = productCardLayoutVariantClasses[layoutVariant || "normal"];
21
- const containerClasses = classNames(ProductCardSkeletonOverrides.PRODUCT_CARD_SKELETON_CONTAINER, "spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-gap-inherit", "spiffy-tw-bg-transparent", !growWithContainer ? layoutClasses.container : "");
22
- const verticalContainerClasses = classNames("spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-overflow-hidden", "spiffy-tw-gap-inherit", !growWithContainer ? layoutClasses.verticalContainer : "");
23
- const imageClipContainerClasses = classNames("spiffy-tw-w-full", aspectRatio === "3:4" ? "spiffy-tw-aspect-[3/4]" : "", aspectRatio === "square" ? "spiffy-tw-aspect-square" : "", "spiffy-tw-overflow-hidden");
24
- const imageSkeletonClasses = classNames("spiffy-tw-bg-[#F4F4F6]", "spiffy-tw-animate-pulse", "spiffy-tw-opacity-70", "spiffy-tw-w-full", "spiffy-tw-h-full");
25
- const contentContainerClasses = classNames("spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-gap-2", "spiffy-tw-w-full", "spiffy-tw-p-2");
26
- const textSkeletonClasses = classNames(ProductCardSkeletonOverrides.PRODUCT_CARD_SKELETON, "spiffy-tw-h-[15px]", "spiffy-tw-block", "spiffy-tw-rounded-sm", "spiffy-tw-animate-pulse", "spiffy-tw-opacity-70", "spiffy-tw-bg-[#F4F4F6]");
27
- return /* @__PURE__ */ jsx("div", {
28
- className: containerClasses,
29
- children: /* @__PURE__ */ jsxs("div", {
30
- className: verticalContainerClasses,
31
- children: [/* @__PURE__ */ jsx("div", {
32
- className: imageClipContainerClasses,
33
- children: /* @__PURE__ */ jsx("div", { className: imageSkeletonClasses })
34
- }), /* @__PURE__ */ jsxs("div", {
35
- className: contentContainerClasses,
36
- children: [/* @__PURE__ */ jsx("div", { className: classNames(textSkeletonClasses, "spiffy-tw-w-full") }), /* @__PURE__ */ jsx("div", { className: classNames(textSkeletonClasses, "spiffy-tw-w-[60%]") })]
37
- })]
38
- })
39
- });
40
- };
41
-
42
- //#endregion
43
- export { AnimatedProductCardOverrides, ProductCardSkeleton, ProductCardSkeletonOverrides };
@@ -1,63 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_ProductCard = require('./ProductCard-CvTRvhm7.cjs');
3
- let classnames = require("classnames");
4
- classnames = require_chunk.__toESM(classnames);
5
- let react_jsx_runtime = require("react/jsx-runtime");
6
- react_jsx_runtime = require_chunk.__toESM(react_jsx_runtime);
7
-
8
- //#region src/components/ProductCard/types.ts
9
- let ProductCardSkeletonOverrides = /* @__PURE__ */ function(ProductCardSkeletonOverrides$1) {
10
- ProductCardSkeletonOverrides$1["PRODUCT_CARD_SKELETON_CONTAINER"] = "spiffy-product-card-skeleton-container";
11
- ProductCardSkeletonOverrides$1["PRODUCT_CARD_SKELETON"] = "spiffy-product-card-skeleton";
12
- return ProductCardSkeletonOverrides$1;
13
- }({});
14
- let AnimatedProductCardOverrides = /* @__PURE__ */ function(AnimatedProductCardOverrides$1) {
15
- AnimatedProductCardOverrides$1["PRODUCT_CARD_ANIMATED_CONTAINER"] = "spiffy-product-card-animated-container";
16
- AnimatedProductCardOverrides$1["PRODUCT_CARD_ANIMATED_IMAGE_CONTAINER"] = "spiffy-product-card-animated";
17
- return AnimatedProductCardOverrides$1;
18
- }({});
19
-
20
- //#endregion
21
- //#region src/components/ProductCard/ProductCardSkeleton.tsx
22
- const ProductCardSkeleton = ({ layoutVariant, aspectRatio, growWithContainer = false }) => {
23
- const layoutClasses = require_ProductCard.productCardLayoutVariantClasses[layoutVariant || "normal"];
24
- const containerClasses = (0, classnames.default)(ProductCardSkeletonOverrides.PRODUCT_CARD_SKELETON_CONTAINER, "spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-gap-inherit", "spiffy-tw-bg-transparent", !growWithContainer ? layoutClasses.container : "");
25
- const verticalContainerClasses = (0, classnames.default)("spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-overflow-hidden", "spiffy-tw-gap-inherit", !growWithContainer ? layoutClasses.verticalContainer : "");
26
- const imageClipContainerClasses = (0, classnames.default)("spiffy-tw-w-full", aspectRatio === "3:4" ? "spiffy-tw-aspect-[3/4]" : "", aspectRatio === "square" ? "spiffy-tw-aspect-square" : "", "spiffy-tw-overflow-hidden");
27
- const imageSkeletonClasses = (0, classnames.default)("spiffy-tw-bg-[#F4F4F6]", "spiffy-tw-animate-pulse", "spiffy-tw-opacity-70", "spiffy-tw-w-full", "spiffy-tw-h-full");
28
- const contentContainerClasses = (0, classnames.default)("spiffy-tw-flex", "spiffy-tw-flex-col", "spiffy-tw-gap-2", "spiffy-tw-w-full", "spiffy-tw-p-2");
29
- const textSkeletonClasses = (0, classnames.default)(ProductCardSkeletonOverrides.PRODUCT_CARD_SKELETON, "spiffy-tw-h-[15px]", "spiffy-tw-block", "spiffy-tw-rounded-sm", "spiffy-tw-animate-pulse", "spiffy-tw-opacity-70", "spiffy-tw-bg-[#F4F4F6]");
30
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
31
- className: containerClasses,
32
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33
- className: verticalContainerClasses,
34
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
35
- className: imageClipContainerClasses,
36
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: imageSkeletonClasses })
37
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38
- className: contentContainerClasses,
39
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, classnames.default)(textSkeletonClasses, "spiffy-tw-w-full") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, classnames.default)(textSkeletonClasses, "spiffy-tw-w-[60%]") })]
40
- })]
41
- })
42
- });
43
- };
44
-
45
- //#endregion
46
- Object.defineProperty(exports, 'AnimatedProductCardOverrides', {
47
- enumerable: true,
48
- get: function () {
49
- return AnimatedProductCardOverrides;
50
- }
51
- });
52
- Object.defineProperty(exports, 'ProductCardSkeleton', {
53
- enumerable: true,
54
- get: function () {
55
- return ProductCardSkeleton;
56
- }
57
- });
58
- Object.defineProperty(exports, 'ProductCardSkeletonOverrides', {
59
- enumerable: true,
60
- get: function () {
61
- return ProductCardSkeletonOverrides;
62
- }
63
- });
@@ -1,3 +0,0 @@
1
- import { SearchAutocomplete } from "../SearchAutocomplete-DCu9-Yfk.js";
2
-
3
- export { SearchAutocomplete };
@@ -1,5 +0,0 @@
1
- //#region src/components/SearchResultsFilterSidebar/types.d.ts
2
- type SearchFilterSidebarVariant = 'darkButton' | 'lightButton';
3
- type CloseIconVariant = 'light' | 'tertiary' | 'dark';
4
- //#endregion
5
- export { CloseIconVariant, SearchFilterSidebarVariant };
@@ -1,46 +0,0 @@
1
- import { ReactNode } from "react";
2
-
3
- //#region src/components/SearchFilter/types.d.ts
4
- type SearchFilterItem = {
5
- id: string;
6
- displayName: string;
7
- value: string;
8
- isSelected: boolean;
9
- };
10
- type SearchFilter = {
11
- id: string;
12
- displayName: string;
13
- items: SearchFilterItem[];
14
- };
15
- type SelectFilterItem = (filterItem: SearchFilterItem) => void;
16
- interface SearchFilterItemProps {
17
- filterItem: SearchFilterItem;
18
- onSelectFilterItem: SelectFilterItem;
19
- radioButtonFillColor: string;
20
- radioButtonHoverColor: string;
21
- radioButtonUncheckedBorderColor: string;
22
- }
23
- interface SearchFilterHeaderProps {
24
- closeModal: () => void;
25
- productCount: number;
26
- headerClassName: string;
27
- filterCloseIconVariant: 'dark' | 'light' | 'tertiary';
28
- }
29
- interface SearchFilterProps {
30
- isOpen: boolean;
31
- setIsOpen: (isOpen: boolean) => void;
32
- filters: SearchFilter[];
33
- productCount: number;
34
- selectFilterItem: SelectFilterItem;
35
- clearAllFilters: () => void;
36
- applyFiltersUnchangedClasses: string;
37
- applyFiltersChangedClasses: string;
38
- filterButtonText: string;
39
- radioButtonFillColor: string;
40
- radioButtonHoverColor: string;
41
- radioButtonUncheckedBorderColor: string;
42
- filterCloseIconVariant: 'dark' | 'light' | 'tertiary';
43
- headerContent: ReactNode;
44
- }
45
- //#endregion
46
- export { SearchFilter, SearchFilterHeaderProps, SearchFilterItemProps, SearchFilterProps, SelectFilterItem };
@@ -1,5 +0,0 @@
1
- //#region src/components/SearchResultsFilterSidebar/types.d.ts
2
- type SearchFilterSidebarVariant = 'darkButton' | 'lightButton';
3
- type CloseIconVariant = 'light' | 'tertiary' | 'dark';
4
- //#endregion
5
- export { CloseIconVariant, SearchFilterSidebarVariant };
@@ -1,46 +0,0 @@
1
- import { ReactNode } from "react";
2
-
3
- //#region src/components/SearchFilter/types.d.ts
4
- type SearchFilterItem = {
5
- id: string;
6
- displayName: string;
7
- value: string;
8
- isSelected: boolean;
9
- };
10
- type SearchFilter = {
11
- id: string;
12
- displayName: string;
13
- items: SearchFilterItem[];
14
- };
15
- type SelectFilterItem = (filterItem: SearchFilterItem) => void;
16
- interface SearchFilterItemProps {
17
- filterItem: SearchFilterItem;
18
- onSelectFilterItem: SelectFilterItem;
19
- radioButtonFillColor: string;
20
- radioButtonHoverColor: string;
21
- radioButtonUncheckedBorderColor: string;
22
- }
23
- interface SearchFilterHeaderProps {
24
- closeModal: () => void;
25
- productCount: number;
26
- headerClassName: string;
27
- filterCloseIconVariant: 'dark' | 'light' | 'tertiary';
28
- }
29
- interface SearchFilterProps {
30
- isOpen: boolean;
31
- setIsOpen: (isOpen: boolean) => void;
32
- filters: SearchFilter[];
33
- productCount: number;
34
- selectFilterItem: SelectFilterItem;
35
- clearAllFilters: () => void;
36
- applyFiltersUnchangedClasses: string;
37
- applyFiltersChangedClasses: string;
38
- filterButtonText: string;
39
- radioButtonFillColor: string;
40
- radioButtonHoverColor: string;
41
- radioButtonUncheckedBorderColor: string;
42
- filterCloseIconVariant: 'dark' | 'light' | 'tertiary';
43
- headerContent: ReactNode;
44
- }
45
- //#endregion
46
- export { SearchFilter, SearchFilterHeaderProps, SearchFilterItemProps, SearchFilterProps, SelectFilterItem };
@@ -1,4 +0,0 @@
1
- //#region src/components/SearchInputForm/types.d.ts
2
- type SearchInputVariant = 'standard';
3
- //#endregion
4
- export { SearchInputVariant };
@@ -1,4 +0,0 @@
1
- //#region src/components/SearchInputForm/types.d.ts
2
- type SearchInputVariant = 'standard';
3
- //#endregion
4
- export { SearchInputVariant };
@@ -1,24 +0,0 @@
1
- // Local type definitions for external dependencies that may not be available
2
-
3
- export enum ResponseCategory {
4
- Product = 'product',
5
- }
6
-
7
- export interface SearchResponseProduct {
8
- id: string;
9
- title: string;
10
- description?: string;
11
- price?: number;
12
- currency?: string;
13
- imageUrl?: string;
14
- brand?: string;
15
- category?: string;
16
- availability?: string;
17
- url?: string;
18
- responseId?: string;
19
- originalPrice?: number;
20
- salePrice?: number;
21
- averageRating?: number;
22
- numberReviews?: number;
23
- [key: string]: unknown;
24
- }