@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,1389 @@
1
+ import {
2
+ BOTTOM_SUGGESTION_BAR_TESTID,
3
+ CHAT_PREVIEW_TESTID,
4
+ GLOBAL_SEARCH_ENTRYPOINT_TESTID,
5
+ PROMPT_CARD_TESTID,
6
+ SEARCH_OVERLAY_HOST_TESTID,
7
+ SEARCH_RESULTS_ENTRYPOINT_TESTID,
8
+ TOP_SUGGESTION_BAR_TESTID,
9
+ } from "src/config/locators";
10
+ import {
11
+ BasicOrgInfoType,
12
+ FeatureGates,
13
+ OrgShortName,
14
+ } from "src/application/models";
15
+ import { ChatElementDisplayLocation } from "src/application/models/chatElementDisplayLocation";
16
+ import { CdnService } from "src/application/service/cdnService";
17
+ import {
18
+ CustomerServiceIntegrationMode,
19
+ CustomerServiceType,
20
+ } from "src/application/service/customerService/types";
21
+ import { DOMInsertionType } from "src/application/service/domMutations/domInsertionService";
22
+ import { GridInsertionType } from "src/application/service/domMutations/GridInsertionService";
23
+ import {
24
+ BOTTOM_REVIEWS_BAR_ID,
25
+ CHAT_PREVIEW_CONTAINER_ID,
26
+ GLOBAL_SEARCH_ENTRYPOINT_ID,
27
+ HOMEPAGE_DESKTOP_GLOBAL_SEARCH_ENTRYPOINT_ID,
28
+ HOMEPAGE_MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID,
29
+ HOMEPAGE_TABLET_GLOBAL_SEARCH_ENTRYPOINT_ID,
30
+ MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID,
31
+ MOBILE_ICON_ONLY_GLOBAL_SEARCH_ENTRYPOINT_ID,
32
+ PROMPT_CARD_ID,
33
+ SEARCH_OVERLAY_ENTRYPOINT_ID,
34
+ SEARCH_RESULTS_ENTRYPOINT_ID,
35
+ TABLET_GLOBAL_SEARCH_ENTYPOINT_ID,
36
+ TOP_SUGGESTION_BAR_PDP_ID,
37
+ } from "src/config/divIds";
38
+ import { defaultOrgUIConfig } from "src/merchants/default";
39
+ import {
40
+ ChatPreviewWidgetConfig,
41
+ ColorMapping,
42
+ ColorNames,
43
+ colorVar,
44
+ SearchEntryPointWidgetConfig,
45
+ ImagePromptWidgetConfig,
46
+ OrgPageConfig,
47
+ OrgUIConfig,
48
+ PageVariantTestType,
49
+ SearchResultsEntryPointWidgetConfig,
50
+ SuggestionBarWidgetV2Config,
51
+ WidgetType,
52
+ SearchOverlayHostWidgetConfig,
53
+ } from "src/contexts/types";
54
+ import { SuggestionBarLocationForMetrics } from "src/types/suggestionBarV2-types";
55
+
56
+ const bandolierColors: ColorMapping = {
57
+ [ColorNames.TextPrimary]: "#000000",
58
+ [ColorNames.TextSecondary]: "#6C6C6C",
59
+ [ColorNames.TextAccent]: "#AF986E",
60
+ [ColorNames.TextLink]: "#000000",
61
+ [ColorNames.TextLight]: "#FFFFFF",
62
+ [ColorNames.BackgroundPrimary]: "#000000",
63
+ [ColorNames.BackgroundSecondary]: "#ECECEC",
64
+ [ColorNames.BackgroundSecondaryDark]: "#E2E2E2",
65
+ [ColorNames.BackgroundTertiary]: "#ECECEC",
66
+ [ColorNames.BackgroundDark]: "#000000",
67
+ [ColorNames.BackgroundLight]: "#FFFFFF",
68
+ [ColorNames.BackgroundSaturated]: "#CCCCCC",
69
+ [ColorNames.BorderLight]: "#ECECEC",
70
+ [ColorNames.BorderMedium]: "#EAEAEA",
71
+ [ColorNames.BorderDark]: "#6C6C6C",
72
+ [ColorNames.BorderOutline]: "#000000",
73
+ [ColorNames.AccentPrimary]: "#AF986E",
74
+ [ColorNames.AccentSecondary]: "#DCB4AE",
75
+ };
76
+
77
+ const bandolierOrgUIConfig = (): OrgUIConfig => {
78
+ const defaultBandolierOrgConfig = defaultOrgUIConfig(OrgShortName.Bandolier);
79
+
80
+ return {
81
+ ...defaultBandolierOrgConfig,
82
+ merchantVariantSettings: {
83
+ dynamicVariants: {
84
+ enabled: false,
85
+ refreshInterval: 400,
86
+ },
87
+ },
88
+ chatMessageConfig: {
89
+ ...defaultBandolierOrgConfig.chatMessageConfig,
90
+ assistantChatTitle: "Ask Maggie",
91
+ variant: "accent",
92
+ },
93
+ chatHeader: {
94
+ ...defaultBandolierOrgConfig.chatHeader,
95
+ imageSrc: CdnService.getAssetURL(
96
+ "bandolier-logo.svg",
97
+ OrgShortName.Bandolier
98
+ ),
99
+ },
100
+ chatPreviewConfig: {
101
+ ...defaultBandolierOrgConfig.chatPreviewConfig!,
102
+ buttonTextColor: colorVar(ColorNames.TextLink),
103
+ buttonBackgroundColor: colorVar(ColorNames.BackgroundSecondary),
104
+ buttonBackgroundHoverColor: colorVar(ColorNames.BackgroundSecondaryDark),
105
+ buttonTextHoverColor: colorVar(ColorNames.TextLink),
106
+ iconFillColor: colorVar(ColorNames.TextAccent),
107
+ copies: {
108
+ pdp: [
109
+ "does this fit my device model?",
110
+ "is this adjustable?",
111
+ "why choose this over a bulky bag?",
112
+ "what do reviewers love most?",
113
+ "can I use this every day?",
114
+ ],
115
+ plp: [],
116
+ },
117
+ headerConfig: {
118
+ ...defaultBandolierOrgConfig.chatPreviewConfig!.headerConfig,
119
+ },
120
+ footerConfig: {
121
+ ...defaultBandolierOrgConfig.chatPreviewConfig!.footerConfig,
122
+ },
123
+ },
124
+ floatingEntrypointConfig: {
125
+ ...defaultBandolierOrgConfig.floatingEntrypointConfig!,
126
+ showOption: "always",
127
+ expandedColor: colorVar(ColorNames.BackgroundDark),
128
+ expansionText: {
129
+ pdp: "Could this be your perfect everyday essential?",
130
+ plp: "What can we help you find today?",
131
+ },
132
+ },
133
+ productCardConfig: {
134
+ ...defaultBandolierOrgConfig.productCardConfig!,
135
+ },
136
+ pageCardConfig: {
137
+ ...defaultBandolierOrgConfig.pageCardConfig!,
138
+ variant: "filled",
139
+ hoverVariant: "lift",
140
+ iconVariant: "primary",
141
+ },
142
+ productReviewConfig: {
143
+ ...defaultBandolierOrgConfig.productReviewConfig!,
144
+ },
145
+ welcomeSectionConfig: {
146
+ ...defaultBandolierOrgConfig.welcomeSectionConfig!,
147
+ title: "Welcome to Bandolier AI!",
148
+ colorVariant: "accent",
149
+ subtitle:
150
+ "Hey there. I’m Maggie, your Bandolier shopping assistant. I’m here to help you find your perfect Bandolier—effortlessly stylish, hands-free, and ready for wherever life takes you.",
151
+ },
152
+ customerServiceIntegration: {
153
+ integrationMode: CustomerServiceIntegrationMode.simple,
154
+ provider: CustomerServiceType.gorgias,
155
+ useUnifiedButton: true,
156
+ },
157
+ searchConfig: {
158
+ enableGlobalSearch: true,
159
+ redirectSearchResultsUrl:
160
+ "https://www.bandolierstyle.com/pages/search-page",
161
+ searchFilterConfig: [
162
+ {
163
+ filterId: "price",
164
+ displayName: "Price",
165
+ type: "price",
166
+ bucketSize: 100,
167
+ },
168
+ {
169
+ filterId: "material",
170
+ displayName: "Materials",
171
+ attribute: "materials",
172
+ type: "dynamic",
173
+ sorting: {
174
+ type: "productCount",
175
+ },
176
+ },
177
+ {
178
+ filterId: "devices",
179
+ displayName: "Phone size",
180
+ type: "dynamic",
181
+ attribute: "devices",
182
+ sorting: {
183
+ type: "productCount",
184
+ },
185
+ },
186
+ {
187
+ filterId: "colors",
188
+ displayName: "Color",
189
+ type: "dynamic",
190
+ attribute: "colors",
191
+ sorting: {
192
+ type: "productCount",
193
+ },
194
+ },
195
+ {
196
+ filterId: "dynamic",
197
+ displayName: "",
198
+ type: "dynamic",
199
+ attribute: "dynamic",
200
+ sorting: {
201
+ type: "productCount",
202
+ },
203
+ },
204
+ ],
205
+ },
206
+ merchantOverrideCss: `
207
+ .spiffy-headline {
208
+ font-family: 'DM Sans', 'Poppins', sans-serif;
209
+ }
210
+ .spiffy-headline-placeholder::placeholder {
211
+ font-family: 'DM Sans', 'Poppins', sans-serif;
212
+ font-style: italic;
213
+ }
214
+ .spiffy-star-rating-container {
215
+ background: var(--spiffy-colors-background-light) !important;
216
+ }
217
+ .spiffy-star-rating-star {
218
+ fill: var(--spiffy-colors-accent-primary) !important;
219
+ }
220
+ .spiffy-product-card-text-color {
221
+ color: var(--spiffy-colors-text-secondary);
222
+ }
223
+ .spiffy-view-source-icon-wrapper {
224
+ background: var(--spiffy-colors-accent-primary) !important;
225
+ }
226
+ .spiffy-view-source-icon-wrapper svg {
227
+ fill: var(--spiffy-colors-background-light);
228
+ }
229
+ .spiffy-floating-button-position {
230
+ top: 150px !important;
231
+
232
+ @media (max-width: 760px) {
233
+ top: 100px !important;
234
+ }
235
+ }
236
+ [data-testid="floating-chat-shadow-dom-container"] {
237
+ z-index: 2147483647 !important;
238
+ }
239
+ .spiffy-chat-header-close-button {
240
+ color: var(--spiffy-colors-background-primary);
241
+ }
242
+ .spiffy-modal-sheet-footer .spiffy-suggestion-button-question-class svg {
243
+ fill: var(--spiffy-colors-text-link) !important;
244
+ stroke: var(--spiffy-colors-text-link) !important;
245
+ }
246
+ .spiffy-chat-header-container img {
247
+ max-width: 150px;
248
+ }
249
+ .spiffy-image-prompt-card-container .spiffy-suggestion-bar-row button {
250
+ background-color: var(--spiffy-colors-background-secondary) !important;
251
+ color: var(--spiffy-colors-text-link) !important;
252
+ border: none;
253
+ }
254
+ .spiffy-image-prompt-card-container .spiffy-suggestion-bar-row button svg {
255
+ fill: var(--spiffy-colors-accent-primary) !important;
256
+ stroke: var(--spiffy-colors-accent-primary) !important;
257
+ }
258
+ .spiffy-image-prompt-card-container .spiffy-suggestion-bar-row button:hover {
259
+ background-color: var(--spiffy-colors-background-secondary-dark) !important;
260
+ }
261
+ .spiffy-chat-preview-footer-container button {
262
+ background-color: var(--spiffy-colors-background-secondary);
263
+ border-radius: 0 !important;
264
+ }
265
+ .spiffy-chat-preview-footer-container button span {
266
+ color: var(--spiffy-colors-text-link) !important;
267
+ }
268
+ .spiffy-chat-preview-footer-container button:hover span {
269
+ color: var(--spiffy-colors-text-link) !important;
270
+ }
271
+ .spiffy-chat-preview-footer-container button svg {
272
+ fill: var(--spiffy-colors-accent-primary);
273
+ stroke: var(--spiffy-colors-accent-primary);
274
+ }
275
+ .spiffy-chat-preview-footer-container button:hover {
276
+ background-color: var(--spiffy-colors-background-secondary-dark);
277
+ }
278
+ .spiffy-chat-preview-footer-container button:hover svg {
279
+ fill: var(--spiffy-colors-accent-primary) !important;
280
+ stroke: var(--spiffy-colors-accent-primary) !important;
281
+ }
282
+ .spiffy-back-to-results-button {
283
+ color: var(--spiffy-colors-text-light);
284
+ }
285
+ .spiffy-back-to-results-button svg {
286
+ fill: var(--spiffy-colors-accent-primary) !important;
287
+ stroke: var(--spiffy-colors-accent-primary) !important;
288
+ }
289
+ @media (max-width: 479px) {
290
+ #spiffy-ai-prompt-card {
291
+ grid-area: 2 / 1 / 2 / -1 !important;
292
+ min-height: 350px !important;
293
+ }
294
+ .spiffy-image-prompt-card-container {
295
+ background-position-y: 0%, 100% !important;
296
+ }
297
+ }
298
+
299
+ /* ==========================================================================
300
+ Search Layout & Visibility Rules
301
+ ========================================================================== */
302
+
303
+ .search-results-entry-point ~ .section-padding.text-section.text-dark {
304
+ color: red;
305
+ }
306
+
307
+ /* -- Rules to hide original site elements -- */
308
+ .global-entry-desktop + .js-search-trigger.search,
309
+ .global-entry-small-desktop + .js-search-trigger.search,
310
+ .global-entry-desktop + .search-popdown,
311
+ .global-entry-small-desktop + .search-popdown,
312
+ #spiffy-ai-global-search-entrypoint-mobile-icon-only + .search-popdown,
313
+ #spiffy-ai-global-search-entrypoint-mobile-homepage + .search-popdown,
314
+ .global-entry-desktop + .main-content,
315
+ .global-entry-small-desktop + .main-content,
316
+ .search-results-entry-point + .shopify-section {
317
+ display: none !important;
318
+ }
319
+
320
+ // .search-results-no-op ~ * {
321
+ // z-index: 0;
322
+ // }
323
+
324
+ #spiffy-ai-global-search-entrypoint-mobile.global-entry-mobile {
325
+ display: block;
326
+ }
327
+
328
+ @media (min-width: 640px) {
329
+ #spiffy-ai-global-search-entrypoint-mobile.global-entry-mobile {
330
+ display: none;
331
+ }
332
+
333
+ #spiffy-ai-global-search-entrypoint-mobile-icon-only {
334
+ display: block;
335
+ }
336
+ }
337
+
338
+ @media (min-width: 1200px) {
339
+ #spiffy-ai-global-search-entrypoint.global-entry-desktop {
340
+ display: block;
341
+ }
342
+ #spiffy-ai-global-search-entrypoint-tablet.global-entry-small-desktop {
343
+ display: none;
344
+ }
345
+ #spiffy-ai-global-search-entrypoint-mobile.global-entry-mobile {
346
+ display: none;
347
+ }
348
+ }
349
+ `,
350
+ };
351
+ };
352
+
353
+ const bandolierPageConfig = (): OrgPageConfig => ({
354
+ pageVariants: [
355
+ {
356
+ variantId: "search-results",
357
+ variantType: "search",
358
+ variantTests: [
359
+ { testType: PageVariantTestType.UrlResolver },
360
+ {
361
+ testType: PageVariantTestType.FeatureGate,
362
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
363
+ },
364
+ {
365
+ testType: PageVariantTestType.QueryParam,
366
+ queryParam: "esq",
367
+ },
368
+ ],
369
+ widgetMounting: [
370
+ {
371
+ mountingConfigId: "globalSearchEntryPointDesktop",
372
+ widgetConfigId: "globalSearchEntryPointDesktop",
373
+ },
374
+ {
375
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
376
+ widgetConfigId: "globalSearchEntryPointDesktop",
377
+ },
378
+ {
379
+ mountingConfigId: "chatPreviewPLP",
380
+ widgetConfigId: "chatPreviewPLP",
381
+ },
382
+ {
383
+ mountingConfigId: "searchResultsEntryPointPLP",
384
+ widgetConfigId: "searchResultsEntryPoint",
385
+ },
386
+ {
387
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
388
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
389
+ },
390
+ {
391
+ mountingConfigId: "searchOverlayHost",
392
+ widgetConfigId: "searchOverlayHost",
393
+ },
394
+ ],
395
+ },
396
+ {
397
+ variantId: "plp-with-search",
398
+ variantType: "plp",
399
+ variantTests: [
400
+ { testType: PageVariantTestType.UrlResolver },
401
+ {
402
+ testType: PageVariantTestType.FeatureGate,
403
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
404
+ },
405
+ ],
406
+ plpIdExtractor: "url-resolver-plp-id",
407
+ widgetMounting: [
408
+ {
409
+ mountingConfigId: "globalSearchEntryPointDesktop",
410
+ widgetConfigId: "globalSearchEntryPointDesktop",
411
+ },
412
+ {
413
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
414
+ widgetConfigId: "globalSearchEntryPointDesktop",
415
+ },
416
+ {
417
+ mountingConfigId: "globalSearchEntryPointMobile",
418
+ widgetConfigId: "globalSearchEntryPointMobile",
419
+ },
420
+ {
421
+ mountingConfigId: "globalSearchEntryPointMobileSearchIcon",
422
+ widgetConfigId: "globalSearchEntryPointMobileSearchIcon",
423
+ },
424
+ {
425
+ mountingConfigId: "chatPreviewPLP",
426
+ widgetConfigId: "chatPreviewPLP",
427
+ },
428
+ {
429
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
430
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
431
+ },
432
+ {
433
+ mountingConfigId: "searchOverlayHost",
434
+ widgetConfigId: "searchOverlayHost",
435
+ },
436
+ ],
437
+ },
438
+ {
439
+ variantId: "pdp-with-search-bags",
440
+ variantType: "pdp",
441
+ variantTests: [
442
+ { testType: PageVariantTestType.UrlResolver },
443
+ {
444
+ testType: PageVariantTestType.FeatureGate,
445
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
446
+ },
447
+ {
448
+ testType: PageVariantTestType.InCollection,
449
+ collections: ["bags"],
450
+ },
451
+ ],
452
+ productIdExtractor: "url-resolver-product-id",
453
+ widgetMounting: [
454
+ {
455
+ mountingConfigId: "globalSearchEntryPointDesktop",
456
+ widgetConfigId: "globalSearchEntryPointDesktop",
457
+ },
458
+ {
459
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
460
+ widgetConfigId: "globalSearchEntryPointDesktop",
461
+ },
462
+ {
463
+ mountingConfigId: "globalSearchEntryPointMobile",
464
+ widgetConfigId: "globalSearchEntryPointMobile",
465
+ },
466
+ {
467
+ mountingConfigId: "globalSearchEntryPointMobileSearchIcon",
468
+ widgetConfigId: "globalSearchEntryPointMobileSearchIcon",
469
+ },
470
+ {
471
+ mountingConfigId: "topSuggestionBarPDP",
472
+ widgetConfigId: "topSuggestionsBarBags",
473
+ },
474
+ {
475
+ mountingConfigId: "bottomSuggestionBarPDP",
476
+ widgetConfigId: "bottomSuggestionsBar",
477
+ },
478
+ {
479
+ mountingConfigId: "chatPreviewPDP",
480
+ widgetConfigId: "chatPreviewPDP",
481
+ },
482
+ {
483
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
484
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
485
+ },
486
+ {
487
+ mountingConfigId: "searchOverlayHost",
488
+ widgetConfigId: "searchOverlayHost",
489
+ },
490
+ ],
491
+ },
492
+ {
493
+ variantId: "pdp-with-search",
494
+ variantType: "pdp",
495
+ variantTests: [
496
+ { testType: PageVariantTestType.UrlResolver },
497
+ {
498
+ testType: PageVariantTestType.FeatureGate,
499
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
500
+ },
501
+ ],
502
+ productIdExtractor: "url-resolver-product-id",
503
+ widgetMounting: [
504
+ {
505
+ mountingConfigId: "globalSearchEntryPointDesktop",
506
+ widgetConfigId: "globalSearchEntryPointDesktop",
507
+ },
508
+ {
509
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
510
+ widgetConfigId: "globalSearchEntryPointDesktop",
511
+ },
512
+ {
513
+ mountingConfigId: "globalSearchEntryPointMobile",
514
+ widgetConfigId: "globalSearchEntryPointMobile",
515
+ },
516
+ {
517
+ mountingConfigId: "globalSearchEntryPointMobileSearchIcon",
518
+ widgetConfigId: "globalSearchEntryPointMobileSearchIcon",
519
+ },
520
+ {
521
+ mountingConfigId: "topSuggestionBarPDP",
522
+ widgetConfigId: "topSuggestionsBar",
523
+ },
524
+ {
525
+ mountingConfigId: "bottomSuggestionBarPDP",
526
+ widgetConfigId: "bottomSuggestionsBar",
527
+ },
528
+ {
529
+ mountingConfigId: "chatPreviewPDP",
530
+ widgetConfigId: "chatPreviewPDP",
531
+ },
532
+ {
533
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
534
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
535
+ },
536
+ {
537
+ mountingConfigId: "searchOverlayHost",
538
+ widgetConfigId: "searchOverlayHost",
539
+ },
540
+ ],
541
+ },
542
+ {
543
+ variantId: "home-with-search",
544
+ variantType: "homepage",
545
+ variantTests: [
546
+ {
547
+ testType: PageVariantTestType.UrlResolver,
548
+ },
549
+ {
550
+ testType: PageVariantTestType.FeatureGate,
551
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
552
+ },
553
+ ],
554
+ widgetMounting: [
555
+ {
556
+ mountingConfigId: "globalSearchEntryPointDesktopHomepage",
557
+ widgetConfigId: "globalSearchEntryPointDesktopHomepage",
558
+ },
559
+ {
560
+ mountingConfigId: "globalSearchEntryPointSmallDesktopHomepage",
561
+ widgetConfigId: "globalSearchEntryPointDesktopHomepage",
562
+ },
563
+ {
564
+ mountingConfigId: "globalSearchEntryPointMobileHomepage",
565
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
566
+ },
567
+ {
568
+ mountingConfigId: "searchOverlayHost",
569
+ widgetConfigId: "searchOverlayHost",
570
+ },
571
+ ],
572
+ },
573
+ {
574
+ variantId: "other-with-search",
575
+ variantType: "other",
576
+ variantTests: [
577
+ {
578
+ testType: PageVariantTestType.FeatureGate,
579
+ featureGate: FeatureGates.IsGlobalSearchEnabled,
580
+ },
581
+ {
582
+ testType: PageVariantTestType.UrlResolver,
583
+ },
584
+ ],
585
+ widgetMounting: [
586
+ {
587
+ mountingConfigId: "globalSearchEntryPointDesktop",
588
+ widgetConfigId: "globalSearchEntryPointDesktop",
589
+ },
590
+ {
591
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
592
+ widgetConfigId: "globalSearchEntryPointDesktop",
593
+ },
594
+ {
595
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
596
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
597
+ },
598
+ {
599
+ mountingConfigId: "searchOverlayHost",
600
+ widgetConfigId: "searchOverlayHost",
601
+ },
602
+ ],
603
+ },
604
+ {
605
+ variantId: "plpPhoneCases",
606
+ variantType: "plp",
607
+ variantTests: [
608
+ { testType: PageVariantTestType.ShopifyPLP },
609
+ {
610
+ testType: PageVariantTestType.PlpId,
611
+ plpIds: ["bandolier-crossbody", "wristlet-phone-cases", "case-only"],
612
+ plpIdExtractor: "shopify-collection-id",
613
+ },
614
+ ],
615
+ plpIdExtractor: "shopify-collection-id",
616
+ widgetMounting: [
617
+ {
618
+ mountingConfigId: "imagePromptCardPLP",
619
+ widgetConfigId: "imagePromptCardPLPPhoneCases",
620
+ },
621
+ ],
622
+ },
623
+ {
624
+ variantId: "plpAccessories",
625
+ variantType: "plp",
626
+ variantTests: [
627
+ { testType: PageVariantTestType.ShopifyPLP },
628
+ {
629
+ testType: PageVariantTestType.PlpId,
630
+ plpIds: ["shop-all-accessories"],
631
+ plpIdExtractor: "shopify-collection-id",
632
+ },
633
+ ],
634
+ plpIdExtractor: "shopify-collection-id",
635
+ widgetMounting: [
636
+ {
637
+ mountingConfigId: "imagePromptCardPLP",
638
+ widgetConfigId: "imagePromptCardPLPAccessories",
639
+ },
640
+ ],
641
+ },
642
+ {
643
+ variantId: "plpBags",
644
+ variantType: "plp",
645
+ variantTests: [
646
+ { testType: PageVariantTestType.ShopifyPLP },
647
+ {
648
+ testType: PageVariantTestType.PlpId,
649
+ plpIds: ["bags"],
650
+ plpIdExtractor: "shopify-collection-id",
651
+ },
652
+ ],
653
+ plpIdExtractor: "shopify-collection-id",
654
+ widgetMounting: [
655
+ {
656
+ mountingConfigId: "imagePromptCardPLP",
657
+ widgetConfigId: "imagePromptCardPLPBags",
658
+ },
659
+ ],
660
+ },
661
+ {
662
+ variantId: "pdpPouches",
663
+ variantType: "pdp",
664
+ variantTests: [
665
+ { testType: PageVariantTestType.ShopifyPDP },
666
+ {
667
+ testType: PageVariantTestType.InCollection,
668
+ collections: ["shop-all-bags-pouches"],
669
+ },
670
+ ],
671
+ productIdExtractor: "shopify-product-variant-id",
672
+ widgetMounting: [
673
+ {
674
+ mountingConfigId: "topSuggestionBarPDP",
675
+ widgetConfigId: "topSuggestionsBarPouches",
676
+ },
677
+ {
678
+ mountingConfigId: "chatPreviewPDP",
679
+ widgetConfigId: "chatPreviewPDP",
680
+ },
681
+ {
682
+ mountingConfigId: "bottomSuggestionBarPDP",
683
+ widgetConfigId: "bottomSuggestionsBar",
684
+ },
685
+ ],
686
+ },
687
+ {
688
+ variantId: "pdpBags",
689
+ variantType: "pdp",
690
+ variantTests: [
691
+ { testType: PageVariantTestType.ShopifyPDP },
692
+ {
693
+ testType: PageVariantTestType.InCollection,
694
+ collections: ["bags"],
695
+ },
696
+ ],
697
+ productIdExtractor: "shopify-product-variant-id",
698
+ widgetMounting: [
699
+ {
700
+ mountingConfigId: "topSuggestionBarPDP",
701
+ widgetConfigId: "topSuggestionsBarBags",
702
+ },
703
+ {
704
+ mountingConfigId: "chatPreviewPDP",
705
+ widgetConfigId: "chatPreviewPDP",
706
+ },
707
+ {
708
+ mountingConfigId: "bottomSuggestionBarPDP",
709
+ widgetConfigId: "bottomSuggestionsBar",
710
+ },
711
+ ],
712
+ },
713
+ {
714
+ variantId: "plpShopAll",
715
+ variantType: "plp",
716
+ variantTests: [
717
+ { testType: PageVariantTestType.ShopifyPLP },
718
+ {
719
+ testType: PageVariantTestType.PlpId,
720
+ plpIds: ["all"],
721
+ plpIdExtractor: "shopify-collection-id",
722
+ },
723
+ ],
724
+ plpIdExtractor: "shopify-collection-id",
725
+ widgetMounting: [
726
+ {
727
+ mountingConfigId: "imagePromptCardPLP",
728
+ widgetConfigId: "imagePromptCardPLPShopAll",
729
+ },
730
+ ],
731
+ },
732
+ {
733
+ variantId: "plp",
734
+ variantType: "plp",
735
+ variantTests: [{ testType: PageVariantTestType.ShopifyPLP }],
736
+ plpIdExtractor: "shopify-collection-id",
737
+ widgetMounting: [
738
+ {
739
+ mountingConfigId: "imagePromptCardPLP",
740
+ widgetConfigId: "imagePromptCardPLP",
741
+ },
742
+ ],
743
+ },
744
+ {
745
+ variantId: "pdp",
746
+ variantType: "pdp",
747
+ variantTests: [{ testType: PageVariantTestType.ShopifyPDP }],
748
+ productIdExtractor: "shopify-product-variant-id",
749
+ widgetMounting: [
750
+ {
751
+ mountingConfigId: "topSuggestionBarPDP",
752
+ widgetConfigId: "topSuggestionsBar",
753
+ },
754
+ {
755
+ mountingConfigId: "chatPreviewPDP",
756
+ widgetConfigId: "chatPreviewPDP",
757
+ },
758
+ {
759
+ mountingConfigId: "bottomSuggestionBarPDP",
760
+ widgetConfigId: "bottomSuggestionsBar",
761
+ },
762
+ ],
763
+ },
764
+ ],
765
+ mountingConfigs: {
766
+ imagePromptCardPLP: {
767
+ mountingConfigId: "imagePromptCardPLP",
768
+ containerId: PROMPT_CARD_ID,
769
+ testId: PROMPT_CARD_TESTID,
770
+ insertionPoint: {
771
+ selector: "#AjaxinateLoop",
772
+ insertionType: DOMInsertionType.AFTER,
773
+ },
774
+ gridInsertionType: GridInsertionType.FIXED_1,
775
+ divCheckSelector: "test",
776
+ style: {
777
+ gridRow: "2 / 2",
778
+ gridColumn: "1 / 1",
779
+ },
780
+ },
781
+
782
+ chatPreviewPDP: {
783
+ mountingConfigId: "chatPreviewPDP",
784
+ containerId: CHAT_PREVIEW_CONTAINER_ID,
785
+ testId: CHAT_PREVIEW_TESTID,
786
+ insertionPoint: {
787
+ selector: ".product-single div",
788
+ insertionType: DOMInsertionType.APPEND_CHILD,
789
+ },
790
+ },
791
+
792
+ topSuggestionBarPDP: {
793
+ mountingConfigId: "topSuggestionBarPDP",
794
+ containerId: TOP_SUGGESTION_BAR_PDP_ID,
795
+ testId: TOP_SUGGESTION_BAR_TESTID,
796
+ insertionPoint: {
797
+ selector: ".product__price-and-rating",
798
+ insertionType: DOMInsertionType.AFTER,
799
+ },
800
+ style: {
801
+ marginBottom: "16px",
802
+ },
803
+ },
804
+
805
+ bottomSuggestionBarPDP: {
806
+ mountingConfigId: "bottomSuggestionBarPDP",
807
+ containerId: BOTTOM_REVIEWS_BAR_ID,
808
+ testId: BOTTOM_SUGGESTION_BAR_TESTID,
809
+ insertionPoint: {
810
+ selector: ".yotpo-smart-topics-panel",
811
+ insertionType: DOMInsertionType.AFTER,
812
+ },
813
+ style: {
814
+ width: "100%",
815
+ },
816
+ },
817
+ searchOverlayHost: {
818
+ mountingConfigId: "searchOverlayHost",
819
+ containerId: SEARCH_OVERLAY_ENTRYPOINT_ID,
820
+ testId: SEARCH_OVERLAY_HOST_TESTID,
821
+ insertionPoint: {
822
+ selector: "body",
823
+ insertionType: DOMInsertionType.APPEND_CHILD,
824
+ },
825
+ className: "spiffy-overlay-host",
826
+ },
827
+ searchResultsEntryPointPLP: {
828
+ mountingConfigId: "searchResultsEntryPointPLP",
829
+ containerId: SEARCH_RESULTS_ENTRYPOINT_ID,
830
+ testId: SEARCH_RESULTS_ENTRYPOINT_TESTID,
831
+ insertionPoint: {
832
+ selector: ".main-content",
833
+ insertionType: DOMInsertionType.BEFORE,
834
+ },
835
+ suppressionSelector: "#MainContent",
836
+ className: "search-results-entry-point",
837
+ style: {
838
+ marginBottom: "60px",
839
+ },
840
+ },
841
+ searchResultsEntryPointPDP: {
842
+ mountingConfigId: "searchResultsEntryPointPDP",
843
+ containerId: SEARCH_RESULTS_ENTRYPOINT_ID,
844
+ testId: SEARCH_RESULTS_ENTRYPOINT_TESTID,
845
+ insertionPoint: {
846
+ selector: ".main-content",
847
+ insertionType: DOMInsertionType.BEFORE,
848
+ },
849
+ suppressionSelector: "#MainContent",
850
+ className: "search-results-entry-point",
851
+ style: {
852
+ marginBottom: "60px",
853
+ },
854
+ },
855
+ globalSearchEntryPointDesktopHomepage: {
856
+ mountingConfigId: "globalSearchEntryPointDesktopHomepage",
857
+ containerId: HOMEPAGE_DESKTOP_GLOBAL_SEARCH_ENTRYPOINT_ID,
858
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
859
+ insertionPoint: {
860
+ selector:
861
+ ".menu__item.menu__item--icons .search-popdown.menu__item.menu__item--icon",
862
+ insertionType: DOMInsertionType.BEFORE,
863
+ },
864
+ suppressionSelector: ".menu__item.menu__item--icons .search-popdown",
865
+ className: "global-entry-desktop-homepage",
866
+ style: {
867
+ margin: "0 5px 0 7px",
868
+ },
869
+ },
870
+ globalSearchEntryPointSmallDesktopHomepage: {
871
+ mountingConfigId: "globalSearchEntryPointSmallDesktopHomepage",
872
+ containerId: HOMEPAGE_TABLET_GLOBAL_SEARCH_ENTRYPOINT_ID,
873
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
874
+ insertionPoint: {
875
+ selector:
876
+ "#NavStandard .menu__item.menu__item--icon.menu__item-wishlist",
877
+ insertionType: DOMInsertionType.ADJACENT_AFTER_END,
878
+ },
879
+ suppressionSelector: ".search-popdown",
880
+ className: "global-entry-small-desktop-homepage",
881
+ style: {
882
+ margin: "0 5px 0 7px",
883
+ },
884
+ },
885
+ globalSearchEntryPointMobileHomepage: {
886
+ // This is the same as globalSearchEntryPointOnlyIconMobile except the class is different allowing us to not hide it when the screensize is small. It's used on homepage and 'other' pages
887
+ mountingConfigId: "globalSearchEntryPointMobileHomepage",
888
+ containerId: HOMEPAGE_MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID,
889
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
890
+ insertionPoint: {
891
+ selector: ".search-popdown.mobile-menu__button",
892
+ insertionType: DOMInsertionType.BEFORE,
893
+ },
894
+ className: "global-entry-mobile-homepage",
895
+ style: {
896
+ margin: "6px",
897
+ },
898
+ },
899
+ globalSearchEntryPointDesktop: {
900
+ mountingConfigId: "globalSearchEntryPointDesktop",
901
+ containerId: GLOBAL_SEARCH_ENTRYPOINT_ID,
902
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
903
+ insertionPoint: {
904
+ selector:
905
+ ".menu__item.menu__item--icons .search-popdown.menu__item.menu__item--icon",
906
+ insertionType: DOMInsertionType.BEFORE,
907
+ },
908
+ className: "global-entry-desktop",
909
+ style: {
910
+ margin: "0 5px 0 7px",
911
+ },
912
+ },
913
+ globalSearchEntryPointSmallDesktop: {
914
+ mountingConfigId: "globalSearchEntryPointSmallDesktop",
915
+ containerId: TABLET_GLOBAL_SEARCH_ENTYPOINT_ID,
916
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
917
+ insertionPoint: {
918
+ selector:
919
+ "#NavStandard .menu__item.menu__item--icon.menu__item-wishlist",
920
+ insertionType: DOMInsertionType.ADJACENT_AFTER_END,
921
+ },
922
+ className: "global-entry-small-desktop",
923
+ style: {
924
+ margin: "0 5px 0 7px",
925
+ },
926
+ },
927
+ globalSearchEntryPointMobile: {
928
+ mountingConfigId: "globalSearchEntryPointMobile",
929
+ containerId: MOBILE_GLOBAL_SEARCH_ENTRYPOINT_ID,
930
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
931
+ insertionPoint: {
932
+ selector: ".main-content",
933
+ insertionType: DOMInsertionType.BEFORE,
934
+ },
935
+ className: "global-entry-mobile",
936
+ style: {
937
+ margin: "8px",
938
+ },
939
+ },
940
+ globalSearchEntryPointOnlyIconMobile: {
941
+ mountingConfigId: "globalSearchEntryPointOnlyIconMobile",
942
+ containerId: MOBILE_ICON_ONLY_GLOBAL_SEARCH_ENTRYPOINT_ID,
943
+ testId: GLOBAL_SEARCH_ENTRYPOINT_TESTID,
944
+ insertionPoint: {
945
+ selector: ".search-popdown.mobile-menu__button",
946
+ insertionType: DOMInsertionType.ADJACENT_BEFORE_BEGIN,
947
+ },
948
+ className: "global-entry-mobile-menu-icon",
949
+ style: {
950
+ margin: "6px",
951
+ },
952
+ },
953
+ },
954
+ widgetConfigs: {
955
+ imagePromptCardPLPPhoneCases: {
956
+ widgetConfigId: "imagePromptCard",
957
+ type: WidgetType.ImagePromptCard,
958
+ url: CdnService.getAssetURL(
959
+ "image-prompt-card-2.png",
960
+ OrgShortName.Bandolier
961
+ ),
962
+ lightText: true,
963
+ title: "What can we help you find today?",
964
+ subtitle: [
965
+ "Crossbody vs. wristlet—what’s the difference?",
966
+ "Can I mix and match straps and wristlets?",
967
+ "Does it fit cards or essentials?",
968
+ "How protected will my phone be?",
969
+ "Do you offer bundles or sets?",
970
+ "Can I use this case without a strap?",
971
+ ],
972
+ staticSuggestionCopies: [
973
+ "Will this fit my phone?",
974
+ "Crossbody vs. wristlet—what’s the difference?",
975
+ "Can I mix and match straps and wristlets?",
976
+ "Does it fit cards or essentials?",
977
+ "How protected will my phone be?",
978
+ "Do you offer bundles or sets?",
979
+ "Can I use this case without a strap?",
980
+ ],
981
+ userQueryButtonConfig: {
982
+ variant: "underlineLight",
983
+ placeholderText: "Need something special?",
984
+ icon: "sendArrow",
985
+ },
986
+ } satisfies ImagePromptWidgetConfig,
987
+ imagePromptCardPLPAccessories: {
988
+ widgetConfigId: "imagePromptCard",
989
+ type: WidgetType.ImagePromptCard,
990
+ url: CdnService.getAssetURL(
991
+ "image-prompt-card-2.png",
992
+ OrgShortName.Bandolier
993
+ ),
994
+ lightText: true,
995
+ title: "What can we help you find today?",
996
+ subtitle: [
997
+ "Can I mix and match colors or styles?",
998
+ "How do these attach to cases and bags?",
999
+ "Are accessories customizable?",
1000
+ "Can I customize my Bandolier?",
1001
+ ],
1002
+ staticSuggestionCopies: [
1003
+ "Can I mix and match colors or styles?",
1004
+ "How do these attach to cases and bags?",
1005
+ "Are accessories customizable?",
1006
+ "Can I customize my Bandolier?",
1007
+ ],
1008
+ userQueryButtonConfig: {
1009
+ variant: "underlineLight",
1010
+ placeholderText: "Need something special?",
1011
+ icon: "sendArrow",
1012
+ },
1013
+ } satisfies ImagePromptWidgetConfig,
1014
+ imagePromptCardPLPBags: {
1015
+ widgetConfigId: "imagePromptCard",
1016
+ type: WidgetType.ImagePromptCard,
1017
+ url: CdnService.getAssetURL(
1018
+ "image-prompt-card-2.png",
1019
+ OrgShortName.Bandolier
1020
+ ),
1021
+ lightText: true,
1022
+ title: "What can we help you find today?",
1023
+ subtitle: [
1024
+ "Are the bags designed to hold phones?",
1025
+ "Can I attach a Bandolier strap to this bag?",
1026
+ "Does it have interior pockets?",
1027
+ "Is it made of real leather?",
1028
+ "Can the strap be removed?",
1029
+ ],
1030
+ staticSuggestionCopies: [
1031
+ "Are the bags designed to hold phones?",
1032
+ "Can I attach a Bandolier strap to this bag?",
1033
+ "Does it have interior pockets?",
1034
+ "Is it made of real leather?",
1035
+ "Can the strap be removed?",
1036
+ ],
1037
+ userQueryButtonConfig: {
1038
+ variant: "underlineLight",
1039
+ placeholderText: "Need something special?",
1040
+ icon: "sendArrow",
1041
+ },
1042
+ } satisfies ImagePromptWidgetConfig,
1043
+ imagePromptCardPLPShopAll: {
1044
+ widgetConfigId: "imagePromptCard",
1045
+ type: WidgetType.ImagePromptCard,
1046
+ url: CdnService.getAssetURL(
1047
+ "image-prompt-card-2.png",
1048
+ OrgShortName.Bandolier
1049
+ ),
1050
+ lightText: true,
1051
+ title: "What can we help you find today?",
1052
+ subtitle: [
1053
+ "Will this fit my phone?",
1054
+ "How is Bandolier different from other phone cases?",
1055
+ "What’s your most popular style?",
1056
+ "What's trending right now?",
1057
+ ],
1058
+ staticSuggestionCopies: [
1059
+ "Will this fit my phone?",
1060
+ "How is Bandolier different from other phone cases?",
1061
+ "What’s your most popular style?",
1062
+ "What's trending right now?",
1063
+ ],
1064
+ userQueryButtonConfig: {
1065
+ variant: "underlineLight",
1066
+ placeholderText: "Need something special?",
1067
+ icon: "sendArrow",
1068
+ },
1069
+ } satisfies ImagePromptWidgetConfig,
1070
+ imagePromptCardPLP: {
1071
+ widgetConfigId: "imagePromptCard",
1072
+ type: WidgetType.ImagePromptCard,
1073
+ url: CdnService.getAssetURL(
1074
+ "image-prompt-card-2.png",
1075
+ OrgShortName.Bandolier
1076
+ ),
1077
+ lightText: true,
1078
+ title: "What can we help you find today?",
1079
+ subtitle: [
1080
+ "Which phone case fits your style?",
1081
+ "Need a bag for nights out?",
1082
+ "What’s a chic gift idea?",
1083
+ "Looking for a travel-ready set?",
1084
+ ],
1085
+ staticSuggestionCopies: [
1086
+ "Which phone case fits your style?",
1087
+ "Need a bag for nights out?",
1088
+ "What’s a chic gift idea?",
1089
+ "Looking for a travel-ready set?",
1090
+ ],
1091
+ userQueryButtonConfig: {
1092
+ variant: "underlineLight",
1093
+ placeholderText: "Need something special?",
1094
+ icon: "sendArrow",
1095
+ },
1096
+ } satisfies ImagePromptWidgetConfig,
1097
+
1098
+ topSuggestionsBar: {
1099
+ widgetConfigId: "topSuggestionsBar",
1100
+ contentId: "spiffy-top-suggestion-bar-contents",
1101
+ metricDisplayLocation: ChatElementDisplayLocation.TOP_REVIEWS_SNIPPET,
1102
+ location: SuggestionBarLocationForMetrics.SUGGESTION_BAR_TOP,
1103
+ type: WidgetType.SuggestionBarV2,
1104
+ variant: "secondary",
1105
+ hoverVariant: "secondaryAccent",
1106
+ buttonBorderRadius: "sm",
1107
+ animationSpeed: "standard",
1108
+ buttonTexts: {
1109
+ default: [
1110
+ "Can I use this case without a strap? ",
1111
+ "How many cards fit in the wallet?",
1112
+ "Summarize Reviews",
1113
+ "What makes this so versatile?",
1114
+ "Why are shoppers obsessed with this?",
1115
+ ],
1116
+ productSpecific: {
1117
+ // Hailey
1118
+ "hailey-side-slot-leather-crossbody-bandolier-black-gold": [
1119
+ "Summarize the reviews",
1120
+ "Why is this your best seller?",
1121
+ "Can you use this case without a strap?",
1122
+ "How many cards fit in the wallet?",
1123
+ "What makes this so versatile?",
1124
+ ],
1125
+ // Mila
1126
+ "mila-magsafe-charging-crossbody-bandolier-black-gold": [
1127
+ "Summarize the reviews",
1128
+ "Is this MagSafe Compatible?",
1129
+ "Does the wallet come off?",
1130
+ "Why is this your best seller?",
1131
+ "Can you use this case without a strap?",
1132
+ "How many cards fit in the wallet?",
1133
+ ],
1134
+ // Remi
1135
+ "remi-magnet-wallet-crossbody-phone-case-black-gold": [
1136
+ "Summarize the reviews",
1137
+ "Is this MagSafe Compatible?",
1138
+ "Is the wallet removable?",
1139
+ "Why is this your best seller?",
1140
+ "Can you use this case without a strap?",
1141
+ "How many cards fit in the wallet?",
1142
+ ],
1143
+ // Lily
1144
+ "lily-set-bandolier-black-gold": [
1145
+ "Summarize the reviews",
1146
+ "Why is this your best seller?",
1147
+ "Can you use this case without a strap?",
1148
+ "How many cards fit in the wallet?",
1149
+ ],
1150
+ },
1151
+ },
1152
+ } satisfies SuggestionBarWidgetV2Config,
1153
+ topSuggestionsBarPouches: {
1154
+ widgetConfigId: "topSuggestionsBarPouches",
1155
+ contentId: "spiffy-top-suggestion-bar-contents",
1156
+ metricDisplayLocation: ChatElementDisplayLocation.TOP_REVIEWS_SNIPPET,
1157
+ location: SuggestionBarLocationForMetrics.SUGGESTION_BAR_TOP,
1158
+ type: WidgetType.SuggestionBarV2,
1159
+ variant: "secondary",
1160
+ hoverVariant: "secondaryAccent",
1161
+ buttonBorderRadius: "sm",
1162
+ animationSpeed: "standard",
1163
+ buttonTexts: {
1164
+ default: [
1165
+ "How will this work with my bandolier case?",
1166
+ "Can I attach a Bandolier strap to this pouch?",
1167
+ "Does it have interior pockets?",
1168
+ "Is it made of real leather?",
1169
+ ],
1170
+ },
1171
+ } satisfies SuggestionBarWidgetV2Config,
1172
+ topSuggestionsBarBags: {
1173
+ widgetConfigId: "topSuggestionsBarBags",
1174
+ contentId: "spiffy-top-suggestion-bar-contents",
1175
+ metricDisplayLocation: ChatElementDisplayLocation.TOP_REVIEWS_SNIPPET,
1176
+ location: SuggestionBarLocationForMetrics.SUGGESTION_BAR_TOP,
1177
+ type: WidgetType.SuggestionBarV2,
1178
+ variant: "secondary",
1179
+ hoverVariant: "secondaryAccent",
1180
+ buttonBorderRadius: "sm",
1181
+ animationSpeed: "standard",
1182
+ buttonTexts: {
1183
+ default: [
1184
+ "Are the bags designed to hold phones?",
1185
+ "Can I attach a Bandolier strap to this bag?",
1186
+ "Does it have interior pockets?",
1187
+ "Is it made of real leather?",
1188
+ "Can the strap be removed?",
1189
+ ],
1190
+ },
1191
+ } satisfies SuggestionBarWidgetV2Config,
1192
+ chatPreviewPDP: {
1193
+ widgetConfigId: "chatPreviewPDP",
1194
+ type: WidgetType.ChatPreview,
1195
+ variant: "filled",
1196
+ addSeparators: false,
1197
+ } satisfies ChatPreviewWidgetConfig,
1198
+
1199
+ bottomSuggestionsBar: {
1200
+ widgetConfigId: "bottomSuggestionsBar",
1201
+ contentId: "spiffy-bottom-suggestion-bar-contents",
1202
+ metricDisplayLocation: ChatElementDisplayLocation.BOTTOM_REVIEWS_SNIPPET,
1203
+ location: SuggestionBarLocationForMetrics.SUGGESTION_BAR_BOTTOM,
1204
+ type: WidgetType.SuggestionBarV2,
1205
+ variant: "darkAccent",
1206
+ hoverVariant: "secondaryAccent",
1207
+ buttonBorderRadius: "sm",
1208
+ animationSpeed: "none",
1209
+ twoRowsOnMobile: true,
1210
+ buttonTexts: {
1211
+ default: [
1212
+ "Does this fit my device model?",
1213
+ "Is this adjustable?",
1214
+ "Why choose this over a bulky bag?",
1215
+ "What do reviewers love most?",
1216
+ "Can I use this every day?",
1217
+ ],
1218
+ },
1219
+ } satisfies SuggestionBarWidgetV2Config,
1220
+ globalSearchEntryPointMobile: {
1221
+ widgetConfigId: "globalSearchEntryPointMobile",
1222
+ type: WidgetType.SearchZeroStateEntryPoint,
1223
+ searchZeroStateVariant: "backgroundTertiary",
1224
+ searchInputVariant: "standard",
1225
+ suggestionButtonConfig: {
1226
+ variant: "darkAccent",
1227
+ hoverVariant: "secondaryAccent",
1228
+ borderRadius: "sm",
1229
+ },
1230
+ layout: "input",
1231
+ searchBoxPlaceholder: "What can I help you find?",
1232
+ initialSuggestions: [
1233
+ "MagSafe compatible cases",
1234
+ "Most popular styles",
1235
+ "Remi removable wallet",
1236
+ "Mix and match straps and wristlets",
1237
+ "Add-on pouches",
1238
+ "Best phone cases for travel",
1239
+ ],
1240
+ usingPortal: true,
1241
+ } satisfies SearchEntryPointWidgetConfig,
1242
+ globalSearchEntryPointMobileSearchIcon: {
1243
+ widgetConfigId: "globalSearchEntryPointMobileSearchIcon",
1244
+ type: WidgetType.SearchZeroStateEntryPoint,
1245
+ searchZeroStateVariant: "backgroundTertiary",
1246
+ searchInputVariant: "standard",
1247
+ suggestionButtonConfig: {
1248
+ variant: "darkAccent",
1249
+ hoverVariant: "secondaryAccent",
1250
+ borderRadius: "sm",
1251
+ },
1252
+ layout: "icon",
1253
+ searchIconVariant: "thin",
1254
+ searchIconSize: 24,
1255
+ searchBoxPlaceholder: "What can I help you find?",
1256
+ initialSuggestions: [
1257
+ "MagSafe compatible cases",
1258
+ "Most popular styles",
1259
+ "Remi removable wallet",
1260
+ "Mix and match straps and wristlets",
1261
+ "Add-on pouches",
1262
+ "Best phone cases for travel",
1263
+ ],
1264
+ usingPortal: true,
1265
+ } satisfies SearchEntryPointWidgetConfig,
1266
+ globalSearchEntryPointDesktop: {
1267
+ widgetConfigId: "globalSearchEntryPointDesktop",
1268
+ type: WidgetType.SearchZeroStateEntryPoint,
1269
+ searchZeroStateVariant: "backgroundTertiary",
1270
+ searchInputVariant: "standard",
1271
+ suggestionButtonConfig: {
1272
+ variant: "darkAccent",
1273
+ hoverVariant: "secondaryAccent",
1274
+ borderRadius: "sm",
1275
+ },
1276
+ layout: "icon",
1277
+ searchIconVariant: "thin",
1278
+ searchIconSize: 22,
1279
+ searchBoxPlaceholder: "What can I help you find?",
1280
+ initialSuggestions: [
1281
+ "MagSafe compatible cases",
1282
+ "Most popular styles",
1283
+ "Remi removable wallet",
1284
+ "Mix and match straps and wristlets",
1285
+ "Add-on pouches",
1286
+ "Best phone cases for travel",
1287
+ ],
1288
+ usingPortal: true,
1289
+ } satisfies SearchEntryPointWidgetConfig,
1290
+ globalSearchEntryPointDesktopHomepage: {
1291
+ widgetConfigId: "globalSearchEntryPointDesktopHomepage",
1292
+ type: WidgetType.SearchZeroStateEntryPoint,
1293
+ searchZeroStateVariant: "backgroundTertiary",
1294
+ searchInputVariant: "standard",
1295
+ suggestionButtonConfig: {
1296
+ variant: "darkAccent",
1297
+ hoverVariant: "secondaryAccent",
1298
+ borderRadius: "sm",
1299
+ },
1300
+ layout: "icon",
1301
+ searchIconVariant: "thin",
1302
+ searchIconSize: 22,
1303
+ searchBoxPlaceholder: "What can I help you find?",
1304
+ initialSuggestions: [
1305
+ "MagSafe compatible cases",
1306
+ "Most popular styles",
1307
+ "Remi removable wallet",
1308
+ "Mix and match straps and wristlets",
1309
+ "Add-on pouches",
1310
+ "Best phone cases for travel",
1311
+ ],
1312
+ usingPortal: true,
1313
+ } satisfies SearchEntryPointWidgetConfig,
1314
+ globalSearchEntryPointSmallDesktopHomepage: {
1315
+ widgetConfigId: "globalSearchEntryPointSmallDesktopHomepage",
1316
+ type: WidgetType.SearchZeroStateEntryPoint,
1317
+ searchZeroStateVariant: "backgroundTertiary",
1318
+ searchInputVariant: "standard",
1319
+ suggestionButtonConfig: {
1320
+ variant: "darkAccent",
1321
+ hoverVariant: "secondaryAccent",
1322
+ borderRadius: "sm",
1323
+ },
1324
+ layout: "icon",
1325
+ searchIconVariant: "thin",
1326
+ searchIconSize: 22,
1327
+ searchBoxPlaceholder: "What can I help you find?",
1328
+ initialSuggestions: [
1329
+ "MagSafe compatible cases",
1330
+ "Most popular styles",
1331
+ "Remi removable wallet",
1332
+ "Mix and match straps and wristlets",
1333
+ "Add-on pouches",
1334
+ "Best phone cases for travel",
1335
+ ],
1336
+ usingPortal: true,
1337
+ } satisfies SearchEntryPointWidgetConfig,
1338
+ globalSearchEntryPointOnlyIconMobile: {
1339
+ widgetConfigId: "globalSearchEntryPointOnlyIconMobile",
1340
+ type: WidgetType.SearchZeroStateEntryPoint,
1341
+ searchZeroStateVariant: "backgroundTertiary",
1342
+ searchInputVariant: "standard",
1343
+ suggestionButtonConfig: {
1344
+ variant: "darkAccent",
1345
+ hoverVariant: "secondaryAccent",
1346
+ borderRadius: "sm",
1347
+ },
1348
+ layout: "icon",
1349
+ searchIconVariant: "thin",
1350
+ searchIconSize: 26,
1351
+ searchBoxPlaceholder: "What can I help you find?",
1352
+ initialSuggestions: [
1353
+ "MagSafe compatible cases",
1354
+ "Most popular styles",
1355
+ "Remi removable wallet",
1356
+ "Mix and match straps and wristlets",
1357
+ "Add-on pouches",
1358
+ "Best phone cases for travel",
1359
+ ],
1360
+ usingPortal: true,
1361
+ } satisfies SearchEntryPointWidgetConfig,
1362
+ searchResultsEntryPoint: {
1363
+ widgetConfigId: "searchResultsEntryPoint",
1364
+ type: WidgetType.SearchResultsEntryPoint,
1365
+ searchBoxPlaceholder: "What can I help you find?",
1366
+ searchInputVariant: "standard",
1367
+ searchFilterSidebarVariant: "darkButton",
1368
+ productGridVariant: "square",
1369
+ } satisfies SearchResultsEntryPointWidgetConfig,
1370
+ searchOverlayHost: {
1371
+ widgetConfigId: "searchOverlayHost",
1372
+ type: WidgetType.SearchOverlayHost,
1373
+ } satisfies SearchOverlayHostWidgetConfig,
1374
+ },
1375
+ });
1376
+
1377
+ const bandolierOrgInfo = {
1378
+ shortName: OrgShortName.Bandolier,
1379
+ name: "Bandolier",
1380
+ domain: "bandolierstyle.com",
1381
+ defaultProductId:
1382
+ "lily-side-slot-leather-crossbody-bandolier-ceci-ivory-floral-gold",
1383
+ alwaysEnabledMerchants: true,
1384
+ orgUIConfig: bandolierOrgUIConfig,
1385
+ orgColors: () => bandolierColors,
1386
+ orgPageConfig: bandolierPageConfig,
1387
+ } satisfies BasicOrgInfoType;
1388
+
1389
+ export { bandolierOrgInfo };