@envive-ai/react-hooks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/LICENSE +2 -0
  2. package/README.md +2 -0
  3. package/dist/GridInsertionService-CEYo9pGj.js +22 -0
  4. package/dist/GridInsertionService-CS_bnPh0.cjs +28 -0
  5. package/dist/bandolier-Ble8jEa8.js +1221 -0
  6. package/dist/bandolier-Bm2xAt_j.cjs +1221 -0
  7. package/dist/carpe-Da7b-LCW.cjs +599 -0
  8. package/dist/carpe-W13mhRRP.js +597 -0
  9. package/dist/cdnService-CZ-aXcY6.cjs +23 -0
  10. package/dist/cdnService-zQfKk3Eb.js +18 -0
  11. package/dist/chatElementDisplayLocation-CX8fuNao.d.cts +239 -0
  12. package/dist/chatElementDisplayLocation-CwptS9tx.d.ts +239 -0
  13. package/dist/chunk-CUT6urMc.cjs +30 -0
  14. package/dist/contexts/index.cjs +13 -0
  15. package/dist/contexts/index.d.cts +65 -0
  16. package/dist/contexts/index.d.ts +66 -0
  17. package/dist/contexts/index.js +7 -0
  18. package/dist/contexts-BRjfVq_k.js +5064 -0
  19. package/dist/contexts-BYArqZtK.cjs +5164 -0
  20. package/dist/coterie-3y0D9ko4.cjs +229 -0
  21. package/dist/coterie-DOWcJAYv.js +229 -0
  22. package/dist/custservice-types-CFIFwZ-r.js +10 -0
  23. package/dist/custservice-types-CkfxZiHY.cjs +16 -0
  24. package/dist/default-C2fEZKXk.js +175 -0
  25. package/dist/default-CBUq6Q6G.cjs +4 -0
  26. package/dist/default-CGIFZK6m.js +4 -0
  27. package/dist/default-D_KPZdPJ.cjs +198 -0
  28. package/dist/divIds-Bss-btao.js +49 -0
  29. package/dist/divIds-DnZNd7rA.cjs +223 -0
  30. package/dist/dreamlandBaby-DCIsuU9R.cjs +338 -0
  31. package/dist/dreamlandBaby-DvSaZGrz.js +338 -0
  32. package/dist/entrypoints-D_JUvkgy.cjs +18 -0
  33. package/dist/entrypoints-YLQsbBRD.js +6 -0
  34. package/dist/enviveConfigContext-CUGLpPGU.js +34 -0
  35. package/dist/enviveConfigContext-Dfr2VH6u.cjs +48 -0
  36. package/dist/fiveCbd-B1SESMCO.js +605 -0
  37. package/dist/fiveCbd-CkOlVby_.cjs +605 -0
  38. package/dist/forLoveAndLemons-CfYPMnKS.cjs +660 -0
  39. package/dist/forLoveAndLemons-DmwYZIk0.js +658 -0
  40. package/dist/greenpan-Bsl3ir59.cjs +389 -0
  41. package/dist/greenpan-BtOi45lf.js +389 -0
  42. package/dist/grooveLife-6_dtYsRk.js +334 -0
  43. package/dist/grooveLife-Cmm1PSCL.cjs +334 -0
  44. package/dist/homegrownCannabis-C-kw-74X.js +400 -0
  45. package/dist/homegrownCannabis-CO0uY_mp.cjs +400 -0
  46. package/dist/hooks/index.cjs +16 -0
  47. package/dist/hooks/index.d.cts +357 -0
  48. package/dist/hooks/index.d.ts +357 -0
  49. package/dist/hooks/index.js +7 -0
  50. package/dist/jackArcher-CLVmwwpI.js +719 -0
  51. package/dist/jackArcher-DdYTIzAV.cjs +719 -0
  52. package/dist/jordanCraig-Am-Oor-O.js +1778 -0
  53. package/dist/jordanCraig-_u3-w4Hp.cjs +1778 -0
  54. package/dist/kindredBravely-CWovIDSc.cjs +482 -0
  55. package/dist/kindredBravely-eWp-ud_E.js +482 -0
  56. package/dist/kutFromTheKloth-BMV4BuGQ.js +361 -0
  57. package/dist/kutFromTheKloth-Q589bAOC.cjs +361 -0
  58. package/dist/larryAndSerges-BMUlTgI-.js +252 -0
  59. package/dist/larryAndSerges-CEau764j.cjs +252 -0
  60. package/dist/leapsAndRebounds-DGMzPO7T.js +352 -0
  61. package/dist/leapsAndRebounds-DHAtRTJD.cjs +352 -0
  62. package/dist/logger-Dln20ans.cjs +25 -0
  63. package/dist/logger-pdEEY8T2.js +19 -0
  64. package/dist/longevityrx-CZW8Hxzi.cjs +312 -0
  65. package/dist/longevityrx-jH2JLhNH.js +312 -0
  66. package/dist/lookOptic-BGXP5P_V.js +274 -0
  67. package/dist/lookOptic-CA6RwLbG.cjs +274 -0
  68. package/dist/mantraBrand-Cm9_PBCT.js +742 -0
  69. package/dist/mantraBrand-DByNqpnL.cjs +742 -0
  70. package/dist/medterra-B0wxj_PV.js +575 -0
  71. package/dist/medterra-DnPN2ksU.cjs +575 -0
  72. package/dist/modells-Bmz8Ag5M.js +476 -0
  73. package/dist/modells-CoYgkLSp.cjs +476 -0
  74. package/dist/models-DHdb7QWn.js +51 -0
  75. package/dist/models-ixxUsGL_.cjs +69 -0
  76. package/dist/pressedFloral-DSKs_oVG.js +653 -0
  77. package/dist/pressedFloral-DjBiSoUl.cjs +653 -0
  78. package/dist/skinPerfection-B_3xzVNS.cjs +326 -0
  79. package/dist/skinPerfection-IDrBuAPt.js +326 -0
  80. package/dist/snapSupplements-BJk5T5ba.js +277 -0
  81. package/dist/snapSupplements-BStTsdOZ.cjs +277 -0
  82. package/dist/socialProofClasses-Bhv2Vulz.js +9 -0
  83. package/dist/socialProofClasses-CrQBWdSA.cjs +39 -0
  84. package/dist/spanx-BYg0LE7R.js +653 -0
  85. package/dist/spanx-LwU1zSzq.cjs +655 -0
  86. package/dist/spanxStaging-CfSmuKYB.js +837 -0
  87. package/dist/spanxStaging-OZLV9qix.cjs +840 -0
  88. package/dist/suggestionBarV2-types-BllzwsBD.js +34 -0
  89. package/dist/suggestionBarV2-types-CaovchMP.cjs +46 -0
  90. package/dist/supergoop-BqPXDnKk.cjs +327 -0
  91. package/dist/supergoop-CIlrHND_.js +325 -0
  92. package/dist/types-C4T5UOIW.cjs +230 -0
  93. package/dist/types-CYNvLeSA.js +176 -0
  94. package/dist/uniqueVintage-B30mOqbH.cjs +1205 -0
  95. package/dist/uniqueVintage-CFueJOhO.js +1203 -0
  96. package/dist/venaCbd-DHGZy49P.cjs +357 -0
  97. package/dist/venaCbd-T0CqVD4k.js +357 -0
  98. package/dist/westonJonBoucher-BdMzs_Yg.cjs +414 -0
  99. package/dist/westonJonBoucher-b4TCQ4ev.js +414 -0
  100. package/dist/wineEnthusiast-BLGlOjgr.cjs +932 -0
  101. package/dist/wineEnthusiast-BqR0i_54.js +932 -0
  102. package/dist/wolfMattress-CyyO-LoC.js +362 -0
  103. package/dist/wolfMattress-DNGZOivg.cjs +362 -0
  104. package/dist/wolfTactical-3Mm2fvVF.js +341 -0
  105. package/dist/wolfTactical-BmXYlFjr.cjs +341 -0
  106. package/package.json +66 -0
  107. package/src/adapters/amplitude/amplitudeAdapter.ts +454 -0
  108. package/src/adapters/amplitude/index.ts +2 -0
  109. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +34 -0
  110. package/src/adapters/spiffy/commerce/api.ts +596 -0
  111. package/src/adapters/spiffy/commerce/exceptions/sessionExceptions.ts +6 -0
  112. package/src/adapters/spiffy/commerce/exceptions/unsupportedProductExceptions.ts +6 -0
  113. package/src/adapters/spiffy/commerce/graphql.ts +184 -0
  114. package/src/application/config/generalStaticConfig.ts +37 -0
  115. package/src/application/logging/logger.ts +29 -0
  116. package/src/application/models/api/context.ts +4 -0
  117. package/src/application/models/api/generationParams.ts +4 -0
  118. package/src/application/models/api/nextMessageRequest.ts +11 -0
  119. package/src/application/models/api/orgAnalyticsConfig.ts +19 -0
  120. package/src/application/models/api/orgConfigResults.ts +40 -0
  121. package/src/application/models/api/organizationConfig.ts +12 -0
  122. package/src/application/models/api/response.ts +132 -0
  123. package/src/application/models/api/responseGenerics.ts +67 -0
  124. package/src/application/models/api/search.ts +26 -0
  125. package/src/application/models/api/suggestion.ts +4 -0
  126. package/src/application/models/api/supportedEventRequest.ts +8 -0
  127. package/src/application/models/api/userEvent.ts +101 -0
  128. package/src/application/models/cachedValue.ts +8 -0
  129. package/src/application/models/chatElementDisplayLocation.ts +22 -0
  130. package/src/application/models/clientDetails.ts +18 -0
  131. package/src/application/models/colorsConfig.ts +28 -0
  132. package/src/application/models/conversationalSearchIds.ts +5 -0
  133. package/src/application/models/dataLayer.ts +45 -0
  134. package/src/application/models/domMutationContinuation.ts +7 -0
  135. package/src/application/models/domObservationStrategy.ts +9 -0
  136. package/src/application/models/events.ts +5 -0
  137. package/src/application/models/featureGates.ts +23 -0
  138. package/src/application/models/frontendConfig.ts +14 -0
  139. package/src/application/models/googleAnalyticsEvents.ts +8 -0
  140. package/src/application/models/graphql/index.ts +2 -0
  141. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +37 -0
  142. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +103 -0
  143. package/src/application/models/graphql/queries/getMerchantOrgIdQuery.ts +11 -0
  144. package/src/application/models/guards/api/index.ts +12 -0
  145. package/src/application/models/guards/api/isApiFormResponse.ts +90 -0
  146. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +37 -0
  147. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +155 -0
  148. package/src/application/models/guards/api/isApiOrgConfigResults.ts +277 -0
  149. package/src/application/models/guards/api/isApiOrganizationConfig.ts +207 -0
  150. package/src/application/models/guards/api/isApiPDPEventAttributes.ts +21 -0
  151. package/src/application/models/guards/api/isApiPLPEventAttributes.ts +41 -0
  152. package/src/application/models/guards/api/isApiPageResponseAttributes.ts +21 -0
  153. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +85 -0
  154. package/src/application/models/guards/api/isApiProductSearchAttributes.ts +23 -0
  155. package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +15 -0
  156. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +4 -0
  157. package/src/application/models/guards/api/isApiResponse.ts +39 -0
  158. package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +30 -0
  159. package/src/application/models/guards/api/isApiReviewRichInformation.ts +37 -0
  160. package/src/application/models/guards/api/isApiSearchEventAttributes.ts +28 -0
  161. package/src/application/models/guards/api/isApiSuggestion.ts +36 -0
  162. package/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts +9 -0
  163. package/src/application/models/guards/api/isApiTextResponseAttributes.ts +9 -0
  164. package/src/application/models/guards/api/isApiUserEvent.ts +25 -0
  165. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +50 -0
  166. package/src/application/models/guards/isBaseEcommerceEvent.ts +17 -0
  167. package/src/application/models/guards/isGA4EcommerceEvent.ts +17 -0
  168. package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +17 -0
  169. package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +11 -0
  170. package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +4 -0
  171. package/src/application/models/guards/isVariantInfo.ts +37 -0
  172. package/src/application/models/guards/utils.ts +43 -0
  173. package/src/application/models/index.ts +20 -0
  174. package/src/application/models/localStorageEventListener.ts +4 -0
  175. package/src/application/models/message.ts +146 -0
  176. package/src/application/models/mobilePLPChatPlacementParameter.ts +3 -0
  177. package/src/application/models/orgsEnum.ts +36 -0
  178. package/src/application/models/productExperiment.ts +5 -0
  179. package/src/application/models/spanxTakeAQuizCtaParameter.ts +4 -0
  180. package/src/application/models/spiffyWidgets.ts +16 -0
  181. package/src/application/models/supportedOrgs.ts +137 -0
  182. package/src/application/models/utilityTypes/camelCase.ts +87 -0
  183. package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +80 -0
  184. package/src/application/models/utilityTypes/delimiterCase.ts +121 -0
  185. package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +98 -0
  186. package/src/application/models/utilityTypes/index.ts +1 -0
  187. package/src/application/models/utilityTypes/internal.ts +93 -0
  188. package/src/application/models/utilityTypes/primitive.ts +8 -0
  189. package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +49 -0
  190. package/src/application/models/utilityTypes/splitWords.ts +76 -0
  191. package/src/application/models/utilityTypes/trim.ts +28 -0
  192. package/src/application/models/utilityTypes/unknownArray.ts +25 -0
  193. package/src/application/models/utils/snakeToCamelTransformer.ts +90 -0
  194. package/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.ts +68 -0
  195. package/src/application/models/validators/validateGraphQLColorsConfig.ts +29 -0
  196. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +594 -0
  197. package/src/application/models/validators/validateGraphQLOrgId.ts +7 -0
  198. package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +14 -0
  199. package/src/application/models/validators/validateOrgConfigResults.ts +47 -0
  200. package/src/application/models/validators/validateOrganizationConfig.ts +37 -0
  201. package/src/application/models/validators/validateResponse.ts +187 -0
  202. package/src/application/models/validators/validateSuggestion.ts +16 -0
  203. package/src/application/models/validators/validateUserEvent.ts +110 -0
  204. package/src/application/models/variantInfo/index.ts +1 -0
  205. package/src/application/models/variantInfo/pageVisitInfo.ts +6 -0
  206. package/src/application/models/variantInfo/plpInfo.ts +3 -0
  207. package/src/application/models/variantInfo/productInfo.ts +5 -0
  208. package/src/application/models/variantInfo/variantInfo.ts +23 -0
  209. package/src/application/service/cachingService.ts +84 -0
  210. package/src/application/service/cdnService.ts +18 -0
  211. package/src/application/service/customerService/index.ts +8 -0
  212. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +15 -0
  213. package/src/application/service/customerService/types.ts +31 -0
  214. package/src/application/service/domMutationObserver.ts +320 -0
  215. package/src/application/service/domMutations/GridInsertionService.ts +123 -0
  216. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +99 -0
  217. package/src/application/service/domMutations/domInsertionService.ts +90 -0
  218. package/src/application/service/domMutations/domMutationListener.ts +15 -0
  219. package/src/application/service/domMutations/domMutationListenerState.ts +52 -0
  220. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +41 -0
  221. package/src/application/service/domMutations/gladly/gladlyListener.ts +61 -0
  222. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +41 -0
  223. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +119 -0
  224. package/src/application/service/environmentService.ts +51 -0
  225. package/src/application/service/featureFlagService.ts +130 -0
  226. package/src/application/service/kustomerIntegrationService.ts +111 -0
  227. package/src/application/service/localStorageService.ts +77 -0
  228. package/src/application/service/pageVariantService.ts +779 -0
  229. package/src/application/service/searchService.ts +140 -0
  230. package/src/application/service/sessionStorageService.ts +27 -0
  231. package/src/application/service/shopifyUrlService.ts +63 -0
  232. package/src/application/service/userIdentityService.ts +114 -0
  233. package/src/application/service/windowChatToggleService.ts +71 -0
  234. package/src/application/service/windowDataLayerService.ts +181 -0
  235. package/src/application/service/windowFrontendConfigService.ts +104 -0
  236. package/src/application/utils/__tests__/divideArrays.test.ts +14 -0
  237. package/src/application/utils/analyticsUtils.ts +110 -0
  238. package/src/application/utils/coreContextToApiContext.ts +11 -0
  239. package/src/application/utils/coreUserEventToApiUserEvent.ts +106 -0
  240. package/src/application/utils/divideArray.ts +7 -0
  241. package/src/application/utils/domObserver.ts +96 -0
  242. package/src/application/utils/elementObserver.ts +246 -0
  243. package/src/application/utils/imageFilter.ts +12 -0
  244. package/src/application/utils/index.ts +3 -0
  245. package/src/application/utils/merchantUtils.ts +16 -0
  246. package/src/application/utils/messageFromFormSubmittedEvent.ts +31 -0
  247. package/src/application/utils/messageFromQueryEvent.ts +38 -0
  248. package/src/application/utils/messageFromResponse.ts +133 -0
  249. package/src/application/utils/messageFromSuggestionEvent.ts +32 -0
  250. package/src/application/utils/mouseEventTypes.ts +1 -0
  251. package/src/application/utils/mutationHelper.ts +51 -0
  252. package/src/application/utils/nextMessageRequestToApiRequest.ts +31 -0
  253. package/src/application/utils/nodeSelector.ts +133 -0
  254. package/src/application/utils/overrides.ts +196 -0
  255. package/src/application/utils/stringUtils.ts +55 -0
  256. package/src/application/utils/supportedEventRequestToApiRequest.ts +12 -0
  257. package/src/application/utils/urlsParser.ts +53 -0
  258. package/src/application/utils/validation.ts +5 -0
  259. package/src/atoms/app/index.ts +57 -0
  260. package/src/atoms/app/variant.ts +261 -0
  261. package/src/atoms/atomStore.ts +34 -0
  262. package/src/atoms/chat/chatState.ts +44 -0
  263. package/src/atoms/chat/form.ts +19 -0
  264. package/src/atoms/chat/index.ts +38 -0
  265. package/src/atoms/chat/lastMessage.ts +11 -0
  266. package/src/atoms/chat/messageQueue.ts +65 -0
  267. package/src/atoms/chat/performanceMetrics.ts +84 -0
  268. package/src/atoms/chat/renderedWidgetRefs.ts +28 -0
  269. package/src/atoms/chat/replies.ts +51 -0
  270. package/src/atoms/chat/suggestions.ts +36 -0
  271. package/src/atoms/globalSearch.ts +12 -0
  272. package/src/atoms/index.ts +5 -0
  273. package/src/atoms/org/customerService.ts +13 -0
  274. package/src/atoms/org/graphqlConfig.ts +27 -0
  275. package/src/atoms/org/index.ts +7 -0
  276. package/src/atoms/org/merchantCss.ts +44 -0
  277. package/src/atoms/org/org.ts +256 -0
  278. package/src/atoms/org/orgAnalyticsConfig.ts +28 -0
  279. package/src/atoms/org/orgPageConfig.ts +38 -0
  280. package/src/atoms/org/orgUIConfig.ts +122 -0
  281. package/src/atoms/search/chatSearch.ts +293 -0
  282. package/src/atoms/search/index.ts +2 -0
  283. package/src/atoms/search/productFilters.ts +207 -0
  284. package/src/atoms/search/productSorter.ts +23 -0
  285. package/src/atoms/search/searchAPI.ts +194 -0
  286. package/src/atoms/search/types.ts +55 -0
  287. package/src/atoms/search/utils.ts +18 -0
  288. package/src/config/divIds.ts +27 -0
  289. package/src/config/locators/components/chat/entrypoints.ts +13 -0
  290. package/src/config/locators/components/chat/index.ts +23 -0
  291. package/src/config/locators/components/chat/preview.ts +13 -0
  292. package/src/config/locators/components/chat/variants/index.ts +16 -0
  293. package/src/config/locators/components/common/buttons.ts +6 -0
  294. package/src/config/locators/components/common/cards.ts +18 -0
  295. package/src/config/locators/components/common/links.ts +1 -0
  296. package/src/config/locators/components/common/tables.ts +2 -0
  297. package/src/config/locators/components/floating-button.ts +2 -0
  298. package/src/config/locators/components/index.ts +3 -0
  299. package/src/config/locators/components/report-issue.ts +21 -0
  300. package/src/config/locators/components/search/index.ts +5 -0
  301. package/src/config/locators/components/shadow-dom.ts +1 -0
  302. package/src/config/locators/embedded.ts +21 -0
  303. package/src/config/locators/index.ts +3 -0
  304. package/src/config/socialProofClasses.ts +17 -0
  305. package/src/contexts/chatContext.tsx +451 -0
  306. package/src/contexts/enviveConfigContext.tsx +70 -0
  307. package/src/contexts/index.ts +4 -0
  308. package/src/contexts/systemSettingsContext.tsx +61 -0
  309. package/src/contexts/types.ts +1059 -0
  310. package/src/enabled-features.ts +83 -0
  311. package/src/events/event-types.ts +11 -0
  312. package/src/events/index.ts +52 -0
  313. package/src/events/registerAnalyticsListeners.ts +49 -0
  314. package/src/extension.ts +63 -0
  315. package/src/hooks/index.ts +22 -0
  316. package/src/hooks/useBlockBackButton.ts +29 -0
  317. package/src/hooks/useChatToggle.ts +66 -0
  318. package/src/hooks/useCustomerSupportHandoff.ts +39 -0
  319. package/src/hooks/useDebounce.ts +17 -0
  320. package/src/hooks/useDynamicVariants.ts +210 -0
  321. package/src/hooks/useElementObserver.ts +245 -0
  322. package/src/hooks/useFileUpload.ts +61 -0
  323. package/src/hooks/useGrabAndScroll.ts +133 -0
  324. package/src/hooks/useHideElements.ts +82 -0
  325. package/src/hooks/useHorizontalScrollAnimation.ts +115 -0
  326. package/src/hooks/useImageResolver.ts +51 -0
  327. package/src/hooks/useIntersection.ts +28 -0
  328. package/src/hooks/useIsSmallScreen.ts +23 -0
  329. package/src/hooks/useMessageFilter.ts +49 -0
  330. package/src/hooks/useMessageScrollObserver.ts +47 -0
  331. package/src/hooks/useReducedMotionWithOverride.ts +15 -0
  332. package/src/hooks/useSearch.tsx +433 -0
  333. package/src/hooks/useSnapCalculator.ts +38 -0
  334. package/src/hooks/useSnapControl.ts +155 -0
  335. package/src/hooks/useSystemSettingsContext.ts +12 -0
  336. package/src/hooks/useTrackComponentVisibleEvent.ts +52 -0
  337. package/src/hooks/useUpdateAnalyticsProps.ts +56 -0
  338. package/src/hooks/utils.ts +153 -0
  339. package/src/index.ts +31 -0
  340. package/src/initialize.ts +163 -0
  341. package/src/interceptors/types.ts +6 -0
  342. package/src/interceptors/useFormEscalation.ts +40 -0
  343. package/src/interceptors/useMessageInterceptor.ts +32 -0
  344. package/src/main.ts +85 -0
  345. package/src/main.tsx +123 -0
  346. package/src/merchants/bandolier/bandolier.ts +1389 -0
  347. package/src/merchants/carpe/carpe.ts +656 -0
  348. package/src/merchants/coterie/coterie.ts +280 -0
  349. package/src/merchants/default.ts +193 -0
  350. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +375 -0
  351. package/src/merchants/fiveCbd/fiveCbd.ts +697 -0
  352. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +721 -0
  353. package/src/merchants/greenpan/greenpan.ts +440 -0
  354. package/src/merchants/grooveLife/grooveLife.ts +386 -0
  355. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +468 -0
  356. package/src/merchants/init-merchant.sh +53 -0
  357. package/src/merchants/jackArcher/jackArcher.ts +974 -0
  358. package/src/merchants/jordanCraig/jordanCraig.ts +1927 -0
  359. package/src/merchants/kindredBravely/kindredBravely.ts +529 -0
  360. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +418 -0
  361. package/src/merchants/larryAndSerges/larryAndSerges.ts +314 -0
  362. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +424 -0
  363. package/src/merchants/longevityrx/longevityrx.ts +368 -0
  364. package/src/merchants/lookOptic/lookOptic.ts +323 -0
  365. package/src/merchants/mantraBrand/mantraBrand.ts +838 -0
  366. package/src/merchants/medterra/medterra.ts +670 -0
  367. package/src/merchants/modells/modells.ts +546 -0
  368. package/src/merchants/pressedFloral/pressedFloral.ts +734 -0
  369. package/src/merchants/skinPerfection/skinPerfection.ts +379 -0
  370. package/src/merchants/snapSupplements/snapSupplements.ts +325 -0
  371. package/src/merchants/spanx/spanx.ts +810 -0
  372. package/src/merchants/spanx/spanxStaging.ts +942 -0
  373. package/src/merchants/supergoop/supergoop.ts +376 -0
  374. package/src/merchants/uniqueVintage/uniqueVintage.ts +1314 -0
  375. package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +147 -0
  376. package/src/merchants/venaCbd/venaCbd.ts +410 -0
  377. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +473 -0
  378. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +990 -0
  379. package/src/merchants/wolfMattress/wolfMattress.ts +411 -0
  380. package/src/merchants/wolfTactical/wolfTactical.ts +389 -0
  381. package/src/types/custservice-types.ts +28 -0
  382. package/src/types/search-filter-types.ts +111 -0
  383. package/src/types/suggestionBarV2-types.ts +4 -0
  384. package/src/types/test-types.ts +3 -0
  385. package/src/types.ts +66 -0
