@envive-ai/react-toolkit 0.2.11 → 0.2.12

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 (301) hide show
  1. package/dist/{Accordion-FyCFBOen.cjs → Accordion-B0TzPN3m.cjs} +2 -5
  2. package/dist/{Accordion-B8aUlf0q.js → Accordion-D8Vm8J1y.js} +4 -4
  3. package/dist/{AnimatedChevron-wpcAHp6d.cjs → AnimatedChevron-9xf90bpP.cjs} +0 -2
  4. package/dist/{AnimatedChevron-Dee6Pe81.js → AnimatedChevron-DghLnmlM.js} +1 -1
  5. package/dist/{ButtonBase-B6vDKbGQ.cjs → ButtonBase-BMEAmPnS.cjs} +1 -3
  6. package/dist/{ButtonBase-Bpc7nOpz.js → ButtonBase-CT397aT3.js} +3 -3
  7. package/dist/{DynamicFiltersScrollbar-D8OqC4DA.js → DynamicFiltersScrollbar-CibstqNd.js} +5 -7
  8. package/dist/{DynamicFiltersScrollbar-DIwHWq6v.cjs → DynamicFiltersScrollbar-DqIydLJu.cjs} +3 -6
  9. package/dist/{ImageWithFallback-DvaVpR6v.cjs → ImageWithFallback-CuPe6XF6.cjs} +1 -2
  10. package/dist/{ImageWithFallback-BW57cQw-.js → ImageWithFallback-_QZT0EKI.js} +2 -2
  11. package/dist/{ModalSheet-BvM2PJbH.cjs → ModalSheet-Be7-bkXK.cjs} +11 -16
  12. package/dist/{ModalSheet-DFva7krP.js → ModalSheet-DVrY7Mw0.js} +12 -13
  13. package/dist/{ProductCard-C2KvH4MN.cjs → ProductCard-BeY85PBf.cjs} +31 -28
  14. package/dist/{ProductCard-BiWAcPO4.js → ProductCard-BoyYu6mI.js} +19 -24
  15. package/dist/{ProductGrid-DkOyRAEg.cjs → ProductGrid-CxKK7w_X.cjs} +2 -3
  16. package/dist/{ProductGrid-B1RtE58G.js → ProductGrid-DmtSXfyE.js} +3 -3
  17. package/dist/{RadioButton-CQ6qOvBl.js → RadioButton-Bm0qK3bX.js} +3 -3
  18. package/dist/{RadioButton-DP-qs5cy.cjs → RadioButton-Dcdj8pNp.cjs} +1 -3
  19. package/dist/{RadioButtonGroup-CJPWfAaA.cjs → RadioButtonGroup-BnnMx8sE.cjs} +2 -3
  20. package/dist/{RadioButtonGroup-Ce8cKqYw.js → RadioButtonGroup-hme7gSiQ.js} +3 -3
  21. package/dist/RecommendedProducts-C2eNVrLo.cjs +56 -0
  22. package/dist/RecommendedProducts-LalI8aVC.js +49 -0
  23. package/dist/{SearchAutocomplete-bbMvWWjI.cjs → SearchAutocomplete-A3HXkHwK.cjs} +3 -6
  24. package/dist/{SearchAutocomplete-CjjL2_lm.js → SearchAutocomplete-Rza3A-gs.js} +5 -6
  25. package/dist/{SearchFilter-wHwOym_n.js → SearchFilter-CYY5sNXV.js} +40 -44
  26. package/dist/{SearchFilter-BLi6E9Wx.cjs → SearchFilter-DxrQOLx0.cjs} +38 -44
  27. package/dist/{SearchInput-BA6bepV_.cjs → SearchInput-3ppsm2Ke.cjs} +4 -7
  28. package/dist/{SearchInput-C3nNkmBm.js → SearchInput-DE9Iz7A8.js} +4 -5
  29. package/dist/{SearchInputForm/index.cjs → SearchInputForm-CZz62rOX.cjs} +10 -10
  30. package/dist/{SearchInputForm/index.js → SearchInputForm-DrI4WHDt.js} +4 -7
  31. package/dist/SearchResultsFilterButton-BedTofz5.cjs +29 -0
  32. package/dist/SearchResultsFilterButton-CV11UTGi.js +22 -0
  33. package/dist/{SearchResultsFilterSidebar/index.js → SearchResultsFilterSidebar-Bvpk7Uoo.js} +5 -14
  34. package/dist/{SearchResultsFilterSidebar/index.cjs → SearchResultsFilterSidebar-Dgz98oyD.cjs} +11 -18
  35. package/dist/{SearchResultsStates-C-8fh8B9.cjs → SearchResultsStates-D37wFr9h.cjs} +42 -16
  36. package/dist/{SearchResultsStates-D62WbDTD.js → SearchResultsStates-DrGtw0pM.js} +44 -16
  37. package/dist/{SparkleAnimation-BFAj73CF.cjs → SparkleAnimation-B5A_NCuy.cjs} +16 -10
  38. package/dist/{SparkleAnimation-BYDUEqWX.js → SparkleAnimation-BSI_34HX.js} +11 -8
  39. package/dist/{Spinner-D2HbRsuw.js → Spinner-CDDFWySo.js} +2 -2
  40. package/dist/{Spinner-Ccy6VFEp.cjs → Spinner-FQpy5bGu.cjs} +1 -2
  41. package/dist/{TextInput-CYTko3-n.cjs → TextInput-Do5-j1V_.cjs} +3 -5
  42. package/dist/{TextInput-CmxnphaT.js → TextInput-PtrUXoZo.js} +5 -6
  43. package/dist/{ToggleButton-V9Qsaks7.js → ToggleButton-BTz_zIdc.js} +3 -3
  44. package/dist/{ToggleButton-CvxNLMe_.cjs → ToggleButton-CmxTz-ou.cjs} +1 -2
  45. package/dist/{Typography-C3QmJzFK.js → Typography-xehJH05l.js} +1 -1
  46. package/dist/colorsConfig-BjdoRtRK.js +26 -0
  47. package/dist/colorsConfig-D-MZuBvt.cjs +38 -0
  48. package/dist/{Accordion/index.d.ts → components/Accordion/index-BPofgdcd.d.cts} +2 -2
  49. package/dist/components/Accordion/index.cjs +4 -0
  50. package/dist/components/Accordion/index.js +4 -0
  51. package/dist/{AnimatedChevron/index.d.cts → components/AnimatedChevron/index-Bvff3AGS.d.ts} +2 -2
  52. package/dist/{AnimatedChevron/index.d.ts → components/AnimatedChevron/index-BwQ6tJL8.d.cts} +2 -2
  53. package/dist/components/AnimatedChevron/index.cjs +3 -0
  54. package/dist/components/AnimatedChevron/index.js +3 -0
  55. package/dist/{AppliedFiltersScrollbar/index.d.ts → components/AppliedFiltersScrollbar/index-BKNoroAl.d.ts} +3 -3
  56. package/dist/{AppliedFiltersScrollbar/index.d.cts → components/AppliedFiltersScrollbar/index-DADY550R.d.cts} +3 -3
  57. package/dist/{AppliedFiltersScrollbar → components/AppliedFiltersScrollbar}/index.cjs +4 -6
  58. package/dist/{AppliedFiltersScrollbar → components/AppliedFiltersScrollbar}/index.js +3 -4
  59. package/dist/{ButtonBase/index.d.ts → components/ButtonBase/index-BCw2WQ-2.d.ts} +3 -3
  60. package/dist/{ButtonBase/index.d.cts → components/ButtonBase/index-pBSmWoqg.d.cts} +3 -3
  61. package/dist/components/ButtonBase/index.cjs +6 -0
  62. package/dist/components/ButtonBase/index.js +5 -0
  63. package/dist/{DynamicFiltersScrollbar/index.d.cts → components/DynamicFiltersScrollbar/index-BvAT64cX.d.ts} +2 -2
  64. package/dist/{DynamicFiltersScrollbar/index.d.ts → components/DynamicFiltersScrollbar/index-X--ALCSa.d.cts} +2 -2
  65. package/dist/{DynamicFiltersScrollbar → components/DynamicFiltersScrollbar}/index.cjs +4 -6
  66. package/dist/{DynamicFiltersScrollbar → components/DynamicFiltersScrollbar}/index.js +3 -4
  67. package/dist/{FilterScrollbar/index.d.cts → components/FilterScrollbar/index-DgxXE1ff.d.cts} +4 -4
  68. package/dist/{FilterScrollbar/index.d.ts → components/FilterScrollbar/index-xlg1Q06Q.d.ts} +4 -4
  69. package/dist/components/FilterScrollbar/index.cjs +5 -0
  70. package/dist/components/FilterScrollbar/index.js +4 -0
  71. package/dist/{ImageWithFallback/index.d.cts → components/ImageWithFallback/index-C8Fqb7AQ.d.cts} +2 -2
  72. package/dist/{ImageWithFallback/index.d.ts → components/ImageWithFallback/index-yxDWrUCQ.d.ts} +2 -2
  73. package/dist/components/ImageWithFallback/index.cjs +3 -0
  74. package/dist/components/ImageWithFallback/index.js +3 -0
  75. package/dist/{ModalSheet/index.d.cts → components/ModalSheet/index-Cp_h5dbe.d.ts} +2 -2
  76. package/dist/{ModalSheet/index.d.ts → components/ModalSheet/index-Dnt-aUte.d.cts} +2 -2
  77. package/dist/components/ModalSheet/index.cjs +4 -0
  78. package/dist/components/ModalSheet/index.js +4 -0
  79. package/dist/components/ProductCard/index-BF8pv46P.d.ts +2 -0
  80. package/dist/components/ProductCard/index-C6TLdXjC.d.cts +2 -0
  81. package/dist/{ProductCard → components/ProductCard}/index.cjs +7 -4
  82. package/dist/components/ProductCard/index.js +7 -0
  83. package/dist/{ProductGrid/index.d.ts → components/ProductGrid/index-B1eVXjB4.d.cts} +4 -3
  84. package/dist/{ProductGrid/index.d.cts → components/ProductGrid/index-CyDy1V6o.d.ts} +4 -3
  85. package/dist/components/ProductGrid/index.cjs +9 -0
  86. package/dist/components/ProductGrid/index.js +8 -0
  87. package/dist/{RadioButton/index.d.ts → components/RadioButton/index-BHl3dM6k.d.cts} +3 -3
  88. package/dist/{RadioButton/index.d.cts → components/RadioButton/index-BZrcz8-J.d.ts} +3 -3
  89. package/dist/components/RadioButton/index.cjs +4 -0
  90. package/dist/components/RadioButton/index.js +4 -0
  91. package/dist/{RadioButtonGroup/index.d.ts → components/RadioButtonGroup/index-DdyMuFCX.d.ts} +3 -3
  92. package/dist/{RadioButtonGroup/index.d.cts → components/RadioButtonGroup/index-DtdjcXo-.d.cts} +3 -3
  93. package/dist/components/RadioButtonGroup/index.cjs +6 -0
  94. package/dist/components/RadioButtonGroup/index.js +5 -0
  95. package/dist/components/RecommendedProducts/index-BFM83Qu3.d.cts +15 -0
  96. package/dist/components/RecommendedProducts/index-DlbCfGof.d.ts +15 -0
  97. package/dist/components/RecommendedProducts/index.cjs +12 -0
  98. package/dist/components/RecommendedProducts/index.js +12 -0
  99. package/dist/{SearchAutocomplete/index.d.cts → components/SearchAutocomplete/index-Br_POGOz.d.ts} +2 -2
  100. package/dist/{SearchAutocomplete/index.d.ts → components/SearchAutocomplete/index-Ce9gkkbU.d.cts} +2 -2
  101. package/dist/components/SearchAutocomplete/index.cjs +4 -0
  102. package/dist/components/SearchAutocomplete/index.js +4 -0
  103. package/dist/components/SearchFilter/index-DAR4UKSA.d.cts +91 -0
  104. package/dist/components/SearchFilter/index-VygXUBM9.d.ts +91 -0
  105. package/dist/components/SearchFilter/index.cjs +17 -0
  106. package/dist/components/SearchFilter/index.js +12 -0
  107. package/dist/{SearchInput/index.d.cts → components/SearchInput/index-UY0W77Y0.d.ts} +4 -3
  108. package/dist/{SearchInput/index.d.ts → components/SearchInput/index-rFDdhvqg.d.cts} +4 -3
  109. package/dist/components/SearchInput/index.cjs +7 -0
  110. package/dist/components/SearchInput/index.js +6 -0
  111. package/dist/{SearchInputForm/index.d.ts → components/SearchInputForm/index-_sR_KugL.d.ts} +3 -3
  112. package/dist/{SearchInputForm/index.d.cts → components/SearchInputForm/index-dlLBivQA.d.cts} +3 -3
  113. package/dist/components/SearchInputForm/index.cjs +8 -0
  114. package/dist/components/SearchInputForm/index.js +8 -0
  115. package/dist/{SearchResultsContent/index.d.cts → components/SearchResultsContent/index-B_6-7-t-.d.ts} +19 -7
  116. package/dist/{SearchResultsContent/index.d.ts → components/SearchResultsContent/index-CayvNVCK.d.cts} +19 -7
  117. package/dist/components/SearchResultsContent/index.cjs +60 -0
  118. package/dist/components/SearchResultsContent/index.js +58 -0
  119. package/dist/components/SearchResultsFilterButton/index-D_u8PzTc.d.cts +13 -0
  120. package/dist/components/SearchResultsFilterButton/index-DuTGqa7-.d.ts +13 -0
  121. package/dist/components/SearchResultsFilterButton/index.cjs +9 -0
  122. package/dist/components/SearchResultsFilterButton/index.js +9 -0
  123. package/dist/components/SearchResultsFilterModal/index-BNZEJiXR.d.cts +27 -0
  124. package/dist/components/SearchResultsFilterModal/index-CXBAA2-F.d.ts +27 -0
  125. package/dist/components/SearchResultsFilterModal/index.cjs +47 -0
  126. package/dist/components/SearchResultsFilterModal/index.js +46 -0
  127. package/dist/components/SearchResultsFilterSidebar/index-BDcl27l4.d.ts +2 -0
  128. package/dist/components/SearchResultsFilterSidebar/index-DgPB1knO.d.cts +2 -0
  129. package/dist/components/SearchResultsFilterSidebar/index.cjs +16 -0
  130. package/dist/components/SearchResultsFilterSidebar/index.js +15 -0
  131. package/dist/{SearchResultsStates/index.d.cts → components/SearchResultsStates/index-CjYl1v-v.d.cts} +16 -5
  132. package/dist/{SearchResultsStates/index.d.ts → components/SearchResultsStates/index-DJaUfKjE.d.ts} +20 -9
  133. package/dist/components/SearchResultsStates/index.cjs +16 -0
  134. package/dist/components/SearchResultsStates/index.js +14 -0
  135. package/dist/components/SearchResultsToolbar/index-CVstdvRQ.d.cts +49 -0
  136. package/dist/components/SearchResultsToolbar/index-tAB6lEUm.d.ts +49 -0
  137. package/dist/components/SearchResultsToolbar/index.cjs +66 -0
  138. package/dist/components/SearchResultsToolbar/index.js +63 -0
  139. package/dist/components/SparkleAnimation/index-BQOC3G_6.d.cts +23 -0
  140. package/dist/components/SparkleAnimation/index-DjRK3Dys.d.ts +23 -0
  141. package/dist/components/SparkleAnimation/index.cjs +4 -0
  142. package/dist/components/SparkleAnimation/index.js +3 -0
  143. package/dist/{Spinner/index.d.cts → components/Spinner/index-C0pGovHC.d.cts} +2 -2
  144. package/dist/{Spinner/index.d.ts → components/Spinner/index-CIr1izou.d.ts} +2 -2
  145. package/dist/components/Spinner/index.cjs +3 -0
  146. package/dist/components/Spinner/index.js +3 -0
  147. package/dist/{SuggestionButton/index.d.ts → components/SuggestionButton/index-B4J70IPS.d.cts} +3 -3
  148. package/dist/{SuggestionButton/index.d.cts → components/SuggestionButton/index-D6_y1hTj.d.ts} +3 -3
  149. package/dist/{SuggestionButton → components/SuggestionButton}/index.cjs +6 -8
  150. package/dist/{SuggestionButton → components/SuggestionButton}/index.js +5 -6
  151. package/dist/{TextInput/index.d.cts → components/TextInput/index-CRJMRe-b.d.cts} +2 -2
  152. package/dist/{TextInput/index.d.ts → components/TextInput/index-CkQtHiR9.d.ts} +2 -2
  153. package/dist/components/TextInput/index.cjs +4 -0
  154. package/dist/components/TextInput/index.js +4 -0
  155. package/dist/{ToggleButton/index.d.ts → components/ToggleButton/index-B2rBwaVX.d.cts} +2 -2
  156. package/dist/{ToggleButton/index.d.cts → components/ToggleButton/index-Dc-cs_tK.d.ts} +2 -2
  157. package/dist/components/ToggleButton/index.cjs +4 -0
  158. package/dist/components/ToggleButton/index.js +4 -0
  159. package/dist/components/Typography/index-DE1Nhjra.d.ts +3 -0
  160. package/dist/components/Typography/index-DzSBreyM.d.cts +3 -0
  161. package/dist/{Typography → components/Typography}/index.cjs +1 -1
  162. package/dist/components/Typography/index.js +3 -0
  163. package/dist/formatPrice-CyfkjZ3R.cjs +19 -0
  164. package/dist/formatPrice-DexQu2aZ.js +13 -0
  165. package/dist/{SearchResultsFilterSidebar/index.d.ts → index-8cIrhPDk.d.ts} +9 -5
  166. package/dist/{SearchResultsFilterSidebar/index.d.cts → index-BKYA7uMB.d.cts} +9 -5
  167. package/dist/{index-DoTNu3mL.d.cts → index-Bw6lDfEp.d.cts} +2 -2
  168. package/dist/index-CqfgJHj8.d.cts +325 -0
  169. package/dist/{index-C5iOTsRG.d.ts → index-Cr8VXccr.d.ts} +2 -2
  170. package/dist/index-Cz6qxTZG.d.ts +325 -0
  171. package/dist/{searchFilterSidebarVariants-BQ7OC862.cjs → searchFilterSidebarVariants-C61Byr1S.cjs} +7 -10
  172. package/dist/{searchFilterSidebarVariants-C_rWIcxf.js → searchFilterSidebarVariants-DcwlBfvY.js} +2 -3
  173. package/dist/types--eyQnaEA.d.cts +4 -0
  174. package/dist/types-CQpdBL3M.d.ts +4 -0
  175. package/dist/{typographyVariantClasses-BFRoEloZ.d.cts → typographyVariantClasses-CoRhazCU.d.cts} +1 -1
  176. package/dist/{typographyVariantClasses-D7h3ACAj.d.ts → typographyVariantClasses-CrT5OfVw.d.ts} +1 -1
  177. package/dist/util/index-C2ueYGXh.d.ts +21 -0
  178. package/dist/util/index-DUzbpjPa.d.cts +21 -0
  179. package/dist/util/index.cjs +80 -0
  180. package/dist/util/index.js +76 -0
  181. package/package.json +79 -53
  182. package/src/atoms/search/types.ts +1 -0
  183. package/src/components/AppliedFiltersScrollbar/AppliedFiltersScrollbar.tsx +1 -1
  184. package/src/components/ButtonBase/types.ts +1 -1
  185. package/src/components/FilterScrollbar/AppliedFiltersScrollbar.tsx +1 -1
  186. package/src/components/ProductCard/ProductCard.tsx +12 -12
  187. package/src/components/ProductCard/ProductCardSkeleton.tsx +1 -13
  188. package/src/components/ProductCard/index.ts +1 -0
  189. package/src/components/ProductCard/productCardVariants.ts +1 -1
  190. package/src/components/ProductCard/types.ts +49 -0
  191. package/src/components/ProductGrid/ProductGrid.tsx +2 -6
  192. package/src/components/ProductGrid/productGridVariants.ts +1 -1
  193. package/src/components/RadioButton/RadioButton.tsx +1 -1
  194. package/src/components/RadioButtonGroup/RadioButtonGroup.tsx +1 -1
  195. package/src/components/RecommendedProducts/RecommendedProducts.tsx +97 -0
  196. package/src/components/RecommendedProducts/index.ts +3 -0
  197. package/src/components/SearchFilter/SearchFilter.tsx +2 -1
  198. package/src/components/SearchFilter/SearchFilterFooter.tsx +1 -1
  199. package/src/components/SearchFilter/SearchFilterHeader.tsx +1 -1
  200. package/src/components/SearchFilter/SearchFilterItem.tsx +1 -1
  201. package/src/components/SearchFilter/types.ts +45 -0
  202. package/src/components/SearchFilter/useHasFilterStateChanged.tsx +1 -1
  203. package/src/components/SearchFilter/utils.ts +1 -1
  204. package/src/components/SearchInput/SearchInput.tsx +1 -1
  205. package/src/components/SearchInput/searchInputVariants.ts +2 -2
  206. package/src/components/SearchInputForm/SearchInputForm.tsx +7 -4
  207. package/src/components/SearchResultsContent/SearchResultsContent.tsx +72 -39
  208. package/src/components/SearchResultsFilterButton/SearchResultsFilterButton.tsx +30 -0
  209. package/src/components/SearchResultsFilterButton/index.ts +3 -0
  210. package/src/components/SearchResultsFilterModal/SearchResultsFilterModal.tsx +61 -0
  211. package/src/components/SearchResultsFilterModal/index.ts +3 -0
  212. package/src/components/SearchResultsFilterSidebar/SearchResultsFilter.tsx +2 -1
  213. package/src/components/SearchResultsFilterSidebar/index.ts +1 -0
  214. package/src/components/SearchResultsFilterSidebar/searchFilterSidebarVariants.ts +2 -2
  215. package/src/components/SearchResultsFilterSidebar/types.ts +2 -0
  216. package/src/components/SearchResultsStates/NoSearchResultsFound.tsx +43 -11
  217. package/src/components/SearchResultsStates/SearchResultsGrid.tsx +8 -7
  218. package/src/components/SearchResultsStates/SearchResultsLoadingGrid.tsx +1 -2
  219. package/src/components/SearchResultsToolbar/SearchResultsToolbar.tsx +111 -0
  220. package/src/components/SearchResultsToolbar/index.ts +3 -0
  221. package/src/components/SparkleAnimation/SparkleAnimation.tsx +1 -7
  222. package/src/components/SparkleAnimation/index.ts +1 -0
  223. package/src/components/SparkleAnimation/types.ts +6 -0
  224. package/src/components/SuggestionButton/SuggestionButton.tsx +1 -1
  225. package/src/config/chatElementDisplayLocation.ts +23 -0
  226. package/src/models/colorsConfig.ts +28 -0
  227. package/src/stories/AppliedFiltersScrollbar.stories.tsx +42 -0
  228. package/src/stories/ButtonBase.stories.tsx +54 -0
  229. package/src/stories/DynamicFiltersScrollbar.stories.tsx +42 -0
  230. package/src/stories/NoSearchResultsFound.stories.tsx +30 -0
  231. package/src/stories/ProductCard.stories.tsx +78 -0
  232. package/src/stories/ProductCardSkeleton.stories.tsx +48 -0
  233. package/src/stories/ProductGrid.stories.tsx +82 -0
  234. package/src/stories/SearchInputForm.stories.tsx +39 -0
  235. package/src/stories/SearchResultsFilter.stories.tsx +56 -0
  236. package/src/stories/SearchResultsGrid.stories.tsx +98 -0
  237. package/src/stories/SearchResultsLoadingGrid.stories.tsx +30 -0
  238. package/src/stories/SparkleAnimation.stories.tsx +47 -0
  239. package/src/stories/Typography.stories.tsx +140 -0
  240. package/src/util/camelCase.ts +87 -0
  241. package/src/util/camelCasedPropertiesDeep.ts +81 -0
  242. package/src/util/colorVar.ts +1 -1
  243. package/src/util/index.ts +4 -0
  244. package/src/util/internal.ts +97 -0
  245. package/src/util/primitive.ts +8 -0
  246. package/src/util/splitWords.ts +76 -0
  247. package/src/util/trim.ts +28 -0
  248. package/src/util/unknownArray.ts +25 -0
  249. package/src/util/useScrollDirection.ts +60 -0
  250. package/src/util/useStickyVisibility.ts +37 -0
  251. package/dist/Accordion/index.cjs +0 -4
  252. package/dist/Accordion/index.js +0 -4
  253. package/dist/AnimatedChevron/index.cjs +0 -3
  254. package/dist/AnimatedChevron/index.js +0 -3
  255. package/dist/ButtonBase/index.cjs +0 -6
  256. package/dist/ButtonBase/index.js +0 -5
  257. package/dist/FilterScrollbar/index.cjs +0 -5
  258. package/dist/FilterScrollbar/index.js +0 -4
  259. package/dist/ImageWithFallback/index.cjs +0 -3
  260. package/dist/ImageWithFallback/index.js +0 -3
  261. package/dist/ModalSheet/index.cjs +0 -4
  262. package/dist/ModalSheet/index.js +0 -4
  263. package/dist/ProductCard/index.d.cts +0 -82
  264. package/dist/ProductCard/index.d.ts +0 -82
  265. package/dist/ProductCard/index.js +0 -6
  266. package/dist/ProductGrid/index.cjs +0 -8
  267. package/dist/ProductGrid/index.js +0 -7
  268. package/dist/RadioButton/index.cjs +0 -4
  269. package/dist/RadioButton/index.js +0 -4
  270. package/dist/RadioButtonGroup/index.cjs +0 -6
  271. package/dist/RadioButtonGroup/index.js +0 -5
  272. package/dist/SearchAutocomplete/index.cjs +0 -4
  273. package/dist/SearchAutocomplete/index.js +0 -4
  274. package/dist/SearchFilter/index.cjs +0 -17
  275. package/dist/SearchFilter/index.d.cts +0 -54
  276. package/dist/SearchFilter/index.d.ts +0 -54
  277. package/dist/SearchFilter/index.js +0 -12
  278. package/dist/SearchInput/index.cjs +0 -7
  279. package/dist/SearchInput/index.js +0 -6
  280. package/dist/SearchResultsContent/index.cjs +0 -44
  281. package/dist/SearchResultsContent/index.js +0 -41
  282. package/dist/SearchResultsStates/index.cjs +0 -14
  283. package/dist/SearchResultsStates/index.js +0 -12
  284. package/dist/SparkleAnimation/index.cjs +0 -3
  285. package/dist/SparkleAnimation/index.d.cts +0 -15
  286. package/dist/SparkleAnimation/index.d.ts +0 -15
  287. package/dist/SparkleAnimation/index.js +0 -3
  288. package/dist/Spinner/index.cjs +0 -3
  289. package/dist/Spinner/index.js +0 -3
  290. package/dist/TextInput/index.cjs +0 -4
  291. package/dist/TextInput/index.js +0 -4
  292. package/dist/ToggleButton/index.cjs +0 -4
  293. package/dist/ToggleButton/index.js +0 -4
  294. package/dist/Typography/index.d.cts +0 -3
  295. package/dist/Typography/index.d.ts +0 -3
  296. package/dist/Typography/index.js +0 -3
  297. package/dist/colorVar-B5CLhSof.cjs +0 -11
  298. package/dist/colorVar-BJve0Z4_.js +0 -5
  299. /package/dist/{ButtonBase-DbWQ25n-.cjs → ButtonBase-BIXx56hq.cjs} +0 -0
  300. /package/dist/{ButtonBase-C_uKnl48.js → ButtonBase-C9fn-c5h.js} +0 -0
  301. /package/dist/{Accordion/index.d.cts → components/Accordion/index-DBEaF9x5.d.ts} +0 -0