@@ -0,0 +1,194 @@
1
+ import { atom } from 'jotai';
2
+ import { SearchResult, SearchParams } from 'src/application/models/api/search';
3
+ import SearchService from 'src/application/service/searchService';
4
+ import { ProductSorting } from './types';
5
+ import { ProductFilters } from './productFilters';
6
+ import { ProductSorter } from './productSorter';
7
+ import { orgUIConfigAtom } from '../org';
8
+
9
+ export type SelectedFilterOption = {
10
+ id: string; // "filterId:filterItemId" - maintains backward compatibility for comparisons
11
+ displayName: string;
12
+ filterId: string; // Filter category
13
+ filterItemId: string; // Filter value
14
+ };
15
+
16
+ interface SearchState {
17
+ data: SearchResult | null;
18
+ loading: boolean;
19
+ error: string | null;
20
+ lastQuery: string | null;
21
+ }
22
+
23
+ export const searchAtom = atom<SearchState>({
24
+ data: null,
25
+ loading: false,
26
+ error: null,
27
+ lastQuery: null,
28
+ });
29
+
30
+ export const searchProductSortingAtom = atom<ProductSorting>(ProductSorting.FEATURED);
31
+ export const searchSelectedFiltersAtom = atom<SelectedFilterOption[]>([]);
32
+
33
+ export const createFilterOption = (
34
+ filterId: string,
35
+ filterItemId: string,
36
+ displayName: string,
37
+ ): SelectedFilterOption => ({
38
+ id: `${filterId}:${filterItemId}`,
39
+ displayName,
40
+ filterId,
41
+ filterItemId,
42
+ });
43
+
44
+ const internalSearchParamsAtom = atom<{
45
+ id: string | null;
46
+ query: string | null;
47
+ }>({
48
+ id: null,
49
+ query: null,
50
+ });
51
+
52
+ export const searchParamsAtom = atom(
53
+ (get) => get(internalSearchParamsAtom),
54
+ (_, set, value: { id: string | null; query: string | null }) => {
55
+ set(internalSearchParamsAtom, value);
56
+ },
57
+ );
58
+ export const internalSearchSystemStateAtom = atom<boolean>(false);
59
+
60
+ export const searchSystemAtom = atom(
61
+ (get) => get(internalSearchSystemStateAtom),
62
+ (get, set, value: boolean) => {
63
+ if (value === get(internalSearchSystemStateAtom)) {
64
+ return;
65
+ }
66
+ const stateChangeHandler = () => {
67
+ const params = new URLSearchParams(window.location.search);
68
+ if (params.get('es') === 'true') {
69
+ const id = params.get('esi');
70
+ const query = params.get('esq');
71
+ set(searchParamsAtom, { id, query });
72
+ } else {
73
+ set(searchParamsAtom, { id: null, query: null });
74
+ }
75
+ };
76
+ if (value) {
77
+ set(internalSearchSystemStateAtom, true);
78
+ window.addEventListener('popstate', stateChangeHandler);
79
+ // Also trigger the hash change handler to set the initial state
80
+ stateChangeHandler();
81
+ } else {
82
+ set(internalSearchSystemStateAtom, false);
83
+ window.removeEventListener('popstate', stateChangeHandler);
84
+ }
85
+ },
86
+ );
87
+
88
+ export const filteredSearchProductsAtom = atom((get) => {
89
+ const searchData = get(searchAtom).data;
90
+ const sorting = get(searchProductSortingAtom);
91
+ const selectedFilters = get(searchSelectedFiltersAtom);
92
+ const orgConfig = get(orgUIConfigAtom);
93
+
94
+ if (!searchData?.products) return [];
95
+
96
+ const filteredProducts = ProductFilters.filterProducts(
97
+ searchData.products,
98
+ orgConfig.searchConfig.searchFilterConfig,
99
+ selectedFilters,
100
+ orgConfig.searchConfig.additiveDynamicFilters,
101
+ );
102
+
103
+ return ProductSorter.sort(filteredProducts, sorting);
104
+ });
105
+
106
+ export const searchFiltersAtom = atom((get) => {
107
+ const searchData = get(searchAtom).data;
108
+ const selectedFilters = get(searchSelectedFiltersAtom);
109
+ const orgConfig = get(orgUIConfigAtom);
110
+
111
+ if (!searchData?.products) return [];
112
+
113
+ return ProductFilters.getFiltersForProducts(
114
+ searchData.products,
115
+ orgConfig.searchConfig.searchFilterConfig,
116
+ selectedFilters,
117
+ );
118
+ });
119
+
120
+ export const addSearchFilterAtom = atom(null, (get, set, filter: SelectedFilterOption) => {
121
+ const current = get(searchSelectedFiltersAtom);
122
+ if (!current.some((f) => f.id === filter.id)) {
123
+ set(searchSelectedFiltersAtom, [...current, filter]);
124
+ }
125
+ });
126
+
127
+ export const removeSearchFilterAtom = atom(null, (get, set, filterId: string) => {
128
+ const current = get(searchSelectedFiltersAtom);
129
+ set(
130
+ searchSelectedFiltersAtom,
131
+ current.filter((f) => f.id !== filterId),
132
+ );
133
+ });
134
+
135
+ export const clearSearchFiltersAtom = atom(null, (_, set) => {
136
+ set(searchSelectedFiltersAtom, []);
137
+ });
138
+
139
+ export const performSearchAtom = atom(
140
+ null,
141
+ async (get, set, params: SearchParams, allowRedirect = false) => {
142
+ const currentState = get(searchAtom);
143
+ const orgUIConfig = get(orgUIConfigAtom);
144
+ const redirectSearchResultsUrl = orgUIConfig.searchConfig?.redirectSearchResultsUrl;
145
+
146
+ if (allowRedirect && redirectSearchResultsUrl) {
147
+ const redirectUrl = new URL(redirectSearchResultsUrl);
148
+ redirectUrl.searchParams.set('es', 'true');
149
+ redirectUrl.searchParams.set('esq', params.query);
150
+ window.location.href = redirectUrl.toString();
151
+ } else {
152
+ // Update URL and manually trigger state change (since pushState doesn't trigger popstate)
153
+ const url = new URL(window.location.href);
154
+ url.searchParams.set('es', 'true');
155
+ url.searchParams.set('esq', params.query);
156
+ window.history.pushState({}, '', url);
157
+
158
+ // Manually trigger page variant re-evaluation by dispatching a popstate event
159
+ // This ensures the page variant system detects the URL change and mounts search results
160
+ window.dispatchEvent(new PopStateEvent('popstate', { state: {} }));
161
+ }
162
+
163
+ // Manually trigger page variant re-evaluation by dispatching a popstate event
164
+ // This ensures the page variant system detects the URL change and mounts search results
165
+ window.dispatchEvent(new PopStateEvent('popstate', { state: {} }));
166
+ if (currentState.loading) {
167
+ return; // Prevent concurrent searches
168
+ }
169
+
170
+ set(searchAtom, {
171
+ data: null,
172
+ loading: true,
173
+ error: null,
174
+ lastQuery: params.query,
175
+ });
176
+ try {
177
+ const result = await SearchService.searchProducts(params);
178
+ set(searchAtom, {
179
+ data: result,
180
+ loading: false,
181
+ error: null,
182
+ lastQuery: params.query,
183
+ });
184
+ } catch (error: unknown) {
185
+ const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
186
+ set(searchAtom, {
187
+ data: null,
188
+ loading: false,
189
+ error: errorMessage,
190
+ lastQuery: params.query,
191
+ });
192
+ }
193
+ },
194
+ );
@@ -0,0 +1,55 @@
1
+ export enum ProductSorting {
2
+ FEATURED = 'featured',
3
+ PRICE_ASC = 'price_asc',
4
+ PRICE_DESC = 'price_desc',
5
+ }
6
+
7
+ export const ProductSortingNames = {
8
+ [ProductSorting.FEATURED]: 'Featured',
9
+ [ProductSorting.PRICE_ASC]: 'Price Low to High',
10
+ [ProductSorting.PRICE_DESC]: 'Price High to Low',
11
+ };
12
+
13
+ export type ChatSearchStateType = 'entrypoint' | 'initializing-search' | 'product-page';
14
+
15
+ export type ChatSearchFilter = {
16
+ filterId: string;
17
+ displayName: string;
18
+ items: ChatSearchFilterItem[];
19
+ };
20
+
21
+ export type ChatSearchFilterItem = {
22
+ filterItemId: string;
23
+ displayName: string;
24
+ productCount: number;
25
+ isSelected: boolean;
26
+ };
27
+
28
+ export interface ChatSearchSortProps {
29
+ options: ProductSorting[];
30
+ }
31
+
32
+ export interface ChatSearchSortModalProps extends ChatSearchSortProps {
33
+ open: boolean;
34
+ handlePopupState: (state: boolean) => void;
35
+ }
36
+
37
+ export interface SortOption {
38
+ value: ProductSorting;
39
+ isSelected: boolean;
40
+ onSelect: (option: ProductSorting) => void;
41
+ }
42
+
43
+ export enum ChatSearchSortOverrides {
44
+ DESKTOP_FILTER_CONTAINER = 'spiffy-chat-search-filter-container',
45
+ DESKTOP_FILTER_SELECT_COMPONENT = 'spiffy-chat-search-filter-select-component',
46
+ DESKTOP_FILTER_SELECT_ICON = 'spiffy-chat-search-filter-select-icon',
47
+ MOBILE_FILTER_BUTTON = 'spiffy-chat-search-filter-button',
48
+ MOBILE_FILTER_MODAL_CONTAINER = 'spiffy-chat-search-filter-modal-container',
49
+ MOBILE_FILTER_MODAL_HEADER = 'spiffy-chat-search-filter-modal-header',
50
+ MOBILE_FILTER_MODAL_SELECTION = 'spiffy-chat-search-filter-modal-selection',
51
+ MOBILE_FILTER_MODAL_OPTION = 'spiffy-chat-search-filter-modal-option',
52
+ MOBILE_FILTER_MODAL_OPTION_PILL = 'spiffy-chat-search-filter-modal-option-pill',
53
+ MOBILE_FILTER_MODAL_OPTION_DESCRIPTION = 'spiffy-chat-search-filter-modal-option-desc',
54
+ MOBILE_FILTER_MODAL_APPLY_BUTTON = 'spiffy-chat-search-filter-modal-apply-button',
55
+ }
@@ -0,0 +1,18 @@
1
+ export const formatFilterDisplayName = (displayName: string) => {
2
+ const sizes = ['xxxs', 'xxs', 'xs', 's', 'm', 'l', 'xl', 'xxl', 'xxxl', 'xxxxl'];
3
+
4
+ const processedWords = displayName
5
+ .toLowerCase()
6
+ .split(' ')
7
+ .map((word) => {
8
+ if (sizes.includes(word)) {
9
+ return word.toUpperCase();
10
+ }
11
+ return word.charAt(0).toUpperCase() + word.slice(1);
12
+ });
13
+
14
+ const titleCasedName = processedWords.join(' ');
15
+
16
+ // Final replacements for special cases
17
+ return titleCasedName.replace(/Iphone/g, 'iPhone');
18
+ };
@@ -0,0 +1,27 @@
1
+ // TODO turn this into an enum
2
+ export const SPIFFY_ROOT_ID = 'spiffy-ai-root';
3
+ export const CONTAINER_ID = 'spiffy-ai-container';
4
+
5
+ export const FLOATING_BUTTON_ID = 'spiffy-ai-floating-button';
6
+ export const CHAT_PREVIEW_CONTAINER_ID = 'spiffy-ai-chat-preview';
7
+ export const GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint';
8
+ export const SEARCH_RESULTS_ENTRYPOINT_ID = 'spiffy-ai-search-results-entrypoint';
9
+ export const SEARCH_RESULTS_NO_OP_ID = 'spiffy-ai-search-results-no-op-entrypoint';
10
+ export const SEARCH_OVERLAY_ENTRYPOINT_ID = 'spiffy-ai-search-overlay-entrypoint';
11
+ export const SEARCH_OVERLAY_PORTAL_ID = 'spiffy-ai-search-overlay-portal'; // The inner div the overlay portal will render into
12
+ export const HOMEPAGE_DESKTOP_GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint-desktop-homepage';
13
+ export const HOMEPAGE_TABLET_GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint-tablet-homepage';
14
+ export const HOMEPAGE_MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint-mobile-homepage';
15
+ export const MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint-mobile';
16
+ export const MOBILE_ICON_ONLY_GLOBAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-global-search-entrypoint-mobile-icon-only';
17
+ export const TABLET_GLOBAL_SEARCH_ENTYPOINT_ID = 'spiffy-ai-global-search-entrypoint-tablet';
18
+ export const BOTTOM_REVIEWS_BAR_ID = 'spiffy-bottom-reviews-bar-id';
19
+ export const TOP_SUGGESTION_BAR_PDP_ID = 'spiffy-top-suggestion-bar-id';
20
+
21
+ export const TOP_PLP_IMAGE_BANNER_ID = 'spiffy-top-plp-image-banner-id';
22
+ export const BOTTOM_PLP_IMAGE_BANNER_ID = 'spiffy-bottom-plp-image-banner-id';
23
+ export const PROMPT_CARD_ID = 'spiffy-ai-prompt-card';
24
+
25
+ export const CONVERSATIONAL_SEARCH_ENTRYPOINT_ID = 'spiffy-ai-conversational-search-entrypoint';
26
+ export const CONVERSATIONAL_SEARCH_INPUT_ID = 'spiffy-ai-conversational-search-input';
27
+ export const CONVERSATIONAL_SEARCH_MODAL_ID = 'spiffy-ai-conversational-search-modal';
@@ -0,0 +1,13 @@
1
+ export const SOCIAL_PROOF_CUSTOMER_COUNT_MESSAGE_TESTID =
2
+ 'spiffy-social-proof-customer-count-message';
3
+ export const SOCIAL_PROOF_CUSTOMER_COUNT_BUTTON_TESTID =
4
+ 'spiffy-social-proof-customer-count-button';
5
+ export const SOCIAL_PROOF_PDP_CONTENTS_TESTID = 'spiffy-social-proof-pdp-contents';
6
+ export const SOCIAL_PROOF_PLP_CONTENTS_TESTID = 'spiffy-social-proof-plp-contents';
7
+ export const SOCIAL_PROOF_SUGGESTION_FOOTER_TESTID = 'spiffy-social-proof-suggestion-footer';
8
+ export const SOCIAL_PROOF_WIDGET_TESTID = 'spiffy-social-proof-widget';
9
+ export const SOCIAL_PROOF_WIDGET_HEADER_TESTID = 'spiffy-social-proof-widget-header';
10
+
11
+ // used in spanx config
12
+ export const TOP_IMAGE_BANNER_PLP_TESTID = 'spiffy-top-image-banner-plp';
13
+ export const BOTTOM_IMAGE_BANNER_PLP_TESTID = 'spiffy-bottom-image-banner-plp';
@@ -0,0 +1,23 @@
1
+ // Test ids for components rendered inside the chat modal, and the chat modal
2
+ export const CHAT_CONTAINER_ID = '#spiffy-modal-container';
3
+ export const CHAT_HEADER_CONTAINER_TESTID = 'spiffy-chat-header-container';
4
+ export const CHAT_HEADER_CLOSE_BUTTON_TESTID = 'spiffy-chat-header-close-button';
5
+ export const CHAT_MESSAGE_CONTAINER_TESTID = 'spiffy-chat-message-container';
6
+ export const CHAT_MESSAGE_DIVIDER_TESTID = 'spiffy-chat-message-divider';
7
+ export const CHAT_MODAL_TESTID = 'spiffy-modal-shadow-dom-container';
8
+ export const CHAT_REPLY_INPUT_TESTID = 'spiffy-chat-reply-input';
9
+ export const CHAT_REPLY_INPUT_SEND_BUTTON_TESTID = 'spiffy-chat-reply-input-send-button';
10
+ export const CHAT_VIEW_PREVIOUS_MESSAGES_TESTID = 'spiffy-chat-view-previous-messages';
11
+ export const DYNAMIC_CAROUSEL_TESTID = 'dynamic-carousel';
12
+ export const IMAGE_STACK_TESTID = 'spiffy-product-comparison-image-stack';
13
+ export const IMAGE_STACK_FIRST_IMAGE_TESTID = 'spiffy-product-comparison-image-stack-first-image';
14
+ export const IMAGE_STACK_SECOND_IMAGE_TESTID = 'spiffy-product-comparison-image-stack-second-image';
15
+ export const LOADING_MESSAGE_CONTAINER_TESTID = 'spiffy-messages-loading-container';
16
+ export const MOBILE_CHAT_HEADER_TESTID = 'spiffy-mobile-chat-header';
17
+ export const SCROLLABLE_SUGGESTIONS_TESTID = 'spiffy-scrollable-suggestions';
18
+ export const SUGGESTION_BAR_TESTID = 'spiffy-suggestion-bar';
19
+ export const SUGGESTION_BAR_BUTTON_TESTID = 'spiffy-suggestion-bar-button';
20
+ export const SUGGESTION_BUTTON_TESTID = 'spiffy-suggestion-button';
21
+
22
+ export const TAG_TESTID = 'spiffy-tag';
23
+ export const ANIMATED_MESSAGES_TESTID = 'spiffy-animated-messages';
@@ -0,0 +1,13 @@
1
+ export const SUGGESTION_BUTTON_TESTID = 'spiffy-suggestion-button';
2
+ export const CHAT_PREVIEW_FOOTER_TESTID = 'spiffy-chat-preview-footer';
3
+ export const CHAT_PREVIEW_TESTID = 'spiffy-chat-preview';
4
+ export const CHAT_PREVIEW_SHADOW_DOM_TESTID = 'chat-preview-shadow-dom-container';
5
+ export const CHAT_PREVIEW_BODY_TESTID = 'spiffy-chat-preview-body';
6
+ export const CHAT_PREVIEW_HEADING_TESTID = 'spiffy-chat-preview-heading';
7
+ export const CHAT_PREVIEW_LOADING_TESTID = 'spiffy-chat-preview-loading';
8
+ export const CHAT_PREVIEW_USER_QUERY_BUTTON_TESTID = 'spiffy-chat-preview-user-query-button';
9
+ export const CHAT_PREVIEW_HEADER_TESTID = 'spiffy-chat-preview-header';
10
+
11
+ // used in spanx config
12
+ export const CHAT_PREVIEW_PLP_TESTID = 'spiffy-chat-preview-plp';
13
+ export const CHAT_PREVIEW_PDP_TESTID = 'spiffy-chat-preview-pdp';
@@ -0,0 +1,16 @@
1
+ export const WELCOME_SECTION_TESTID = "welcome-section";
2
+ export const WELCOME_SECTION_WELCOME_ICON_TESTID = "welcome-section-icon";
3
+ export const WELCOME_SECTION_TITLE_TESTID = "welcome-section-title";
4
+ export const WELCOME_SECTION_SUBTITLE_TESTID = "welcome-section-subtitle";
5
+
6
+ export const ASSISTANT_AVATAR_TESTID = "assistant-avatar";
7
+ export const ASSISTANT_AVATAR_NAME_TESTID = "assistant-avatar-name";
8
+ export const ASSISTANT_AVATAR_SPARKLE_TESTID = "assistant-avatar-sparkle";
9
+
10
+ export const REVIEW_CARD_STAR_RATING_TESTID = "review-card-star-rating";
11
+ export const REVIEW_CARD_STAR_COUNT_TESTID = "review-card-star-count";
12
+
13
+ export const VERIFIED_BUYER_TESTID = "verified-buyer";
14
+ export const VERIFIED_BUYER_INCENTIVIZED_REVIEW_TESTID =
15
+ "verified-buyer-incentivized-review";
16
+ export const VERIFIED_BUYER_TITLE_TESTID = "verified-buyer-title";
@@ -0,0 +1,6 @@
1
+ export const BUTTON_BASE_TESTID = 'spiffy-button-base';
2
+ export const SUGGESTION_BUTTON_TESTID = 'spiffy-suggestion-button';
3
+ export const SWITCH_TO_AGENT_CONTAINER_TESTID = 'spiffy-switch-to-agent-button-container';
4
+ export const SWITCH_TO_LIVE_AGENT_BUTTON_TESTID = 'spiffy-switch-to-live-agent-button';
5
+ export const SWITCH_TO_AI_ASSISTANT_BUTTON_TESTID = 'spiffy-switch-to-ai-assistant-button';
6
+ export const USER_QUERY_BUTTON_TESTID = 'spiffy-user-query-button';
@@ -0,0 +1,18 @@
1
+ export const ANIMATED_PRODUCT_CARD_TESTID = 'spiffy-animated-product-card';
2
+ export const MESSAGE_CARD_TESTID = 'spiffy-message-card';
3
+ export const MESSAGE_CONTENT_TESTID = 'spiffy-message-content';
4
+ export const MESSAGE_MARKDOWN_CONTENT_TESTID = 'spiffy-message-markdown-content';
5
+ export const MESSAGE_VARIANT_MARKDOWN = 'md';
6
+ export const MESSAGE_VARIANT_TEXT = 'txt';
7
+
8
+ export const EXPAND_COLLAPSE_CARD_TESTID = 'spiffy-product-review-card-read-more-container';
9
+ export const PAGE_CARDS_SCROLL_CONTAINER_TESTID = 'spiffy-page-cards-scroll-container';
10
+ export const PAGE_CARD_DESCRIPTION_TESTID = 'spiffy-page-card-description';
11
+ export const PAGE_CARD_LINK_TESTID = 'spiffy-page-card-link';
12
+ export const PAGE_CARD_TESTID = 'spiffy-page-card';
13
+ export const PAGE_CARD_TITLE_TESTID = 'spiffy-page-card-title';
14
+ export const PAGE_CARD_VIEW_SOURCE_BUTTON_TESTID = 'spiffy-page-card-view-source-button';
15
+ export const PRODUCT_REVIEW_CARD_TESTID = 'spiffy-product-review-card';
16
+ export const PRODUCT_REVIEW_CARD_BUTTON_TESTID = 'spiffy-product-review-card-button';
17
+ export const PRODUCT_CARD_TESTID = 'spiffy-product-card';
18
+ export const PRODUCT_CARDS_SCROLL_CONTAINER_TESTID = 'spiffy-product-cards-scroll-container';
@@ -0,0 +1 @@
1
+ export const PRODUCT_LINK_TESTID = 'spiffy-product-link';
@@ -0,0 +1,2 @@
1
+ export const PRODUCTS_COMPARISON_TABLE_CONTAINER_TESTID =
2
+ 'spiffy-products-comparison-table-container';
@@ -0,0 +1,2 @@
1
+ export const FLOATING_BUTTON_ICON_TESTID = "floating-button-icon";
2
+ export const FLOATING_BUTTON_TEXT_TESTID = "floating-button-text";
@@ -0,0 +1,3 @@
1
+ // Test ids for components rendered outside of the chat modal
2
+ export * from './floating-button';
3
+ export * from './shadow-dom';
@@ -0,0 +1,21 @@
1
+ export const CHAT_FEEDBACK_BUTTON_TESTID = 'chat-feedback-button';
2
+ export const REPORT_ISSUE_CONTAINER_TESTID = 'report-issue-container';
3
+
4
+ export const REPORT_ISSUE_NAME_FORM_CONTROL_TESTID = 'report-issue-name-form-control';
5
+ export const REPORT_ISSUE_NAME_INPUT_TESTID = 'report-issue-name-input';
6
+
7
+ export const REPORT_ISSUE_DESCRIPTION_FORM_CONTROL_TESTID = 'report-issue-description-form-control';
8
+ export const REPORT_ISSUE_DESCRIPTION_INPUT_TESTID = 'report-issue-description-input';
9
+
10
+ export const REPORT_ISSUE_CORRECTED_MESSAGE_FORM_CONTROL_TESTID =
11
+ 'report-issue-corrected-message-form-control';
12
+ export const REPORT_ISSUE_CORRECTED_MESSAGE_INPUT_TESTID = 'report-issue-corrected-message-input';
13
+
14
+ export const REPORT_ISSUE_SUGGESTED_RESPONSES_FORM_CONTROL_TESTID =
15
+ 'report-issue-suggested-responses-form-control';
16
+ export const REPORT_ISSUE_SUGGESTED_RESPONSES_INPUT_TESTID =
17
+ 'report-issue-suggested-responses-input';
18
+
19
+ export const REPORT_ISSUE_SEND_FEEDBACK_BUTTON_TESTID = 'report-issue-send-feedback-button';
20
+ export const REPORT_ISSUE_TURNS_FORM_CONTROL_TESTID = 'report-issue-turns-form-control';
21
+ export const REPORT_ISSUE_CANCEL_BUTTON_TESTID = 'report-issue-cancel-button';
@@ -0,0 +1,5 @@
1
+ // keeping spiffy- prefix to remain consistent with the existing test ids
2
+ export const SEARCH_SHADOW_DOM_CONTAINER_TESTID = 'spiffy-search-shadow-dom-container';
3
+ export const SEARCH_ENTRYPOINT_BUTTON_TESTID = 'spiffy-search-entrypoint-button';
4
+ export const SEARCH_ENTRYPOINT_INPUT_TESTID = 'spiffy-search-entrypoint-input';
5
+ export const SEARCH_INPUT_TESTID = 'spiffy-search-input';
@@ -0,0 +1 @@
1
+ export const SHADOW_DOM_CONTAINER_TESTID = "shadow-dom-container";
@@ -0,0 +1,21 @@
1
+ // Locators that embed on the pages
2
+ export const BOTTOM_PLP_BANNER_TESTID = 'bottom-plp-image-banner';
3
+ export const BOTTOM_SUGGESTION_BAR_TESTID = 'bottom-suggestion-bar-shadow-dom-container';
4
+ export const CHAT_PREVIEW_TESTID = 'chat-preview-shadow-dom-container';
5
+ export const GLOBAL_SEARCH_ENTRYPOINT_TESTID = 'global-search-entrypoint-shadow-dom-container';
6
+ export const SEARCH_OVERLAY_HOST_TESTID = 'search-overlay-host-shadow-dom-container';
7
+ export const SEARCH_RESULTS_ENTRYPOINT_TESTID = 'search-results-entrypoint-shadow-dom-container';
8
+ export const SEARCH_RESULTS_NO_OP_ENTRYPOINT_TESTID = 'search-results-no-op-shadow-dom-container';
9
+ export const MOBILE_SEARCH_ICON_NO_OP_ENTRYPOINT_TESTID = 'mobile-search-icon-no-op-shadow-dom-container';
10
+ export const PROMPT_CARD_TESTID = 'image-prompt-card-shadow-dom-container';
11
+ export const FLOATING_BUTTON_TESTID = 'floating-button-shadow-dom-container';
12
+ export const FLOATING_CHAT_TESTID = 'floating-chat-shadow-dom-container';
13
+ export const TAILWIND_FLOATING_CHAT_BUTTON_TESTID = 'floating-chat-button';
14
+ export const TOP_PLP_BANNER_TESTID = 'top-plp-image-banner';
15
+ export const TOP_SUGGESTION_BAR_TESTID = 'top-suggestion-bar-shadow-dom-container';
16
+
17
+ // used in spanx config
18
+ export const CHAT_PREVIEW_PDP_TESTID = 'spiffy-chat-preview-pdp';
19
+ export const CHAT_PREVIEW_PLP_TESTID = 'spiffy-chat-preview-plp';
20
+ export const TOP_SUGGESTION_BAR_PDP_TESTID = 'spiffy-top-suggestion-bar-pdp';
21
+ export const BOTTOM_SUGGESTION_BAR_PDP_TESTID = 'spiffy-bottom-suggestion-bar-pdp';
@@ -0,0 +1,3 @@
1
+ export * from './components/chat';
2
+ export * from './components';
3
+ export * from './embedded';
@@ -0,0 +1,17 @@
1
+ export const SPIFFY_SOCIAL_PROOF_SUGGESTION_BUTTON_CLASS =
2
+ "spiffy-social-proof-suggestion-button";
3
+ export const SPIFFY_SOCIAL_PROOF_SUGGESTION_BUTTON_TEXT_CLASS =
4
+ "spiffy-social-proof-suggestion-button-text";
5
+ export const SPIFFY_SOCIAL_PROOF_SUGGESTION_BUTTON_CONTAINER_CLASS =
6
+ "spiffy-social-proof-suggestion-button-container";
7
+ export const SPIFFY_SOCIAL_PROOF_CUSTOMER_COUNT_CLASS =
8
+ "spiffy-social-proof-customer-count";
9
+ export const SPIFFY_SOCIAL_PROOF_CONTENT_CONTAINER_CLASS =
10
+ "spiffy-social-proof-content-container";
11
+ export const SPIFFY_SOCIAL_PROOF_CONTENT_BUTTON_CLASS =
12
+ "spiffy-social-proof-content-button";
13
+ export const SPIFFY_SOCIAL_PROOF_CONTENT_IMAGE_CLASS =
14
+ "spiffy-social-proof-content-image";
15
+ export const SPIFFY_SOCIAL_PROOF_SUGGESTION_FOOTER_TITLE_CLASS =
16
+ "spiffy-social-proof-suggestion-footer-title";
17
+ export const SPIFFY_SOCIAL_PROOF_HEADER = "spiffy-social-proof-header";