@@ -1,9 +1,9 @@
1
1
  import classNames from 'classnames';
2
2
  import { SEARCH_INPUT_TESTID } from '@envive-ai/react-hooks/config/locators/components/search';
3
- import { SearchInputVariant } from '@envive-ai/types';
4
3
  import { SearchAutocomplete } from '../SearchAutocomplete';
5
4
  import { SearchInput } from '../SearchInput/SearchInput';
6
5
  import { searchInputVariantClasses } from '../SearchInput/searchInputVariants';
6
+ import { SearchInputVariant } from '../../atoms/search/types';
7
7
 
8
8
  interface SearchInputFormProps {
9
9
  searchInputVariant: SearchInputVariant;
@@ -38,12 +38,15 @@ export const SearchInputForm = ({
38
38
  }: SearchInputFormProps) => {
39
39
  const { autocompleteIconColor } = searchInputVariantClasses[searchInputVariant];
40
40
 
41
- const containerClasses = classNames('spiffy-tw-relative', 'spiffy-tw-w-full');
41
+ const containerClasses = classNames(
42
+ 'spiffy-tw-relative',
43
+ 'spiffy-tw-w-full'
44
+ );
42
45
 
43
46
  const formClasses = classNames({
44
47
  'spiffy-tw-grow': true,
45
48
  'spiffy-tw-relative': true,
46
- 'spiffy-tw-z-20': shouldShowAutocomplete,
49
+ 'spiffy-tw-z-20': shouldShowAutocomplete
47
50
  });
48
51
 
49
52
  const autocompleteContainerClasses = classNames(
@@ -57,7 +60,7 @@ export const SearchInputForm = ({
57
60
  'spiffy-tw-rounded-b-lg',
58
61
  'spiffy-tw-border',
59
62
  'spiffy-tw-border-t-0',
60
- 'spiffy-tw-pt-4',
63
+ 'spiffy-tw-pt-4'
61
64
  );
62
65
 
63
66
  return (
@@ -1,11 +1,13 @@
1
+ import classNames from 'classnames';
2
+ import { SearchResponseProduct } from '@spiffy-ai/commerce-api-client';
3
+ import { SelectedFilterOption } from '@envive-ai/react-hooks/atoms/search';
4
+ import { SearchResultsState } from '@envive-ai/react-hooks/hooks/utils';
1
5
  import {
2
- SearchResultsState,
3
- SelectedFilterOption,
4
6
  ProductCardConfig,
5
7
  ProductGridVariant,
6
8
  SearchResponseProductAttributes,
7
- SearchFilterSidebarVariant,
8
- } from '@envive-ai/types';
9
+ } from '../ProductCard';
10
+ import { SearchFilterSidebarVariant } from '../SearchResultsFilterSidebar';
9
11
  import {
10
12
  NoSearchResultsFound,
11
13
  SearchResultsGrid,
@@ -14,16 +16,17 @@ import {
14
16
 
15
17
  interface SearchResultsContentProps {
16
18
  searchResultsState: SearchResultsState;
17
- productList: SearchResponseProductAttributes['attributes'][];
19
+ productList: SearchResponseProduct[];
20
+ recommendedProducts: SearchResponseProductAttributes['attributes'][];
18
21
  productCardConfig: ProductCardConfig;
19
22
  merchantShortName: string;
20
23
  searchFilterSidebarVariant: SearchFilterSidebarVariant;
21
24
  productGridVariant: ProductGridVariant;
22
- productGridClasses: string;
23
25
  containerXPaddingClasses: string;
24
26
  selectedFilterOptions: SelectedFilterOption[];
25
27
  availableDynamicFilters: { name: string; displayName: string }[];
26
28
  onRemoveFilter: (filter: SelectedFilterOption) => void;
29
+ onProductClick?: () => void;
27
30
  onToggleDynamicFilter: ({
28
31
  filter,
29
32
  dynamicFilterDisplayName,
@@ -32,51 +35,81 @@ interface SearchResultsContentProps {
32
35
  dynamicFilterDisplayName: string;
33
36
  }) => void;
34
37
  noResultsFoundText?: string;
38
+ searchResultsRef: React.RefObject<HTMLDivElement>;
39
+ toolbarHeight: number;
40
+ query: string;
35
41
  }
36
42
 
37
43
  export const SearchResultsContent = ({
38
44
  searchResultsState,
39
45
  productList,
46
+ recommendedProducts,
40
47
  productCardConfig,
41
48
  merchantShortName,
42
49
  searchFilterSidebarVariant,
43
50
  productGridVariant,
44
- productGridClasses,
45
51
  containerXPaddingClasses,
46
52
  selectedFilterOptions,
47
53
  availableDynamicFilters,
54
+ onProductClick,
48
55
  onRemoveFilter,
49
56
  onToggleDynamicFilter,
50
57
  noResultsFoundText,
51
- }: SearchResultsContentProps) => (
52
- <div>
53
- {searchResultsState === SearchResultsState.NoResults && (
54
- <NoSearchResultsFound
55
- containerPaddingClasses={containerXPaddingClasses}
56
- includeBottomMargin
57
- noResultsFoundText={noResultsFoundText}
58
- />
59
- )}
60
- {searchResultsState === SearchResultsState.Results && (
61
- <SearchResultsGrid
62
- searchFilterSidebarVariant={searchFilterSidebarVariant}
63
- productCardConfig={productCardConfig}
64
- merchantShortName={merchantShortName}
65
- productList={productList}
66
- productGridVariant={productGridVariant}
67
- productGridClasses={productGridClasses}
68
- containerXPaddingClasses={containerXPaddingClasses}
69
- selectedFilterOptions={selectedFilterOptions}
70
- availableDynamicFilters={availableDynamicFilters}
71
- onRemoveFilter={onRemoveFilter}
72
- onToggleDynamicFilter={onToggleDynamicFilter}
73
- />
74
- )}
75
- {searchResultsState === SearchResultsState.Loading && (
76
- <SearchResultsLoadingGrid
77
- productGridVariant={productGridVariant}
78
- productGridClasses={productGridClasses}
79
- />
80
- )}
81
- </div>
82
- );
58
+ searchResultsRef,
59
+ toolbarHeight,
60
+ query,
61
+ }: SearchResultsContentProps) => {
62
+ const productGridClasses = classNames(
63
+ 'spiffy-tw-grid',
64
+ 'spiffy-tw-justify-items-stretch',
65
+ 'spiffy-tw-grid-cols-2',
66
+ 'md:spiffy-tw-grid-cols-3',
67
+ 'lg:spiffy-tw-grid-cols-4',
68
+ 'spiffy-tw-gap-x-[4px]',
69
+ 'spiffy-tw-gap-y-[24px]',
70
+ 'spiffy-tw-h-full',
71
+ 'spiffy-tw-w-full',
72
+ 'spiffy-tw-items-stretch',
73
+ containerXPaddingClasses,
74
+ );
75
+
76
+ return (
77
+ <div
78
+ ref={searchResultsRef}
79
+ style={{ paddingTop: `${toolbarHeight}px`, backgroundColor: 'white' }}
80
+ >
81
+ {searchResultsState === SearchResultsState.NoResults && (
82
+ <NoSearchResultsFound
83
+ containerPaddingClasses={containerXPaddingClasses}
84
+ noResultsFoundText={noResultsFoundText}
85
+ recommendedProducts={recommendedProducts}
86
+ searchText={query}
87
+ merchantShortName={merchantShortName}
88
+ productGridVariant={productGridVariant}
89
+ />
90
+ )}
91
+ {searchResultsState === SearchResultsState.Results && (
92
+ <SearchResultsGrid
93
+ searchFilterSidebarVariant={searchFilterSidebarVariant}
94
+ productCardConfig={productCardConfig}
95
+ merchantShortName={merchantShortName}
96
+ productList={productList}
97
+ productGridVariant={productGridVariant}
98
+ productGridClasses={productGridClasses}
99
+ containerXPaddingClasses={containerXPaddingClasses}
100
+ selectedFilterOptions={selectedFilterOptions}
101
+ availableDynamicFilters={availableDynamicFilters}
102
+ onRemoveFilter={onRemoveFilter}
103
+ onProductClick={onProductClick}
104
+ onToggleDynamicFilter={onToggleDynamicFilter}
105
+ />
106
+ )}
107
+ {searchResultsState === SearchResultsState.Loading && (
108
+ <SearchResultsLoadingGrid
109
+ productGridVariant={productGridVariant}
110
+ productGridClasses={productGridClasses}
111
+ />
112
+ )}
113
+ </div>
114
+ );
115
+ };
@@ -0,0 +1,30 @@
1
+ import { useCallback } from 'react';
2
+
3
+ import SettingsVariant from '@envive-ai/react-icons/SettingsVariant';
4
+ import { ButtonBase } from '../ButtonBase';
5
+
6
+ export type SearchResultsFilterButtonProps = {
7
+ setIsOpen: (isOpen: boolean) => void;
8
+ filterButtonText: string;
9
+ };
10
+
11
+ export const SearchResultsFilterButton = ({
12
+ setIsOpen,
13
+ filterButtonText,
14
+ }: SearchResultsFilterButtonProps) => {
15
+ const openFilter = useCallback(() => {
16
+ setIsOpen(true);
17
+ }, [setIsOpen]);
18
+
19
+ return (
20
+ <ButtonBase
21
+ onClick={openFilter}
22
+ icon={SettingsVariant}
23
+ iconClass="spiffy-tw-w-[28px] spiffy-tw-h-[28px] spiffy-tw-object-center"
24
+ text={filterButtonText}
25
+ textClass="spiffy-tw-uppercase spiffy-tw-text-[--spiffy-colors-text-primary] spiffy-tw-hidden md:spiffy-tw-block"
26
+ buttonClass="spiffy-tw-flex-row spiffy-tw-pl-[16px] sm:spiffy-tw-pl-0 sm:spiffy-tw-px-4 sm:spiffy-tw-gap-[8px]"
27
+ disablePadding
28
+ />
29
+ );
30
+ };
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+
3
+ export * from './SearchResultsFilterButton';
@@ -0,0 +1,61 @@
1
+ import { SearchFilterDatum, SelectFilterItem } from '@envive-ai/react-hooks/types';
2
+ import { SearchFilter, SearchFilterHeader } from '../SearchFilter';
3
+ import { SearchFilterSidebarVariant, searchFilterSidebarVariantClasses } from '../SearchResultsFilterSidebar';
4
+
5
+ export type SearchResultsFilterModalProps = {
6
+ productCount: number;
7
+ isOpen: boolean;
8
+ setIsOpen: (isOpen: boolean) => void;
9
+ searchFilters: SearchFilterDatum[];
10
+ searchFilterSidebarVariant: SearchFilterSidebarVariant;
11
+ onSelectFilterItem: SelectFilterItem;
12
+ onClearAllFilters: () => void;
13
+ filterButtonText: string;
14
+ };
15
+
16
+ export const SearchResultsFilterModal = ({
17
+ productCount,
18
+ isOpen,
19
+ setIsOpen,
20
+ searchFilters,
21
+ searchFilterSidebarVariant,
22
+ onSelectFilterItem,
23
+ onClearAllFilters,
24
+ filterButtonText,
25
+ }: SearchResultsFilterModalProps) => {
26
+ const {
27
+ applyFiltersUnchangedClasses,
28
+ applyFiltersChangedClasses,
29
+ searchFilterHeaderClasses,
30
+ radioButtonFillColor,
31
+ radioButtonHoverColor,
32
+ radioButtonUncheckedBorderColor,
33
+ filterCloseIconVariant,
34
+ } = searchFilterSidebarVariantClasses[searchFilterSidebarVariant];
35
+
36
+ return (
37
+ <SearchFilter
38
+ isOpen={isOpen}
39
+ setIsOpen={setIsOpen}
40
+ filters={searchFilters}
41
+ productCount={productCount}
42
+ selectFilterItem={onSelectFilterItem}
43
+ clearAllFilters={onClearAllFilters}
44
+ applyFiltersUnchangedClasses={applyFiltersUnchangedClasses}
45
+ applyFiltersChangedClasses={applyFiltersChangedClasses}
46
+ filterButtonText={filterButtonText}
47
+ radioButtonFillColor={radioButtonFillColor}
48
+ radioButtonHoverColor={radioButtonHoverColor}
49
+ radioButtonUncheckedBorderColor={radioButtonUncheckedBorderColor}
50
+ filterCloseIconVariant={filterCloseIconVariant}
51
+ headerContent={
52
+ <SearchFilterHeader
53
+ closeModal={() => setIsOpen(false)}
54
+ productCount={productCount}
55
+ headerClassName={searchFilterHeaderClasses}
56
+ filterCloseIconVariant={filterCloseIconVariant}
57
+ />
58
+ }
59
+ />
60
+ );
61
+ };
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+
3
+ export * from './SearchResultsFilterModal';
@@ -1,10 +1,11 @@
1
1
  import { useCallback } from 'react';
2
2
 
3
- import { SearchFilterDatum, SelectFilterItem, SearchFilterSidebarVariant } from '@envive-ai/types';
3
+ import { SearchFilterDatum, SelectFilterItem } from '@envive-ai/react-hooks/types';
4
4
  import SettingsVariant from '@envive-ai/react-icons/src/SettingsVariant.js';
5
5
  import { searchFilterSidebarVariantClasses } from './searchFilterSidebarVariants';
6
6
  import { ButtonBase } from '../ButtonBase';
7
7
  import { SearchFilter, SearchFilterHeader } from '../SearchFilter';
8
+ import { SearchFilterSidebarVariant } from './types';
8
9
 
9
10
  export type SearchResultsFilterProps = {
10
11
  productCount: number;
@@ -1,2 +1,3 @@
1
1
  export * from './searchFilterSidebarVariants';
2
2
  export * from './SearchResultsFilter';
3
+ export * from './types';
@@ -1,5 +1,5 @@
1
- import { colorVar } from 'src/util/colorVar';
2
- import { SearchFilterSidebarVariant, CloseIconVariant, ColorNames } from '@envive-ai/types';
1
+ import { ColorNames, colorVar } from 'src/models/colorsConfig';
2
+ import type { SearchFilterSidebarVariant, CloseIconVariant } from './types';
3
3
 
4
4
  interface SearchFilterSidebarVariantClasses {
5
5
  searchFilterHeaderClasses: string;
@@ -0,0 +1,2 @@
1
+ export type SearchFilterSidebarVariant = 'darkButton' | 'lightButton';
2
+ export type CloseIconVariant = 'light' | 'tertiary' | 'dark';
@@ -1,29 +1,55 @@
1
1
  import classNames from 'classnames';
2
2
  import Sparkles from '@envive-ai/react-icons/Sparkles';
3
3
  import { Typography } from 'src/components/Typography';
4
+ import { SearchResponseProductAttributes } from '@envive-ai/react-hooks/application/models';
5
+ import { RecommendedProducts } from '../RecommendedProducts';
6
+ import { ProductGridVariant } from '../ProductCard';
4
7
 
5
8
  interface NoSearchResultsFoundProps {
6
9
  containerPaddingClasses: string;
7
- includeBottomMargin?: boolean; // manually add about a page of bottom margin to push unsupressed content down
10
+ // includeBottomMargin?: boolean; // manually add about a page of bottom margin to push unsupressed content down
8
11
  noResultsFoundText?: string;
9
12
  sparkleIconColor?: string; // example format: var(--spiffy-colors-accent-primary)
13
+ recommendedProducts: SearchResponseProductAttributes['attributes'][];
14
+ searchText: string;
15
+ merchantShortName: string;
16
+ productGridVariant: ProductGridVariant;
10
17
  }
11
18
 
12
19
  export const NoSearchResultsFound = ({
13
20
  containerPaddingClasses,
14
- includeBottomMargin = false,
15
21
  noResultsFoundText,
16
22
  sparkleIconColor = 'var(--spiffy-colors-accent-primary)',
23
+ recommendedProducts,
24
+ searchText,
25
+ merchantShortName,
26
+ productGridVariant,
17
27
  }: NoSearchResultsFoundProps) => {
18
- const containerClasses = classNames(
19
- containerPaddingClasses,
20
- includeBottomMargin ? 'spiffy-tw-mb-[100vh]' : '',
21
- 'spiffy-tw-mt-6',
22
- );
28
+ const containerClasses = classNames(containerPaddingClasses, 'spiffy-tw-mt-6', {
29
+ 'spiffy-tw-mb-[100vh]': recommendedProducts.length === 0,
30
+ });
23
31
 
24
- const textPrompt =
25
- noResultsFoundText ||
26
- "I'm sorry, I wasn't able to find an exact match. Try changing your filters or adjusting your search query.";
32
+ let textPrompt: React.ReactNode;
33
+ if (recommendedProducts.length > 0) {
34
+ textPrompt = noResultsFoundText ? (
35
+ <span>{noResultsFoundText}</span>
36
+ ) : (
37
+ <span>
38
+ I’m sorry, I wasn’t able to find an exact match for
39
+ <strong className="spiffy-tw-font-semibold"> {`"${searchText}".`}</strong> Try changing your
40
+ filters or adjusting your search query. In the meantime, explore some of our top-selling
41
+ products below.
42
+ </span>
43
+ );
44
+ } else {
45
+ textPrompt = (
46
+ <span>
47
+ I’m sorry, I wasn’t able to find an exact match for
48
+ <strong className="spiffy-tw-font-semibold"> {`"${searchText}."`}</strong> Try changing your
49
+ filters or adjusting your search query.
50
+ </span>
51
+ );
52
+ }
27
53
 
28
54
  return (
29
55
  <div className={containerClasses}>
@@ -36,6 +62,12 @@ export const NoSearchResultsFound = ({
36
62
  </div>
37
63
  <Typography variant="body2">{textPrompt}</Typography>
38
64
  </div>
65
+ <RecommendedProducts
66
+ retrievedProducts={recommendedProducts}
67
+ merchantShortName={merchantShortName}
68
+ productCardConfig={{ variant: 'minimal', hoverVariant: 'none', layoutVariant: 'square' }}
69
+ productGridVariant={productGridVariant}
70
+ />
39
71
  </div>
40
72
  );
41
- };
73
+ };
@@ -1,17 +1,15 @@
1
1
  import { motion } from 'framer-motion';
2
+
2
3
  import classNames from 'classnames';
3
4
  import { SearchResponseProduct } from '@spiffy-ai/commerce-api-client';
4
- import {
5
- ProductCardConfig,
6
- ProductGridVariant,
7
- SearchFilterSidebarVariant,
8
- SelectedFilterOption,
9
- } from '@envive-ai/types';
5
+ import { SelectedFilterOption } from '@envive-ai/react-hooks/atoms/search';
10
6
  import { AppliedFiltersScrollbar } from '../FilterScrollbar/AppliedFiltersScrollbar';
11
7
  import { DynamicFiltersScrollbar } from '../FilterScrollbar/DynamicFiltersScrollbar';
12
8
 
13
9
  import { searchFilterSidebarVariantClasses } from '../SearchResultsFilterSidebar/searchFilterSidebarVariants';
10
+ import { ProductCardConfig, ProductGridVariant } from '../ProductCard';
14
11
  import { ProductGrid } from '../ProductGrid';
12
+ import { SearchFilterSidebarVariant } from '../SearchResultsFilterSidebar';
15
13
 
16
14
  interface SearchResultsGridProps {
17
15
  productList: SearchResponseProduct[];
@@ -23,6 +21,7 @@ interface SearchResultsGridProps {
23
21
  selectedFilterOptions: SelectedFilterOption[];
24
22
  containerXPaddingClasses: string;
25
23
  productGridClasses: string;
24
+ onProductClick?: () => void;
26
25
  onRemoveFilter: (filter: SelectedFilterOption) => void;
27
26
  onToggleDynamicFilter: ({
28
27
  filter,
@@ -45,6 +44,7 @@ export const SearchResultsGrid = ({
45
44
  productGridClasses,
46
45
  onRemoveFilter,
47
46
  onToggleDynamicFilter,
47
+ onProductClick,
48
48
  }: SearchResultsGridProps) => {
49
49
  const sharedFilterBarClasses = classNames(
50
50
  'spiffy-suggestion-bar',
@@ -101,7 +101,8 @@ export const SearchResultsGrid = ({
101
101
  productGridClasses={productGridClasses}
102
102
  productCardConfig={productCardConfig}
103
103
  merchantShortName={merchantShortName}
104
+ onProductClick={onProductClick}
104
105
  />
105
106
  </motion.div>
106
107
  );
107
- };
108
+ };
@@ -1,7 +1,6 @@
1
1
  import { motion } from 'framer-motion';
2
2
  import { Typography } from 'src/components/Typography';
3
- import { ProductGridVariant } from '@envive-ai/types';
4
- import { ProductCardSkeleton } from '../ProductCard';
3
+ import { ProductGridVariant, ProductCardSkeleton } from '../ProductCard';
5
4
  import { productGridVariantClasses } from '../ProductGrid';
6
5
  import { SparkleAnimation } from '../SparkleAnimation';
7
6
 
@@ -0,0 +1,111 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ import { SearchInputVariant } from '@envive-ai/react-hooks/contexts/types';
4
+ import { SearchResultsFilterButton } from '../SearchResultsFilterButton';
5
+ import { SearchInputForm } from '../SearchInputForm';
6
+
7
+
8
+ interface SearchResultsToolbarProps {
9
+ // From widgetConfig
10
+ searchInputVariant: SearchInputVariant;
11
+ searchBoxPlaceholder: string;
12
+ // From search hook
13
+ searchText: string;
14
+ focusedIndex: number;
15
+ focusedOptionId: string | undefined;
16
+ autocompleteResults: string[];
17
+ filterButtonText: string;
18
+
19
+ // From search input hook
20
+ shouldShowAutocomplete: boolean;
21
+
22
+ // Event handlers
23
+ onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;
24
+ onSearchInputChange: (value: string) => void;
25
+ onSubmitSearch: () => void;
26
+ onAutocompleteSelect: (suggestion: string, rankPosition?: number) => void;
27
+ onSearchInputFocus: () => void;
28
+ onSearchInputBlur: () => void;
29
+ setIsFilterOpen: (isOpen: boolean) => void;
30
+
31
+ // Styling
32
+ containerXPaddingClasses: string;
33
+
34
+ // Ref for sticky logic
35
+ toolbarRef: React.RefObject<HTMLDivElement> | null;
36
+ isVisible: boolean;
37
+ className?: string;
38
+ }
39
+
40
+ export const SearchResultsToolbar = ({
41
+ searchInputVariant,
42
+ searchBoxPlaceholder,
43
+ searchText,
44
+ focusedIndex,
45
+ focusedOptionId,
46
+ autocompleteResults,
47
+ filterButtonText,
48
+ onKeyDown,
49
+ onSearchInputChange,
50
+ onSubmitSearch,
51
+ onAutocompleteSelect,
52
+ onSearchInputFocus,
53
+ onSearchInputBlur,
54
+ shouldShowAutocomplete,
55
+ setIsFilterOpen,
56
+ containerXPaddingClasses,
57
+ toolbarRef,
58
+ isVisible,
59
+ className,
60
+ }: SearchResultsToolbarProps) => {
61
+ const [hasZIndex, setHasZIndex] = React.useState(false);
62
+
63
+ // The following is to ensure the z-index is applied after the animation is complete
64
+ // because otherwise the z-index would be applied instantly when the component is mounted
65
+ // which would cause the search toolbar to appear over the top of the merchant header
66
+ // in some cases
67
+ React.useEffect(() => {
68
+ let timer;
69
+ if (isVisible) {
70
+ timer = setTimeout(() => {
71
+ setHasZIndex(true);
72
+ }, 300); // Match the animation duration from parent
73
+ return () => clearTimeout(timer);
74
+ }
75
+ setHasZIndex(false);
76
+ return () => clearTimeout(timer);
77
+ }, [isVisible]);
78
+ const toolbarClasses = classNames('spiffy-tw-bg-white', 'spiffy-tw-w-full', className, {
79
+ 'spiffy-tw-z-10': hasZIndex,
80
+ 'spiffy-tw-translate-y-0': isVisible,
81
+ '-spiffy-tw-translate-y-full': !isVisible,
82
+ });
83
+
84
+ const contentWrapperClasses = classNames('spiffy-tw-flex', containerXPaddingClasses);
85
+
86
+ return (
87
+ <div className={toolbarClasses} ref={toolbarRef}>
88
+ <div className={contentWrapperClasses}>
89
+ <SearchInputForm
90
+ searchInputVariant={searchInputVariant}
91
+ searchText={searchText}
92
+ focusedIndex={focusedIndex}
93
+ autocompleteResults={autocompleteResults}
94
+ searchBoxPlaceholder={searchBoxPlaceholder}
95
+ focusedOptionId={focusedOptionId}
96
+ onKeyDown={onKeyDown}
97
+ onSearchInputChange={onSearchInputChange}
98
+ onSearchInputFocus={onSearchInputFocus}
99
+ onSearchInputBlur={onSearchInputBlur}
100
+ shouldShowAutocomplete={shouldShowAutocomplete}
101
+ onSearchSubmit={onSubmitSearch}
102
+ onAutocompleteSelect={onAutocompleteSelect}
103
+ />
104
+ <SearchResultsFilterButton
105
+ setIsOpen={setIsFilterOpen}
106
+ filterButtonText={filterButtonText}
107
+ />
108
+ </div>
109
+ </div>
110
+ );
111
+ };
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+
3
+ export * from './SearchResultsToolbar';
@@ -3,18 +3,12 @@ import { type Transition, motion } from 'framer-motion';
3
3
  import classNames from 'classnames';
4
4
 
5
5
  import FourPointStar from '@envive-ai/react-icons/FourPointStar';
6
+ import { SparkleAnimationOverride } from './types';
6
7
 
7
8
  // Animation timing constants
8
9
  const ANIMATION_CYCLE_TIME = 1000; // 1 second between cycles
9
10
  const STAR_DELAY_OFFSET = 250; // 250ms delay between each star
10
11
 
11
- enum SparkleAnimationOverride {
12
- CONTAINER = 'spiffy-sparkle-animation-container',
13
- STAR_ONE_CONTAINER = 'spiffy-sparkle-animation-star-one-container',
14
- STAR_TWO_CONTAINER = 'spiffy-sparkle-animation-star-two-container',
15
- STAR_THREE_CONTAINER = 'spiffy-sparkle-animation-star-three-container',
16
- }
17
-
18
12
  interface SparkleAnimationProps {
19
13
  color: string;
20
14
  className?: string;
@@ -1 +1,2 @@
1
1
  export * from './SparkleAnimation';
2
+ export * from './types';
@@ -0,0 +1,6 @@
1
+ export enum SparkleAnimationOverride {
2
+ CONTAINER = 'spiffy-sparkle-animation-container',
3
+ STAR_ONE_CONTAINER = 'spiffy-sparkle-animation-star-one-container',
4
+ STAR_TWO_CONTAINER = 'spiffy-sparkle-animation-star-two-container',
5
+ STAR_THREE_CONTAINER = 'spiffy-sparkle-animation-star-three-container',
6
+ }
@@ -1,7 +1,7 @@
1
1
  import classNames from 'classnames';
2
2
  import OutlinedStar from '@envive-ai/react-icons/OutlinedStar';
3
3
  import FourPointStar from '@envive-ai/react-icons/FourPointStar';
4
- import { TestProps } from '@envive-ai/types';
4
+ import { TestProps } from '@envive-ai/react-hooks/types';
5
5
  import type { SuggestionButtonVariant } from './types';
6
6
  import { ButtonBase } from '../ButtonBase/ButtonBase';
7
7
 
@@ -0,0 +1,23 @@
1
+ // Chat element display location enum
2
+ export enum ChatElementDisplayLocation {
3
+ IN_CHAT = 'in_chat',
4
+ CHAT_PREVIEW = 'chat_preview',
5
+ FLOATING_BUTTON = 'floating_button',
6
+ HELP_ME_CHOOSE = 'help_me_choose',
7
+ PLP_IMAGE_BANNER = 'plp_image_banner',
8
+ TOP_REVIEWS_SNIPPET = 'top_reviews_snippet',
9
+ BOTTOM_REVIEWS_SNIPPET = 'bottom_reviews_snippet',
10
+ BLOCK_BACK_BUTTON = 'block_back_button',
11
+ SWITCH_TO_AGENT = 'switch_to_agent',
12
+ CONVERSATIONAL_SEARCH = 'conversational_search',
13
+ GLOBAL_SEARCH_ENTRYPOINT = 'global_search_entrypoint',
14
+ SEARCH_NAV_ENTRYPOINT = 'search_nav_entrypoint',
15
+ SEARCH_PROMPT = 'search_prompt',
16
+ SEARCH_PROMPT_BUTTON = 'search_prompt_button',
17
+ SEARCH_ZERO_STATE_SUGGESTED_PRODUCTS = 'search_zero_state_suggested_products',
18
+ PRODUCT_GRID = 'product_grid',
19
+ UNSPECIFIED = 'unspecified',
20
+ FILTER_MODAL = 'filter_modal',
21
+ PROMPT_CARD = 'prompt_card',
22
+ WINDOW_API_CALL = 'window_api_call',
23
+ }