@envive-ai/react-hooks 0.3.8 → 0.3.10

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 (484) hide show
  1. package/dist/_virtual/rolldown_runtime.cjs +0 -2
  2. package/dist/application/commerce-api.cjs +1 -1
  3. package/dist/application/commerce-api.js +1 -1
  4. package/dist/application/models/chatElementDisplayLocationV3.cjs +3 -1
  5. package/dist/application/models/chatElementDisplayLocationV3.d.cts +3 -1
  6. package/dist/application/models/chatElementDisplayLocationV3.d.ts +3 -1
  7. package/dist/application/models/chatElementDisplayLocationV3.js +3 -1
  8. package/dist/application/models/variantInfo/variantInfo.cjs +2 -2
  9. package/dist/application/models/variantInfo/variantInfo.d.cts +2 -2
  10. package/dist/application/models/variantInfo/variantInfo.d.ts +2 -2
  11. package/dist/application/models/variantInfo/variantInfo.js +2 -2
  12. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +2 -1
  13. package/dist/application/utils/widgetTextRequestToApiRequest.js +2 -1
  14. package/dist/atoms/app/index.d.cts +7 -7
  15. package/dist/atoms/app/index.d.ts +7 -7
  16. package/dist/atoms/app/variant.d.cts +6 -6
  17. package/dist/atoms/app/variant.d.ts +6 -6
  18. package/dist/atoms/chat/chatState.d.cts +17 -17
  19. package/dist/atoms/chat/chatState.d.ts +18 -18
  20. package/dist/atoms/chat/form.d.cts +2 -2
  21. package/dist/atoms/chat/form.d.ts +2 -2
  22. package/dist/atoms/chat/index.cjs +7 -1
  23. package/dist/atoms/chat/index.d.cts +5 -4
  24. package/dist/atoms/chat/index.d.ts +5 -4
  25. package/dist/atoms/chat/index.js +3 -2
  26. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  27. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  28. package/dist/atoms/chat/messageQueue.cjs +1 -0
  29. package/dist/atoms/chat/messageQueue.d.cts +31 -0
  30. package/dist/atoms/chat/messageQueue.d.ts +31 -0
  31. package/dist/atoms/chat/messageQueue.js +1 -1
  32. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  33. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  34. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  35. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  36. package/dist/atoms/chat/replies.d.cts +2 -2
  37. package/dist/atoms/chat/replies.d.ts +3 -3
  38. package/dist/atoms/chat/suggestions.d.cts +2 -2
  39. package/dist/atoms/chat/suggestions.d.ts +2 -2
  40. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  41. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  42. package/dist/atoms/org/customerService.d.cts +6 -6
  43. package/dist/atoms/org/customerService.d.ts +6 -6
  44. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  45. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  46. package/dist/atoms/org/index.cjs +2 -2
  47. package/dist/atoms/org/index.js +2 -2
  48. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  49. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  50. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  51. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  52. package/dist/atoms/search/chatSearch.cjs +1 -1
  53. package/dist/atoms/search/chatSearch.d.cts +17 -17
  54. package/dist/atoms/search/chatSearch.d.ts +17 -17
  55. package/dist/atoms/search/chatSearch.js +1 -1
  56. package/dist/atoms/search/searchAPI.cjs +1 -1
  57. package/dist/atoms/search/searchAPI.d.cts +13 -13
  58. package/dist/atoms/search/searchAPI.d.ts +13 -13
  59. package/dist/atoms/search/searchAPI.js +1 -1
  60. package/dist/atoms/search/types.d.ts +1 -1
  61. package/dist/atoms/search/utils.d.cts +1 -1
  62. package/dist/atoms/search/utils.d.ts +1 -1
  63. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  64. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  65. package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +66 -0
  66. package/dist/contexts/enviveContext/WindowChatToggleBinder.js +65 -0
  67. package/dist/contexts/enviveContext/enviveContext.cjs +5 -4
  68. package/dist/contexts/enviveContext/enviveContext.js +6 -5
  69. package/dist/contexts/enviveContext/types.d.cts +1 -1
  70. package/dist/contexts/enviveContext/types.d.ts +1 -1
  71. package/dist/contexts/graphqlContext/graphqlContext.cjs +6 -7
  72. package/dist/contexts/graphqlContext/graphqlContext.js +2 -3
  73. package/dist/contexts/graphqlContext/mockV3Config.cjs +57 -61
  74. package/dist/contexts/graphqlContext/mockV3Config.js +14 -19
  75. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  76. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  77. package/dist/contexts/pageContext/mapping.cjs +9 -1
  78. package/dist/contexts/pageContext/mapping.js +9 -1
  79. package/dist/contexts/pageContext/pageContext.cjs +8 -3
  80. package/dist/contexts/pageContext/pageContext.d.cts +2 -1
  81. package/dist/contexts/pageContext/pageContext.d.ts +2 -1
  82. package/dist/contexts/pageContext/pageContext.js +8 -3
  83. package/dist/contexts/pageContext/types.d.cts +11 -3
  84. package/dist/contexts/pageContext/types.d.ts +11 -3
  85. package/dist/contexts/salesAgentContext/chatAPI.cjs +13 -5
  86. package/dist/contexts/salesAgentContext/chatAPI.d.cts +4 -3
  87. package/dist/contexts/salesAgentContext/chatAPI.d.ts +4 -3
  88. package/dist/contexts/salesAgentContext/chatAPI.js +13 -5
  89. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +7 -3
  90. package/dist/contexts/salesAgentContext/salesAgentContext.js +8 -4
  91. package/dist/contexts/salesAgentContext/salesAgentService.cjs +1 -1
  92. package/dist/contexts/salesAgentContext/salesAgentService.js +1 -1
  93. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  94. package/dist/contexts/searchContext/searchContext.js +1 -1
  95. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  96. package/dist/contexts/types.d.cts +1 -1
  97. package/dist/contexts/types.d.ts +1 -1
  98. package/dist/contexts/typesV3.cjs +1 -1
  99. package/dist/contexts/typesV3.d.cts +9 -4
  100. package/dist/contexts/typesV3.d.ts +11 -6
  101. package/dist/contexts/typesV3.js +1 -1
  102. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +2 -1
  103. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +2 -1
  104. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  105. package/dist/hooks/Search/useSearch.cjs +2 -2
  106. package/dist/hooks/Search/useSearch.js +2 -2
  107. package/dist/hooks/Search/useSearchInput.cjs +1 -1
  108. package/dist/hooks/Search/useSearchInput.js +1 -1
  109. package/dist/hooks/utils.d.cts +1 -1
  110. package/dist/services/amplitudeService/amplitudeService.cjs +41 -1
  111. package/dist/services/amplitudeService/amplitudeService.d.cts +2 -1
  112. package/dist/services/amplitudeService/amplitudeService.d.ts +2 -1
  113. package/dist/services/amplitudeService/amplitudeService.js +41 -1
  114. package/package.json +1 -1
  115. package/src/application/models/chatElementDisplayLocationV3.ts +2 -0
  116. package/src/application/models/variantInfo/variantInfo.ts +1 -1
  117. package/src/application/utils/widgetTextRequestToApiRequest.ts +2 -0
  118. package/src/atoms/chat/index.ts +1 -0
  119. package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +66 -0
  120. package/src/contexts/enviveContext/enviveContext.tsx +3 -1
  121. package/src/contexts/graphqlContext/mockV3Config.ts +4 -0
  122. package/src/contexts/pageContext/mapping.ts +16 -1
  123. package/src/contexts/pageContext/pageContext.tsx +12 -3
  124. package/src/contexts/pageContext/types.ts +16 -1
  125. package/src/contexts/salesAgentContext/chatAPI.ts +16 -4
  126. package/src/contexts/salesAgentContext/salesAgentContext.tsx +8 -3
  127. package/src/contexts/typesV3.ts +9 -2
  128. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -0
  129. package/src/services/amplitudeService/amplitudeService.ts +56 -0
  130. package/dist/_virtual/rolldown_runtime.js +0 -29
  131. package/dist/node_modules/classnames/index.cjs +0 -52
  132. package/dist/node_modules/classnames/index.js +0 -49
  133. package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.cjs +0 -2
  134. package/dist/packages/components-v3/dist/ChatHeader/ChatHeader.js +0 -4
  135. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.cjs +0 -16
  136. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.js +0 -17
  137. package/dist/packages/components-v3/dist/ChatHeader/components/Handle.cjs +0 -6
  138. package/dist/packages/components-v3/dist/ChatHeader/components/Handle.js +0 -8
  139. package/dist/packages/components-v3/dist/ChatHeader/components/Layout.cjs +0 -4
  140. package/dist/packages/components-v3/dist/ChatHeader/components/Layout.js +0 -6
  141. package/dist/packages/components-v3/dist/ChatHeader/components/Logo.cjs +0 -3
  142. package/dist/packages/components-v3/dist/ChatHeader/components/Logo.js +0 -5
  143. package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.cjs +0 -7
  144. package/dist/packages/components-v3/dist/ChatHeader/components/Toggle.js +0 -9
  145. package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.cjs +0 -6
  146. package/dist/packages/components-v3/dist/ChatHeader/components/ToggleItem.js +0 -8
  147. package/dist/packages/components-v3/dist/ChatHeader/components/index.cjs +0 -6
  148. package/dist/packages/components-v3/dist/ChatHeader/components/index.js +0 -8
  149. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +0 -22
  150. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +0 -23
  151. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.cjs +0 -58
  152. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.js +0 -59
  153. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +0 -8
  154. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.js +0 -9
  155. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.cjs +0 -1
  156. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleOptionProperties.js +0 -3
  157. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.cjs +0 -12
  158. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.js +0 -13
  159. package/dist/packages/components-v3/dist/ChatHeader/index.cjs +0 -2
  160. package/dist/packages/components-v3/dist/ChatHeader/index.js +0 -4
  161. package/dist/packages/components-v3/dist/ChatHeader/types/index.cjs +0 -11
  162. package/dist/packages/components-v3/dist/ChatHeader/types/index.js +0 -10
  163. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.cjs +0 -1
  164. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.js +0 -3
  165. package/dist/packages/components-v3/dist/Container/Container.cjs +0 -27
  166. package/dist/packages/components-v3/dist/Container/Container.js +0 -27
  167. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +0 -14
  168. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +0 -13
  169. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +0 -14
  170. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +0 -13
  171. package/dist/packages/components-v3/dist/Container/index.cjs +0 -1
  172. package/dist/packages/components-v3/dist/Container/index.js +0 -3
  173. package/dist/packages/components-v3/dist/DesignTokens/components/utils.cjs +0 -16
  174. package/dist/packages/components-v3/dist/DesignTokens/components/utils.js +0 -15
  175. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.cjs +0 -2
  176. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.js +0 -4
  177. package/dist/packages/components-v3/dist/FloatingButton/components/Button.cjs +0 -9
  178. package/dist/packages/components-v3/dist/FloatingButton/components/Button.js +0 -10
  179. package/dist/packages/components-v3/dist/FloatingButton/components/Container.cjs +0 -9
  180. package/dist/packages/components-v3/dist/FloatingButton/components/Container.js +0 -10
  181. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.cjs +0 -3
  182. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.js +0 -5
  183. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.cjs +0 -9
  184. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.js +0 -10
  185. package/dist/packages/components-v3/dist/FloatingButton/components/index.cjs +0 -4
  186. package/dist/packages/components-v3/dist/FloatingButton/components/index.js +0 -6
  187. package/dist/packages/components-v3/dist/FloatingButton/index.cjs +0 -2
  188. package/dist/packages/components-v3/dist/FloatingButton/index.js +0 -4
  189. package/dist/packages/components-v3/dist/FloatingButton/types/types.cjs +0 -17
  190. package/dist/packages/components-v3/dist/FloatingButton/types/types.js +0 -16
  191. package/dist/packages/components-v3/dist/Image/Image.cjs +0 -16
  192. package/dist/packages/components-v3/dist/Image/Image.js +0 -17
  193. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.cjs +0 -1
  194. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.js +0 -3
  195. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.cjs +0 -1
  196. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.js +0 -3
  197. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.cjs +0 -1
  198. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.js +0 -3
  199. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.cjs +0 -1
  200. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.js +0 -3
  201. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.cjs +0 -1
  202. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.js +0 -3
  203. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.cjs +0 -1
  204. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.js +0 -3
  205. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.cjs +0 -1
  206. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.js +0 -3
  207. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.cjs +0 -2
  208. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.js +0 -4
  209. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.cjs +0 -2
  210. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.js +0 -4
  211. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +0 -15
  212. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +0 -16
  213. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.cjs +0 -4
  214. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.js +0 -4
  215. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.cjs +0 -1
  216. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.js +0 -3
  217. package/dist/packages/components-v3/dist/ImageGallery/components/index.cjs +0 -4
  218. package/dist/packages/components-v3/dist/ImageGallery/components/index.js +0 -6
  219. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.cjs +0 -1
  220. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.js +0 -3
  221. package/dist/packages/components-v3/dist/ImageGallery/index.cjs +0 -2
  222. package/dist/packages/components-v3/dist/ImageGallery/index.js +0 -4
  223. package/dist/packages/components-v3/dist/ImageGallery/types/types.cjs +0 -13
  224. package/dist/packages/components-v3/dist/ImageGallery/types/types.js +0 -12
  225. package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +0 -48
  226. package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +0 -48
  227. package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +0 -11
  228. package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +0 -10
  229. package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +0 -20
  230. package/dist/packages/components-v3/dist/PromptButton/components/Label.js +0 -19
  231. package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +0 -40
  232. package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +0 -40
  233. package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +0 -13
  234. package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +0 -13
  235. package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +0 -16
  236. package/dist/packages/components-v3/dist/PromptButton/components/index.js +0 -16
  237. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.cjs +0 -18
  238. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.js +0 -18
  239. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +0 -13
  240. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +0 -12
  241. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.cjs +0 -18
  242. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.js +0 -18
  243. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.cjs +0 -32
  244. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.js +0 -32
  245. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +0 -16
  246. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +0 -16
  247. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.cjs +0 -19
  248. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.js +0 -19
  249. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.cjs +0 -29
  250. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.js +0 -29
  251. package/dist/packages/components-v3/dist/PromptButton/index.cjs +0 -2
  252. package/dist/packages/components-v3/dist/PromptButton/index.js +0 -4
  253. package/dist/packages/components-v3/dist/PromptButton/types/index.cjs +0 -13
  254. package/dist/packages/components-v3/dist/PromptButton/types/index.js +0 -12
  255. package/dist/packages/components-v3/dist/PromptButton/utils/functions.cjs +0 -10
  256. package/dist/packages/components-v3/dist/PromptButton/utils/functions.js +0 -10
  257. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.cjs +0 -12
  258. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.js +0 -14
  259. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.cjs +0 -9
  260. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.js +0 -10
  261. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.cjs +0 -11
  262. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.js +0 -12
  263. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.cjs +0 -4
  264. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.js +0 -6
  265. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.cjs +0 -4
  266. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.js +0 -6
  267. package/dist/packages/components-v3/dist/PromptCarousel/components/index.cjs +0 -3
  268. package/dist/packages/components-v3/dist/PromptCarousel/components/index.js +0 -5
  269. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.cjs +0 -5
  270. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.js +0 -7
  271. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.cjs +0 -1
  272. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.js +0 -3
  273. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.cjs +0 -3
  274. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.js +0 -5
  275. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.cjs +0 -1
  276. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.js +0 -3
  277. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.cjs +0 -1
  278. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +0 -3
  279. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.cjs +0 -1
  280. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.js +0 -3
  281. package/dist/packages/components-v3/dist/PromptCarousel/index.cjs +0 -2
  282. package/dist/packages/components-v3/dist/PromptCarousel/index.js +0 -4
  283. package/dist/packages/components-v3/dist/PromptCarousel/types/types.cjs +0 -19
  284. package/dist/packages/components-v3/dist/PromptCarousel/types/types.js +0 -17
  285. package/dist/packages/components-v3/dist/SocialProof/SocialProof.cjs +0 -10
  286. package/dist/packages/components-v3/dist/SocialProof/SocialProof.js +0 -12
  287. package/dist/packages/components-v3/dist/SocialProof/components/Headline.cjs +0 -53
  288. package/dist/packages/components-v3/dist/SocialProof/components/Headline.js +0 -54
  289. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.cjs +0 -5
  290. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.js +0 -7
  291. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.cjs +0 -6
  292. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.js +0 -8
  293. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.cjs +0 -16
  294. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.js +0 -17
  295. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.cjs +0 -8
  296. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.js +0 -10
  297. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.cjs +0 -1
  298. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.js +0 -3
  299. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.cjs +0 -8
  300. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.js +0 -10
  301. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.cjs +0 -3
  302. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.js +0 -5
  303. package/dist/packages/components-v3/dist/SocialProof/components/index.cjs +0 -8
  304. package/dist/packages/components-v3/dist/SocialProof/components/index.js +0 -10
  305. package/dist/packages/components-v3/dist/SocialProof/hooks/index.cjs +0 -1
  306. package/dist/packages/components-v3/dist/SocialProof/hooks/index.js +0 -3
  307. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.cjs +0 -1
  308. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.js +0 -3
  309. package/dist/packages/components-v3/dist/SocialProof/index.cjs +0 -4
  310. package/dist/packages/components-v3/dist/SocialProof/index.js +0 -6
  311. package/dist/packages/components-v3/dist/SocialProof/types/types.cjs +0 -11
  312. package/dist/packages/components-v3/dist/SocialProof/types/types.js +0 -10
  313. package/dist/packages/components-v3/dist/SocialProof/utils/functions.cjs +0 -1
  314. package/dist/packages/components-v3/dist/SocialProof/utils/functions.js +0 -3
  315. package/dist/packages/components-v3/dist/Stack/Stack.cjs +0 -36
  316. package/dist/packages/components-v3/dist/Stack/Stack.js +0 -36
  317. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.cjs +0 -27
  318. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.js +0 -26
  319. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.cjs +0 -20
  320. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.js +0 -19
  321. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.cjs +0 -19
  322. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.js +0 -18
  323. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.cjs +0 -16
  324. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.js +0 -15
  325. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.cjs +0 -21
  326. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.js +0 -20
  327. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.cjs +0 -38
  328. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.js +0 -38
  329. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.cjs +0 -13
  330. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.js +0 -12
  331. package/dist/packages/components-v3/dist/Stack/index.cjs +0 -1
  332. package/dist/packages/components-v3/dist/Stack/index.js +0 -3
  333. package/dist/packages/components-v3/dist/Stack/utils/constants.cjs +0 -42
  334. package/dist/packages/components-v3/dist/Stack/utils/constants.js +0 -41
  335. package/dist/packages/components-v3/dist/Title/Title.cjs +0 -11
  336. package/dist/packages/components-v3/dist/Title/Title.js +0 -12
  337. package/dist/packages/components-v3/dist/Title/components/Image.cjs +0 -2
  338. package/dist/packages/components-v3/dist/Title/components/Image.js +0 -4
  339. package/dist/packages/components-v3/dist/Title/components/Label.cjs +0 -3
  340. package/dist/packages/components-v3/dist/Title/components/Label.js +0 -5
  341. package/dist/packages/components-v3/dist/Title/components/Layout.cjs +0 -11
  342. package/dist/packages/components-v3/dist/Title/components/Layout.js +0 -12
  343. package/dist/packages/components-v3/dist/Title/components/index.cjs +0 -3
  344. package/dist/packages/components-v3/dist/Title/components/index.js +0 -5
  345. package/dist/packages/components-v3/dist/Title/index.cjs +0 -1
  346. package/dist/packages/components-v3/dist/Title/index.js +0 -3
  347. package/dist/packages/components-v3/dist/Tokens/index.cjs +0 -11
  348. package/dist/packages/components-v3/dist/Tokens/index.js +0 -13
  349. package/dist/packages/components-v3/dist/Typography/Typography.cjs +0 -43
  350. package/dist/packages/components-v3/dist/Typography/Typography.js +0 -43
  351. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +0 -31
  352. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +0 -30
  353. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +0 -20
  354. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +0 -19
  355. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +0 -21
  356. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +0 -20
  357. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +0 -13
  358. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +0 -12
  359. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +0 -22
  360. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +0 -21
  361. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +0 -62
  362. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +0 -61
  363. package/dist/packages/components-v3/dist/Typography/index.cjs +0 -2
  364. package/dist/packages/components-v3/dist/Typography/index.js +0 -4
  365. package/dist/packages/components-v3/dist/Typography/types/index.cjs +0 -47
  366. package/dist/packages/components-v3/dist/Typography/types/index.js +0 -44
  367. package/dist/packages/components-v3/dist/Typography/utils/utils.cjs +0 -12
  368. package/dist/packages/components-v3/dist/Typography/utils/utils.js +0 -10
  369. package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.cjs +0 -2
  370. package/dist/packages/components-v3/dist/WelcomeMessage/WelcomeMessage.js +0 -4
  371. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.cjs +0 -14
  372. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.js +0 -15
  373. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.cjs +0 -3
  374. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.js +0 -5
  375. package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.cjs +0 -3
  376. package/dist/packages/components-v3/dist/WelcomeMessage/components/Text.js +0 -5
  377. package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.cjs +0 -3
  378. package/dist/packages/components-v3/dist/WelcomeMessage/components/Title.js +0 -5
  379. package/dist/packages/components-v3/dist/WelcomeMessage/components/index.cjs +0 -4
  380. package/dist/packages/components-v3/dist/WelcomeMessage/components/index.js +0 -6
  381. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.cjs +0 -1
  382. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetContainerProperties.js +0 -3
  383. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.cjs +0 -1
  384. package/dist/packages/components-v3/dist/WelcomeMessage/hooks/useGetSparkleIconProperties.js +0 -3
  385. package/dist/packages/components-v3/dist/WelcomeMessage/index.cjs +0 -2
  386. package/dist/packages/components-v3/dist/WelcomeMessage/index.js +0 -4
  387. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.cjs +0 -14
  388. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.js +0 -14
  389. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.cjs +0 -2
  390. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.js +0 -4
  391. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.cjs +0 -14
  392. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.js +0 -15
  393. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.cjs +0 -3
  394. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.js +0 -5
  395. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.cjs +0 -7
  396. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.js +0 -9
  397. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.cjs +0 -10
  398. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.js +0 -11
  399. package/dist/packages/components-v3/dist/WidgetTextField/components/index.cjs +0 -4
  400. package/dist/packages/components-v3/dist/WidgetTextField/components/index.js +0 -6
  401. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +0 -1
  402. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.js +0 -3
  403. package/dist/packages/components-v3/dist/WidgetTextField/index.cjs +0 -1
  404. package/dist/packages/components-v3/dist/WidgetTextField/index.js +0 -3
  405. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.cjs +0 -12
  406. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.js +0 -13
  407. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +0 -1
  408. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +0 -3
  409. package/dist/packages/components-v3/dist/WidgetWrapper/index.cjs +0 -2
  410. package/dist/packages/components-v3/dist/WidgetWrapper/index.js +0 -4
  411. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.cjs +0 -13
  412. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.js +0 -12
  413. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.cjs +0 -8
  414. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.js +0 -10
  415. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.cjs +0 -26
  416. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.js +0 -25
  417. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.cjs +0 -16
  418. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.js +0 -17
  419. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.cjs +0 -25
  420. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.js +0 -23
  421. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.cjs +0 -51
  422. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.js +0 -51
  423. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.cjs +0 -64
  424. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.js +0 -65
  425. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.cjs +0 -18
  426. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.js +0 -16
  427. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.cjs +0 -25
  428. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.js +0 -25
  429. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.cjs +0 -37
  430. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.js +0 -38
  431. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.cjs +0 -17
  432. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.js +0 -18
  433. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.cjs +0 -15
  434. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.js +0 -16
  435. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.cjs +0 -31
  436. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.js +0 -32
  437. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/typography.cjs +0 -5
  438. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/typography.js +0 -7
  439. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.cjs +0 -7
  440. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.js +0 -6
  441. package/dist/packages/components-v3/dist/utils/CustomIcon.cjs +0 -2
  442. package/dist/packages/components-v3/dist/utils/CustomIcon.js +0 -4
  443. package/dist/packages/components-v3/dist/utils/resolveTheme.cjs +0 -13
  444. package/dist/packages/components-v3/dist/utils/resolveTheme.js +0 -13
  445. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.cjs +0 -1
  446. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.js +0 -3
  447. package/dist/packages/components-v3/dist/utils/useGetContentSize.cjs +0 -1
  448. package/dist/packages/components-v3/dist/utils/useGetContentSize.js +0 -3
  449. package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +0 -57
  450. package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +0 -56
  451. package/dist/packages/icons/dist/FourPointStar.cjs +0 -23
  452. package/dist/packages/icons/dist/FourPointStar.js +0 -23
  453. package/dist/packages/icons/dist/IconCloseRounded.cjs +0 -22
  454. package/dist/packages/icons/dist/IconCloseRounded.js +0 -22
  455. package/dist/packages/icons/dist/IconCloseSharp.cjs +0 -31
  456. package/dist/packages/icons/dist/IconCloseSharp.js +0 -31
  457. package/dist/packages/icons/dist/IconCloseTransparent.cjs +0 -24
  458. package/dist/packages/icons/dist/IconCloseTransparent.js +0 -24
  459. package/dist/packages/icons/dist/MagnifyingGlass.cjs +0 -8
  460. package/dist/packages/icons/dist/MagnifyingGlass.js +0 -9
  461. package/dist/packages/icons/dist/MagnifyingThin.cjs +0 -8
  462. package/dist/packages/icons/dist/MagnifyingThin.js +0 -9
  463. package/dist/packages/icons/dist/SendMinimalist.cjs +0 -8
  464. package/dist/packages/icons/dist/SendMinimalist.js +0 -9
  465. package/dist/packages/icons/dist/SendModern.cjs +0 -8
  466. package/dist/packages/icons/dist/SendModern.js +0 -9
  467. package/dist/packages/icons/dist/SendStandard.cjs +0 -8
  468. package/dist/packages/icons/dist/SendStandard.js +0 -9
  469. package/dist/packages/icons/dist/Sparkles.cjs +0 -8
  470. package/dist/packages/icons/dist/Sparkles.js +0 -9
  471. package/dist/packages/icons/dist/_virtual/rolldown_runtime.cjs +0 -28
  472. package/dist/packages/icons/dist/_virtual/rolldown_runtime.js +0 -26
  473. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs +0 -697
  474. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.js +0 -697
  475. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs +0 -44
  476. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +0 -44
  477. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.cjs +0 -1529
  478. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.js +0 -1529
  479. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.cjs +0 -330
  480. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.js +0 -330
  481. package/dist/packages/icons/dist/node_modules/react/index.cjs +0 -14
  482. package/dist/packages/icons/dist/node_modules/react/index.js +0 -14
  483. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.cjs +0 -14
  484. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.js +0 -14
@@ -1,6 +1,7 @@
1
1
  import { WidgetTypeV3 } from "../../contexts/typesV3.js";
2
2
  import { SpiffyEvent } from "../../events/event-types.js";
3
3
  import { EventsDispatcher } from "../../events/index.js";
4
+ import { ChatElementDisplayLocationV3 } from "../../application/models/chatElementDisplayLocationV3.js";
4
5
  import logger_default from "../../application/logging/logger.js";
5
6
  import { LocalStorageKeys } from "../../contexts/localStorageContext/localStorageContext.js";
6
7
  import "../../contexts/localStorageContext/index.js";
@@ -160,14 +161,53 @@ var AmplitudeService = class AmplitudeService {
160
161
  case WidgetTypeV3.SocialProofV3: return "embedded_widget";
161
162
  case WidgetTypeV3.TitledPromptCarouselV3:
162
163
  case WidgetTypeV3.PromptCarouselV3: return "suggestion_bar";
164
+ case WidgetTypeV3.ProductCardV3: return "image_prompt_card";
163
165
  default: return "unknown";
164
166
  }
165
167
  }
168
+ static mapTriggerLocationToChatComponent(triggerLocation) {
169
+ switch (triggerLocation) {
170
+ case ChatElementDisplayLocationV3.PRODUCT_CARD_PROMPT_BUTTON:
171
+ case ChatElementDisplayLocationV3.PRODUCT_CARD_TEXT_FIELD: return "prompt_card";
172
+ case ChatElementDisplayLocationV3.PROMPT_CAROUSEL:
173
+ case ChatElementDisplayLocationV3.TITLED_PROMPT_CAROUSEL: return "top_reviews_snippet";
174
+ case ChatElementDisplayLocationV3.TYPING_ANIMATION:
175
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_PRIMARY_BUTTON:
176
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_SECONDARY_BUTTON:
177
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_TEXT_FIELD:
178
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_PROMPT_BUTTON:
179
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_TEXT_FIELD:
180
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_PROMPT_BUTTON:
181
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_TEXT_FIELD: return "chat_preview";
182
+ case ChatElementDisplayLocationV3.FLOATING_CHAT_OVERLAY:
183
+ case ChatElementDisplayLocationV3.FLOATING_CHAT_CLOSE_BUTTON: return "in_chat";
184
+ default: return triggerLocation;
185
+ }
186
+ }
166
187
  static mapEventProps({ eventName, eventProps }) {
188
+ const messageMetadata = eventProps?.message_metadata ?? {};
189
+ const triggerLocation = messageMetadata !== null && typeof messageMetadata === "object" && "trigger_location" in messageMetadata ? messageMetadata.trigger_location : void 0;
190
+ if (eventName === SpiffyMetricsEventName.ChatComponentExpanded) {
191
+ const mappedTriggerLoccation = AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
192
+ return {
193
+ ...eventProps,
194
+ message_metadata: {
195
+ ...messageMetadata,
196
+ trigger_location: mappedTriggerLoccation,
197
+ full_trigger_location: triggerLocation
198
+ }
199
+ };
200
+ }
167
201
  if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
168
202
  const mappedWidgetType = AmplitudeService.mapWidgetTypeToChatComponent(eventProps?.widget_type);
203
+ const mappedTriggerLoccation = AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
169
204
  return {
170
205
  ...eventProps,
206
+ message_metadata: {
207
+ ...messageMetadata,
208
+ trigger_location: mappedTriggerLoccation,
209
+ full_trigger_location: triggerLocation
210
+ },
171
211
  chat_component: mappedWidgetType,
172
212
  "chat.component_visible": true
173
213
  };
@@ -227,4 +267,4 @@ var AmplitudeService = class AmplitudeService {
227
267
 
228
268
  //#endregion
229
269
  export { AmplitudeService, SpiffyMetricsEventName };
230
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcblxuZXhwb3J0IGVudW0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB7XG4gIEJ1bmRsZUxvYWRlZCA9ICdCdW5kbGUgTG9hZGVkJyxcbiAgRW52aXJvbm1lbnRJbml0aWFsaXplZCA9ICdFbnZpcm9ubWVudCBJbml0aWFsaXplZCcsXG4gIENoYXRMaXZlQWdlbnRCdG5DbGljayA9ICdDaGF0IExpdmUgQWdlbnQgQnRuIENsaWNrJyxcbiAgQ2hhdEZsb2F0aW5nQnV0dG9uVmlzaWJsZSA9ICdDaGF0IEZsb2F0aW5nIEJ1dHRvbiBWaXNpYmxlJyxcbiAgQ2hhdENvbXBvbmVudFZpc2libGUgPSAnQ2hhdCBDb21wb25lbnQgVmlzaWJsZScsXG4gIENoYXRDb21wb25lbnRFeHBhbmRlZCA9ICdDaGF0IENvbXBvbmVudCBFeHBhbmRlZCcsXG4gIENoYXRDb21wb25lbnRDb2xsYXBzZWQgPSAnQ2hhdCBDb21wb25lbnQgQ29sbGFwc2VkJyxcbiAgQ2hhdFVzZXJNZXNzYWdlSW5wdXQgPSAnQ2hhdCBVc2VyIE1lc3NhZ2UgSW5wdXQnLFxuICBDaGF0U3VnZ2VzdGlvbkNsaWNrZWQgPSAnQ2hhdCBTdWdnZXN0aW9uIENsaWNrZWQnLFxuICBDaGF0QXNzaXN0YW50UmVzcG9uc2UgPSAnQ2hhdCBBc3Npc3RhbnQgUmVzcG9uc2UnLFxuICBQcm9kdWN0Q2FyZENsaWNrZWQgPSAnUHJvZHVjdCBDYXJkIENsaWNrZWQnLFxuICBQcm9kdWN0UmV2aWV3Q2FyZENsaWNrZWQgPSAnUHJvZHVjdCBSZXZpZXcgQ2FyZCBDbGlja2VkJyxcbiAgQWRkVG9DYXJ0Q2xpY2tlZCA9ICdBZGQgVG8gQ2FydCBDbGlja2VkJyxcbiAgUHJvbXB0Q2FyZENsaWNrZWQgPSAnUHJvbXB0IENhcmQgQ2xpY2tlZCcsXG4gIFN1cHBvcnRlZEV2ZW50ID0gJ1N1cHBvcnRlZCBFdmVudCcsXG4gIFNlYXJjaEJhY2tUb1Jlc3BvbnNlQ2xpY2tlZCA9ICdTZWFyY2ggQmFjayB0byBSZXNwb25zZSBDbGlja2VkJyxcbiAgUGVyZm9ybWFuY2VNZXRyaWNzID0gJ1BlcmZvcm1hbmNlIE1ldHJpY3MnLFxuICBTZWFyY2hCYXJDbGlja2VkID0gJ1NlYXJjaCBCYXIgQ2xpY2tlZCcsXG4gIE9yZGVyTG9va3VwU3RhcnRlZCA9ICdPcmRlciBMb29rdXAgU3RhcnRlZCcsXG4gIE9yZGVyTG9va3VwRm9ybVN1Ym1pdHRlZCA9ICdPcmRlciBMb29rdXAgRm9ybSBTdWJtaXR0ZWQnLFxuICBTZWFyY2hDb21wb25lbnRWaXNpYmxlID0gJ1NlYXJjaCBDb21wb25lbnQgVmlzaWJsZScsXG4gIFNlYXJjaFplcm9TdGF0ZVN1Z2dlc3Rpb25DbGlja2VkID0gJ1NlYXJjaCBaZXJvIFN0YXRlIFN1Z2dlc3Rpb24gQ2xpY2tlZCcsIC8vIFRoaXMgaXMgdGhlIHNjcm9sbGluZyBsaXN0IG9mIHN1Z2dlc3Rpb24gYnV0dG9ucyBpbiBnbG9iYWwgc2VhcmNoXG4gIFNlYXJjaElucHV0U3RhcnRlZCA9ICdTZWFyY2ggSW5wdXQgU3RhcnRlZCcsXG4gIFNlYXJjaFF1ZXJ5U3VibWl0dGVkID0gJ1NlYXJjaCBRdWVyeSBTdWJtaXR0ZWQnLFxuICAvLyBTZWFyY2hBdXRvY29tcGxldGVWaWV3ZWQgPSAnU2VhcmNoIEF1dG9jb21wbGV0ZSBWaWV3ZWQnLCAvLyBUT0RPOiBhZGQgdGhpcyB3aGVuIGF1dG9jb21wbGV0ZSBpcyBhZGRlZFxuICAvLyBTZWFyY2hBdXRvY29tcGxldGVDbGlja2VkID0gJ1NlYXJjaCBBdXRvY29tcGxldGUgQ2xpY2tlZCcsIC8vIFRPRE86IGFkZCB0aGlzIHdoZW4gYXV0b2NvbXBsZXRlIGlzIGFkZGVkXG4gIFNlYXJjaFJlc3VsdHNWaWV3ZWQgPSAnU2VhcmNoIFJlc3VsdHMgVmlld2VkJyxcbiAgU2VhcmNoVGltZVRvRmlyc3RDbGljayA9ICdTZWFyY2ggVGltZSB0byBGaXJzdCBDbGljaycsXG4gIFNlYXJjaFplcm9SZXN1bHRzUmF0ZSA9ICdTZWFyY2ggWmVybyBSZXN1bHRzIFJhdGUnLFxuICBTZWFyY2hGaWx0ZXJDbGlja2VkID0gJ1NlYXJjaCBGaWx0ZXIgQ2xpY2tlZCcsXG4gIFNlYXJjaFNvcnRDbGlja2VkID0gJ1NlYXJjaCBTb3J0IENsaWNrZWQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIG9yZ0dhQ29uZmlnPzogdW5rbm93bjtcbiAgc2hvdzogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IHtcbiAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIC8vIFRPRE86IG9yZ19pZCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGluIEVudml2ZUNvbmZpZy4gTmVlZCB0byBmaW5kIGEgbmV3IHNvdXJjZSBvciBkZXJpdmUgaXQuXG4gICAgICAvLyBvcmdfaWQ6IG9yZ0NvbmZpZz8ub3JnPy5vcmc/LmlkLFxuICAgICAgYXBwX2lkOiAnY29tbWVyY2UtY2hhdC1yZWFjdC1jb21wb25lbnQnLFxuICAgICAgY2hhdF9pZDogdGhpcy5nZXRMb2NhbFN0b3JhZ2VJdGVtKExvY2FsU3RvcmFnZUtleXMuQ2hhdElkKSxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgIGFwcF9zb3VyY2U6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICBvcmdfaWQ6IHRoaXMuY29uZmlnLm9yZ0lkLFxuICAgICAgJ29yZy5zaG9ydF9uYW1lJzogdGhpcy5jb25maWcub3JnU2hvcnROYW1lLFxuICAgICAgJ3VzZXIuaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnY2RwLnVzZXJfaWQnOiBudWxsLFxuICAgICAgJ2NkcC5wcm92aWRlcic6IG51bGwsXG4gICAgICAnZXZlbnQuc291cmNlJzogJ3dlYi1icm93c2VyJyxcbiAgICAgICdldmVudC50eXBlJzogJ3VzZXItYWN0aXZpdHknLFxuICAgICAgJ2V2ZW50LmlkJzogbnVsbCxcbiAgICAgICdldmVudC5jaGFubmVsJzogJ3dlYicsXG4gICAgICAnZXZlbnQudGltZXN0YW1wJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgcHJpdmF0ZSBldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICBjb25zdCBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQgPSBjcmVhdGVJbnN0YW5jZSgpO1xuXG4gICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuaW5pdCh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksIHRoaXMuY29uZmlnLnVzZXJJZCwge1xuICAgICAgICBzZXJ2ZXJab25lOiB0aGlzLmNvbmZpZy5kYXRhUmVzaWRlbmN5IGFzIFNlcnZlclpvbmVUeXBlLFxuICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgcGFnZVZpZXdzOiB7XG4gICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvbnM6IGZhbHNlLFxuICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgIGZpbGVEb3dubG9hZHM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCA9IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudCh3aWRnZXRUeXBlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkZsb2F0aW5nQnV0dG9uVjM6XG4gICAgICAgIHJldHVybiAnZmxvYXRpbmdfYnV0dG9uJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBhc3luYyB0cmFja0V2ZW50KHtcbiAgICBldmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcyxcbiAgICBldmVudEdyb3VwcyxcbiAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcblxuICAgICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgICBMb2dnZXIubG9nV2FybignYW1wbGl0dWRlIGNsaWVudCB1bmRlZmluZWQnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcHBlZEV2ZW50UHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfSk7XG5cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShldmVudERhdGEpO1xuICAgICAgLy8gY2FsY3VsYXRlIGEgaGFzaCBvZiB0aGUgZXZlbnQgcHJvcGVydGllcyB0byB1c2UgYXMgdGhlIGluc2VydF9pZCBzbyB0aGF0IGR1cGxpY2F0ZSBldmVudHNcbiAgICAgIC8vIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgYnkgQW1wbGl0dWRlXG4gICAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgICAgY29uc3QgY3VycmVudEluc2VydElkID0gaGFzaEFycmF5Lm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgICBMb2dnZXIubG9nRGVidWcoYGFtcGxpdHVkZSB0cmFja2luZyAke2RlY29yYXRlZEV2ZW50TmFtZX1gLCBudWxsLCB7XG4gICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgcHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQudHJhY2soXG4gICAgICAgIGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICAgIC4uLihtYXBwZWRFdmVudFByb3BzXG4gICAgICAgICAgICA/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgbWFwcGVkRXZlbnRQcm9wcylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgaW5zZXJ0X2lkOiBjdXJyZW50SW5zZXJ0SWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiB0aGlzLmNvbmZpZy5vcmdHYUNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBBZGQgaW4gd2luZG93RGF0YUxheWVyU2VydmljZSBvciBjb250ZXh0IGFsdGVybmF0aXZlIGFuZCBob29rIGl0IHVwIGhlcmVcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWFBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJ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
270
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMnO1xuXG5leHBvcnQgZW51bSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHtcbiAgQnVuZGxlTG9hZGVkID0gJ0J1bmRsZSBMb2FkZWQnLFxuICBFbnZpcm9ubWVudEluaXRpYWxpemVkID0gJ0Vudmlyb25tZW50IEluaXRpYWxpemVkJyxcbiAgQ2hhdExpdmVBZ2VudEJ0bkNsaWNrID0gJ0NoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2snLFxuICBDaGF0RmxvYXRpbmdCdXR0b25WaXNpYmxlID0gJ0NoYXQgRmxvYXRpbmcgQnV0dG9uIFZpc2libGUnLFxuICBDaGF0Q29tcG9uZW50VmlzaWJsZSA9ICdDaGF0IENvbXBvbmVudCBWaXNpYmxlJyxcbiAgQ2hhdENvbXBvbmVudEV4cGFuZGVkID0gJ0NoYXQgQ29tcG9uZW50IEV4cGFuZGVkJyxcbiAgQ2hhdENvbXBvbmVudENvbGxhcHNlZCA9ICdDaGF0IENvbXBvbmVudCBDb2xsYXBzZWQnLFxuICBDaGF0VXNlck1lc3NhZ2VJbnB1dCA9ICdDaGF0IFVzZXIgTWVzc2FnZSBJbnB1dCcsXG4gIENoYXRTdWdnZXN0aW9uQ2xpY2tlZCA9ICdDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZCcsXG4gIENoYXRBc3Npc3RhbnRSZXNwb25zZSA9ICdDaGF0IEFzc2lzdGFudCBSZXNwb25zZScsXG4gIFByb2R1Y3RDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IENhcmQgQ2xpY2tlZCcsXG4gIFByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZCA9ICdQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWQnLFxuICBBZGRUb0NhcnRDbGlja2VkID0gJ0FkZCBUbyBDYXJ0IENsaWNrZWQnLFxuICBQcm9tcHRDYXJkQ2xpY2tlZCA9ICdQcm9tcHQgQ2FyZCBDbGlja2VkJyxcbiAgU3VwcG9ydGVkRXZlbnQgPSAnU3VwcG9ydGVkIEV2ZW50JyxcbiAgU2VhcmNoQmFja1RvUmVzcG9uc2VDbGlja2VkID0gJ1NlYXJjaCBCYWNrIHRvIFJlc3BvbnNlIENsaWNrZWQnLFxuICBQZXJmb3JtYW5jZU1ldHJpY3MgPSAnUGVyZm9ybWFuY2UgTWV0cmljcycsXG4gIFNlYXJjaEJhckNsaWNrZWQgPSAnU2VhcmNoIEJhciBDbGlja2VkJyxcbiAgT3JkZXJMb29rdXBTdGFydGVkID0gJ09yZGVyIExvb2t1cCBTdGFydGVkJyxcbiAgT3JkZXJMb29rdXBGb3JtU3VibWl0dGVkID0gJ09yZGVyIExvb2t1cCBGb3JtIFN1Ym1pdHRlZCcsXG4gIFNlYXJjaENvbXBvbmVudFZpc2libGUgPSAnU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlJyxcbiAgU2VhcmNoWmVyb1N0YXRlU3VnZ2VzdGlvbkNsaWNrZWQgPSAnU2VhcmNoIFplcm8gU3RhdGUgU3VnZ2VzdGlvbiBDbGlja2VkJywgLy8gVGhpcyBpcyB0aGUgc2Nyb2xsaW5nIGxpc3Qgb2Ygc3VnZ2VzdGlvbiBidXR0b25zIGluIGdsb2JhbCBzZWFyY2hcbiAgU2VhcmNoSW5wdXRTdGFydGVkID0gJ1NlYXJjaCBJbnB1dCBTdGFydGVkJyxcbiAgU2VhcmNoUXVlcnlTdWJtaXR0ZWQgPSAnU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZCcsXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZVZpZXdlZCA9ICdTZWFyY2ggQXV0b2NvbXBsZXRlIFZpZXdlZCcsIC8vIFRPRE86IGFkZCB0aGlzIHdoZW4gYXV0b2NvbXBsZXRlIGlzIGFkZGVkXG4gIC8vIFNlYXJjaEF1dG9jb21wbGV0ZUNsaWNrZWQgPSAnU2VhcmNoIEF1dG9jb21wbGV0ZSBDbGlja2VkJywgLy8gVE9ETzogYWRkIHRoaXMgd2hlbiBhdXRvY29tcGxldGUgaXMgYWRkZWRcbiAgU2VhcmNoUmVzdWx0c1ZpZXdlZCA9ICdTZWFyY2ggUmVzdWx0cyBWaWV3ZWQnLFxuICBTZWFyY2hUaW1lVG9GaXJzdENsaWNrID0gJ1NlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrJyxcbiAgU2VhcmNoWmVyb1Jlc3VsdHNSYXRlID0gJ1NlYXJjaCBaZXJvIFJlc3VsdHMgUmF0ZScsXG4gIFNlYXJjaEZpbHRlckNsaWNrZWQgPSAnU2VhcmNoIEZpbHRlciBDbGlja2VkJyxcbiAgU2VhcmNoU29ydENsaWNrZWQgPSAnU2VhcmNoIFNvcnQgQ2xpY2tlZCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZTtcbiAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gIGVudjogc3RyaW5nO1xuICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgb3JnR2FDb25maWc/OiB1bmtub3duO1xuICBzaG93OiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xufVxuXG5leHBvcnQgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gIHByaXZhdGUgYW1wbGl0dWRlQ2xpZW50OiBCcm93c2VyQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1cHBsZW1lbnRhbERlZmF1bHRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IHt9OyAvLyBObyBkaXJlY3QgZXF1aXZhbGVudCBmb3IgZXhwZXJpbWVudHMgaW4gRW52aXZlQ29uZmlnIHlldFxuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0ge1xuICAgICAgLi4uZ2F0ZXNQcm9wcyxcbiAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyxcbiAgICAgIC4uLnRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzLFxuICAgICAgLy8gVE9ETzogb3JnX2lkIGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgaW4gRW52aXZlQ29uZmlnLiBOZWVkIHRvIGZpbmQgYSBuZXcgc291cmNlIG9yIGRlcml2ZSBpdC5cbiAgICAgIC8vIG9yZ19pZDogb3JnQ29uZmlnPy5vcmc/Lm9yZz8uaWQsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKCksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBMb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5hZGQodGhpcy5nZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpKTtcbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgIHRyYWNraW5nT3B0aW9uczoge1xuICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b2NhcHR1cmU6IHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgIHRyYWNrSGlzdG9yeUNoYW5nZXM6ICdwYXRoT25seScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgZm9ybUludGVyYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlNvY2lhbFByb29mVjM6XG4gICAgICAgIHJldHVybiAnZW1iZWRkZWRfd2lkZ2V0JztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgICByZXR1cm4gJ3N1Z2dlc3Rpb25fYmFyJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjM6XG4gICAgICAgIHJldHVybiAnaW1hZ2VfcHJvbXB0X2NhcmQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0cmlnZ2VyTG9jYXRpb24pIHtcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdwcm9tcHRfY2FyZCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRJVExFRF9QUk9NUFRfQ0FST1VTRUw6XG4gICAgICAgIHJldHVybiAndG9wX3Jldmlld3Nfc25pcHBldCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVFlQSU5HX0FOSU1BVElPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfUFJJTUFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1NFQ09OREFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ2NoYXRfcHJldmlldyc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9PVkVSTEFZOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfQ0xPU0VfQlVUVE9OOlxuICAgICAgICByZXR1cm4gJ2luX2NoYXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJMb2NhdGlvbiBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWFwIHRoZSBldmVudCBwcm9wcyB0byB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRoZSBsZWdhY3kgYW1wbGl0dWRlIGV2ZW50c1xuICBzdGF0aWMgbWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9OiBUcmFja0V2ZW50UGFyYW1zKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IGV2ZW50UHJvcHM/Lm1lc3NhZ2VfbWV0YWRhdGEgPz8ge307XG4gICAgY29uc3QgdHJpZ2dlckxvY2F0aW9uID1cbiAgICAgIG1lc3NhZ2VNZXRhZGF0YSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VNZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnU3VibWl0dGluZyBldmVudCcsIGV2ZW50TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29yYXRlZEV2ZW50TmFtZSA9IGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuXG4gICAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICAgIExvZ2dlci5sb2dXYXJuKCdhbXBsaXR1ZGUgY2xpZW50IHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwcGVkRXZlbnRQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UubWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9KTtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGV2ZW50RGF0YSk7XG4gICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgLy8gYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBieSBBbXBsaXR1ZGVcbiAgICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICBjb25zdCBjdXJyZW50SW5zZXJ0SWQgPSBoYXNoQXJyYXkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICBwcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcygpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgICAgLi4uKG1hcHBlZEV2ZW50UHJvcHNcbiAgICAgICAgICAgID8gdGhpcy5ldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoZXZlbnROYW1lLCBtYXBwZWRFdmVudFByb3BzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIHRoaXMuY29uZmlnLm9yZ0dhQ29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBpbiB3aW5kb3dEYXRhTGF5ZXJTZXJ2aWNlIG9yIGNvbnRleHQgYWx0ZXJuYXRpdmUgYW5kIGhvb2sgaXQgdXAgaGVyZVxuICAgICAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIEdBIHRyYWNraW5nJywgZGVjb3JhdGVkRXZlbnROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kYXRhTGF5ZXIpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh3aW5kb3cuZGF0YUxheWVyIGFzIGFueVtdKS5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFByb3BzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIHRyYWNraW5nIGV2ZW50JywgZXJyLCB7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGF0IHN1cHBsZW1lbnRhbCBkZWZhdWx0IHByb3BzIGFyZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgcHJvcHNcbiAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzID0gcHJvcHM7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWNBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJO0FBRTdDLE1BQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUMxQyxRQUFPLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFFekMsU0FBTzs7Q0FHVCxBQUFRLDBCQUFtRDtFQUN6RCxNQUFNLGVBQWUsT0FBTyxRQUFRLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLENBQUM7RUFDckYsTUFBTSxhQUNKLGFBQWEsU0FBUyxJQUNsQixhQUFhLFFBQWlDLEtBQUssQ0FBQyxNQUFNLFdBQVc7QUFDbkUsT0FBSSxRQUFRLFNBQVMsS0FDbkIsUUFBTztJQUFFLEdBQUc7S0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.8",
3
+ "version": "0.3.10",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -15,6 +15,8 @@ export enum ChatElementDisplayLocationV3 {
15
15
  FLOATING_BUTTON = 'floating_button',
16
16
  FLOATING_CHAT_OVERLAY = 'floating_chat_overlay',
17
17
  FLOATING_CHAT_CLOSE_BUTTON = 'floating_chat_close_button',
18
+ FLOATING_CHAT_PROMPT_BUTTON = 'floating_chat_prompt_button',
18
19
  PRODUCT_CARD_PROMPT_BUTTON = 'product_card_prompt_button',
19
20
  PRODUCT_CARD_TEXT_FIELD = 'product_card_text_field',
21
+ WINDOW_API_CALL = 'window_api_call',
20
22
  }
@@ -6,7 +6,7 @@ export enum VariantTypeEnum {
6
6
  Pdp = 'pdp',
7
7
  Plp = 'plp',
8
8
  PageVisit = 'page_visit',
9
- Home = 'home',
9
+ Home = 'homepage',
10
10
  Search = 'search',
11
11
  Other = 'other',
12
12
  }
@@ -29,6 +29,8 @@ export const coreWidgetTypeToApiWidgetType = (coreWidgetType: WidgetTypeV3): Wid
29
29
  return WidgetType.FloatingChatV3;
30
30
  case WidgetTypeV3.FloatingButtonV3:
31
31
  return WidgetType.FloatingButtonV3;
32
+ case WidgetTypeV3.PromptButtonCarouselWithImageV3:
33
+ return WidgetType.SingleImagePromptV3;
32
34
  default:
33
35
  throw new Error(`Unsupported widget type: ${coreWidgetType}`);
34
36
  }
@@ -19,6 +19,7 @@ export * from './performanceMetrics';
19
19
  export * from './form';
20
20
  export * from './suggestions';
21
21
  export * from './lastMessage';
22
+ export * from './messageQueue';
22
23
  export * from './renderedWidgetRefs';
23
24
 
24
25
  export const chatAtom = atom(get => ({
@@ -0,0 +1,66 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { ChatElementDisplayLocationV3 } from 'src/application/models/chatElementDisplayLocationV3';
3
+ import Logger from 'src/application/logging/logger';
4
+ import { useEnviveConfig } from 'src/contexts/enviveConfigContext/enviveConfigContext';
5
+ import { useSalesAgent } from 'src/contexts/salesAgentContext/salesAgentContext';
6
+ import { useChatToggle } from 'src/hooks/ChatToggle';
7
+
8
+ const attachedPrefixes = new Set<string>();
9
+
10
+ export const WindowChatToggleBinder = () => {
11
+ const triggerLocation = ChatElementDisplayLocationV3.WINDOW_API_CALL;
12
+ const hook = useChatToggle();
13
+ const { onTypedMessageSubmitted } = useSalesAgent();
14
+ const { identifyingPrefix } = useEnviveConfig();
15
+
16
+ const openChatRef = useRef<(triggerId?: string) => void>(() => {});
17
+ const closeChatRef = useRef<(triggerId?: string) => void>(() => {});
18
+ const toggleChatRef = useRef<(triggerId?: string) => void>(() => {});
19
+ const isOpenRef = useRef<boolean>(hook.isOpen);
20
+ const openChatWithPromptRef = useRef<(prompt: string, triggerId?: string) => void>(() => {});
21
+
22
+ useEffect(() => {
23
+ openChatRef.current = (triggerId?: string) => hook.openChat(triggerLocation, triggerId);
24
+ closeChatRef.current = (triggerId?: string) => hook.closeChat(triggerLocation, triggerId);
25
+ toggleChatRef.current = (triggerId?: string) => hook.toggle(triggerLocation, triggerId);
26
+ isOpenRef.current = hook.isOpen;
27
+ openChatWithPromptRef.current = (prompt: string, triggerId?: string) => {
28
+ onTypedMessageSubmitted({ query: prompt, userTyped: false });
29
+ hook.openChat(triggerLocation, triggerId);
30
+ };
31
+ }, [hook, onTypedMessageSubmitted, triggerLocation]);
32
+
33
+ useEffect(() => {
34
+ if (!identifyingPrefix || attachedPrefixes.has(identifyingPrefix)) return;
35
+ try {
36
+ const win = window as unknown as Window & Record<string, unknown>;
37
+ if (!win[identifyingPrefix]) {
38
+ win[identifyingPrefix] = {} as Record<string, unknown>;
39
+ }
40
+ const api = win[identifyingPrefix] as Record<string, unknown>;
41
+ api.openChat = (triggerId?: string) => openChatRef.current?.(triggerId);
42
+ api.closeChat = (triggerId?: string) => closeChatRef.current?.(triggerId);
43
+ api.toggleChat = (triggerId?: string) => toggleChatRef.current?.(triggerId);
44
+ api.getChatIsOpen = () => !!isOpenRef.current;
45
+ api.openChatWithPrompt = (prompt: string, triggerId?: string) =>
46
+ openChatWithPromptRef.current?.(prompt, triggerId);
47
+
48
+ attachedPrefixes.add(identifyingPrefix);
49
+
50
+ // Always expose the same API at window["spiffy"] so both work (e.g. injection-bundle + spiffy)
51
+ const spiffyAlias = 'spiffy';
52
+ if (!attachedPrefixes.has(spiffyAlias)) {
53
+ win[spiffyAlias] = api;
54
+ attachedPrefixes.add(spiffyAlias);
55
+ }
56
+
57
+ Logger.logDebug(
58
+ `[envive-ai] Chat toggle attached at window["${identifyingPrefix}"] and window["${spiffyAlias}"]`,
59
+ );
60
+ } catch (e) {
61
+ Logger.logError('[envive-ai] Failed to attach Chat toggle functions', e);
62
+ }
63
+ }, [identifyingPrefix]);
64
+
65
+ return null;
66
+ };
@@ -9,7 +9,7 @@ import { AmplitudeProvider } from '../amplitudeContext';
9
9
  import { EnviveConfigProvider } from '../enviveConfigContext';
10
10
  import { EnviveCssProvider } from '../enviveCssContext';
11
11
  import { FeatureFlagService, FeatureFlagServiceProvider } from '../featureFlagServiceContext';
12
- import { GraphQlConfigValues, GraphQLProvider } from '../graphqlContext';
12
+ import { GraphQLProvider, GraphQlConfigValues } from '../graphqlContext';
13
13
  import { LocalStorageProvider } from '../localStorageContext';
14
14
  import { NewOrgConfigProvider } from '../newOrgConfigContext';
15
15
  import { UserIdentityProvider } from '../userIdentityContext';
@@ -21,6 +21,7 @@ import { HardcopyProvider } from '../hardcopyContext';
21
21
  import { WidgetConfigProvider } from '../widgetConfigContext';
22
22
  import { PageProvider } from '../pageContext';
23
23
  import { UiConfigProvider } from '../uiConfigContext';
24
+ import { WindowChatToggleBinder } from './WindowChatToggleBinder';
24
25
 
25
26
  const EnviveContext = createContext<null>(null);
26
27
 
@@ -183,6 +184,7 @@ export const EnviveProvider: React.FC<EnviveProviderProps> = ({
183
184
  <HardcopyProvider>
184
185
  <EnviveCssProvider>
185
186
  <SearchAgentWrapper enabledAgents={enabledAgents}>
187
+ <WindowChatToggleBinder />
186
188
  <SalesAgentWrapper
187
189
  enabledAgents={enabledAgents}
188
190
  previewMode={previewMode}
@@ -139,6 +139,10 @@ export const mockV3FrontendConfig: FrontendConfigV3 = {
139
139
  enabled: false,
140
140
  suppressMerchantButton: false,
141
141
  },
142
+ singlePageApplicationSettings: {
143
+ enabled: false,
144
+ refreshInterval: 1000,
145
+ },
142
146
  },
143
147
  pageVariants: [],
144
148
  mountingConfigs: {},
@@ -15,7 +15,7 @@ import { isApiSearchAttributes } from 'src/application/models/guards/api/isApiSe
15
15
  import { isApiSuggestionClickedAttributes } from 'src/application/models/guards/api/isApiSuggestionClickedEventAttributes';
16
16
  import { isApiFormSubmittedResponseAttributes } from 'src/application/models/guards/api/isApiFormSubmittedResponseAttributes';
17
17
 
18
- import { PageVariantInfo, VisitPageVariantInfo } from './types';
18
+ import { HomeVariantInfo, OtherVariantInfo, PageVariantInfo, VisitPageVariantInfo } from './types';
19
19
 
20
20
  export const mapUrlResolverResponseToVariantInfo = (
21
21
  url: string,
@@ -51,6 +51,21 @@ export const mapUrlResolverResponseToVariantInfo = (
51
51
  url,
52
52
  } as VisitPageVariantInfo;
53
53
  }
54
+
55
+ if (response.variant_type === VariantTypeEnum.Home) {
56
+ return {
57
+ variantType: VariantTypeEnum.Home,
58
+ url,
59
+ } as HomeVariantInfo;
60
+ }
61
+
62
+ if (response.variant_type === VariantTypeEnum.Other) {
63
+ return {
64
+ variantType: VariantTypeEnum.Other,
65
+ url,
66
+ } as OtherVariantInfo;
67
+ }
68
+
54
69
  throw new Error('Invalid variant type');
55
70
  };
56
71
 
@@ -22,7 +22,12 @@ import { mapApiUserEventToUserEvent, mapUrlResolverResponseToVariantInfo } from
22
22
  import { PageDetails } from './types';
23
23
 
24
24
  const PageContext = createContext<
25
- (PageDetails & { isLoading: boolean; isSupported: boolean }) | undefined
25
+ | (PageDetails & {
26
+ isLoading: boolean;
27
+ isSupported: boolean;
28
+ setPageUrl: (url: string) => void;
29
+ })
30
+ | undefined
26
31
  >(undefined);
27
32
 
28
33
  export const PageProvider: React.FC<{
@@ -36,7 +41,6 @@ export const PageProvider: React.FC<{
36
41
  const [userEvent, setUserEvent] = useAtom(pageUserEventAtom);
37
42
  const [isSupported, setIsSupported] = useState(false);
38
43
  useEffect(() => {
39
- // TODO: Add support for SPA's and other changes to the URL to ensure that the pageUrl is set correctly
40
44
  setPageUrl(window.location.href);
41
45
  }, []);
42
46
 
@@ -109,6 +113,10 @@ export const PageProvider: React.FC<{
109
113
  previewMode,
110
114
  ]);
111
115
 
116
+ const setPageUrlStable = useCallback((url: string) => {
117
+ setPageUrl(url);
118
+ }, []);
119
+
112
120
  const value = useMemo(
113
121
  () => ({
114
122
  pageUrl,
@@ -116,8 +124,9 @@ export const PageProvider: React.FC<{
116
124
  userEvent,
117
125
  isLoading,
118
126
  isSupported,
127
+ setPageUrl: setPageUrlStable,
119
128
  }),
120
- [pageUrl, userEvent, variantInfo, isLoading, isSupported],
129
+ [pageUrl, userEvent, variantInfo, isLoading, isSupported, setPageUrlStable],
121
130
  );
122
131
 
123
132
  return <PageContext.Provider value={value}>{children}</PageContext.Provider>;
@@ -21,7 +21,22 @@ export type VisitPageVariantInfo = {
21
21
  url: string;
22
22
  };
23
23
 
24
- export type PageVariantInfo = PDPPageVariantInfo | PLPPageVariantInfo | VisitPageVariantInfo;
24
+ export type HomeVariantInfo = {
25
+ variantType: VariantTypeEnum.Home;
26
+ url: string;
27
+ };
28
+
29
+ export type OtherVariantInfo = {
30
+ variantType: VariantTypeEnum.Other;
31
+ url: string;
32
+ };
33
+
34
+ export type PageVariantInfo =
35
+ | PDPPageVariantInfo
36
+ | PLPPageVariantInfo
37
+ | VisitPageVariantInfo
38
+ | HomeVariantInfo
39
+ | OtherVariantInfo;
25
40
 
26
41
  export interface PageDetails {
27
42
  pageUrl: string | undefined;
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { PageVisitCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
4
4
  import {
5
+ ChatElementDisplayLocationV3,
5
6
  FormSubmittedAttributes,
6
7
  MessageRole,
7
8
  MessageType,
@@ -18,7 +19,10 @@ import { SpiffyMetricsEventName, useAmplitude } from '../amplitudeContext';
18
19
  export interface SalesAgentChatAPI {
19
20
  logPageVisit: ({ pageVisitCategory }: { pageVisitCategory: PageVisitCategory }) => void;
20
21
  logUserEvent: (event: UserEvent) => void;
21
- onSuggestionClicked: (suggestion: Suggestion) => void;
22
+ onSuggestionClicked: (
23
+ suggestion: Suggestion,
24
+ displayLocation: ChatElementDisplayLocationV3,
25
+ ) => void;
22
26
  onTypedMessageSubmitted: ({ query, userTyped }: { query: string; userTyped: boolean }) => void;
23
27
  onFormResponseSubmitted: (formResponse: FormSubmittedAttributes) => void;
24
28
  }
@@ -54,12 +58,20 @@ export const useSalesAgentChatAPI = () => {
54
58
  [queueUserEvent],
55
59
  );
56
60
  const onSuggestionClicked = useCallback(
57
- (suggestion: Suggestion) => {
61
+ (suggestion: Suggestion, displayLocation: ChatElementDisplayLocationV3) => {
58
62
  trackEvent({
59
63
  eventName: SpiffyMetricsEventName.ChatSuggestionClicked,
60
64
  eventProps: {
61
- suggestionId: suggestion.id,
62
- content: suggestion.content,
65
+ message_id: suggestion.id,
66
+ message_role: MessageRole.User,
67
+ message_type: MessageType.SuggestionClicked,
68
+ message_metadata: {
69
+ content: suggestion.content,
70
+ created_at: suggestion.createdAt,
71
+ category: suggestion.category,
72
+ is_answer: suggestion.isAnswer,
73
+ display_location: displayLocation,
74
+ },
63
75
  },
64
76
  });
65
77
  const event: UserEvent = {
@@ -1,5 +1,5 @@
1
1
  import { useAtom, useAtomValue, useSetAtom } from 'jotai';
2
- import { ReactNode, createContext, useCallback, useEffect, useMemo } from 'react';
2
+ import { ReactNode, createContext, useCallback, useEffect, useMemo, useRef } from 'react';
3
3
  import { UserEventCategory } from '@spiffy-ai/commerce-api-client';
4
4
  import Logger from 'src/application/logging/logger';
5
5
  import { Message, MessageRole, MessageType } from 'src/application/models/message';
@@ -68,6 +68,8 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
68
68
  const { getStreamingResponses, createResponsePayload, getSuggestions, hydrateMessages } =
69
69
  useSalesAgentService();
70
70
 
71
+ const isSendingRef = useRef(false);
72
+
71
73
  // Initialize with mock data in preview mode
72
74
  useEffect(() => {
73
75
  if (previewMode && mockData) {
@@ -110,7 +112,8 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
110
112
  return;
111
113
  }
112
114
 
113
- if (userQueueEventCount > 0) {
115
+ if (userQueueEventCount > 0 && !isSendingRef.current) {
116
+ isSendingRef.current = true;
114
117
  const payloadEvents = userEvents.slice(0, userQueueEventCount);
115
118
 
116
119
  payloadEvents.forEach(userEvent => {
@@ -162,7 +165,9 @@ export const SalesAgentProvider: React.FC<SalesAgentProviderProps> = ({
162
165
  userEvents: payloadEvents,
163
166
  generationParams: settingsContext.generationParams,
164
167
  }),
165
- );
168
+ ).finally(() => {
169
+ isSendingRef.current = false;
170
+ });
166
171
  } else if (isInitialized) {
167
172
  getSuggestions(
168
173
  createResponsePayload({
@@ -8,7 +8,7 @@ import { SparkleIconColor } from '@envive-ai/react-toolkit-v3/WelcomeMessage';
8
8
  import { FloatingButtonLocation } from '@envive-ai/react-toolkit-v3/FloatingButton';
9
9
  import { ColorNames } from '../application/models/colorsConfigV3';
10
10
  import { CustomerServiceType } from '../types/customerService';
11
- import type { MerchantVariantSettings, SearchConfig } from './types';
11
+ import type { SearchConfig } from './types';
12
12
 
13
13
  export enum LetterSpacingCSSVar {
14
14
  Tight0 = 'envive-typography-letter-spacing-tight-0',
@@ -204,6 +204,11 @@ type CustomerServiceIntegration = {
204
204
  suppressMerchantButton?: boolean;
205
205
  };
206
206
 
207
+ type SPASettings = {
208
+ enabled: boolean;
209
+ refreshInterval?: number;
210
+ };
211
+
207
212
  type OrgUIConfigV3 = {
208
213
  id?: string;
209
214
 
@@ -221,7 +226,7 @@ type OrgUIConfigV3 = {
221
226
 
222
227
  customerServiceIntegration?: CustomerServiceIntegration;
223
228
 
224
- merchantVariantSettings?: MerchantVariantSettings;
229
+ singlePageApplicationSettings?: SPASettings;
225
230
 
226
231
  searchConfig?: SearchConfig;
227
232
  };
@@ -307,6 +312,7 @@ interface PromptButtonCarouselWithImageWidgetV3Config extends BaseWidgetConfig<W
307
312
  promptButtonType?: PromptButtonVariant;
308
313
  image?: ImageGalleryImage;
309
314
  hideTextField?: boolean;
315
+ isDynamic?: boolean;
310
316
  }
311
317
 
312
318
  interface FloatingChatWidgetV3Config extends BaseWidgetConfig<WidgetTypeV3.FloatingChatV3> {}
@@ -347,4 +353,5 @@ export type {
347
353
  FloatingChatConfig,
348
354
  FloatingButtonConfig,
349
355
  CustomerServiceIntegration,
356
+ SPASettings,
350
357
  };
@@ -35,6 +35,10 @@ export const WidgetConfigProvider: React.FC<{ children: ReactNode }> = ({ childr
35
35
  const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
36
36
  Logger.logInfo('widgetConfigContext | returning widget config response', response);
37
37
 
38
+ if (widgetConfigId === 'fake-widget-config-id') {
39
+ return {} as WidgetConfigV3;
40
+ }
41
+
38
42
  if (
39
43
  [
40
44
  WidgetTypeV3.SocialProofV3,
@@ -10,6 +10,7 @@ import type {
10
10
  } from '@amplitude/analytics-types';
11
11
  import { FeatureFlagService } from 'src/contexts/featureFlagServiceContext/featureFlagServiceContext';
12
12
  import { WidgetTypeV3 } from 'src/contexts/typesV3';
13
+ import { ChatElementDisplayLocationV3 } from 'src/application/models/chatElementDisplayLocationV3';
13
14
 
14
15
  export enum SpiffyMetricsEventName {
15
16
  BundleLoaded = 'Bundle Loaded',
@@ -266,19 +267,74 @@ export class AmplitudeService {
266
267
  case WidgetTypeV3.TitledPromptCarouselV3:
267
268
  case WidgetTypeV3.PromptCarouselV3:
268
269
  return 'suggestion_bar';
270
+ case WidgetTypeV3.ProductCardV3:
271
+ return 'image_prompt_card';
269
272
  default:
270
273
  return 'unknown';
271
274
  }
272
275
  }
273
276
 
277
+ static mapTriggerLocationToChatComponent(triggerLocation: unknown): string {
278
+ switch (triggerLocation) {
279
+ case ChatElementDisplayLocationV3.PRODUCT_CARD_PROMPT_BUTTON:
280
+ case ChatElementDisplayLocationV3.PRODUCT_CARD_TEXT_FIELD:
281
+ return 'prompt_card';
282
+ case ChatElementDisplayLocationV3.PROMPT_CAROUSEL:
283
+ case ChatElementDisplayLocationV3.TITLED_PROMPT_CAROUSEL:
284
+ return 'top_reviews_snippet';
285
+ case ChatElementDisplayLocationV3.TYPING_ANIMATION:
286
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_PRIMARY_BUTTON:
287
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_SECONDARY_BUTTON:
288
+ case ChatElementDisplayLocationV3.SOCIAL_PROOF_TEXT_FIELD:
289
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_PROMPT_BUTTON:
290
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_TEXT_FIELD:
291
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_PROMPT_BUTTON:
292
+ case ChatElementDisplayLocationV3.CHAT_PREVIEW_TEXT_FIELD:
293
+ return 'chat_preview';
294
+ case ChatElementDisplayLocationV3.FLOATING_CHAT_OVERLAY:
295
+ case ChatElementDisplayLocationV3.FLOATING_CHAT_CLOSE_BUTTON:
296
+ return 'in_chat';
297
+ default:
298
+ return triggerLocation as string;
299
+ }
300
+ }
301
+
274
302
  // This allows us to map the event props to the correct format for the legacy amplitude events
275
303
  static mapEventProps({ eventName, eventProps }: TrackEventParams): Record<string, unknown> {
304
+ const messageMetadata = eventProps?.message_metadata ?? {};
305
+ const triggerLocation =
306
+ messageMetadata !== null &&
307
+ typeof messageMetadata === 'object' &&
308
+ 'trigger_location' in messageMetadata
309
+ ? messageMetadata.trigger_location
310
+ : undefined;
311
+
312
+ if (eventName === SpiffyMetricsEventName.ChatComponentExpanded) {
313
+ const mappedTriggerLoccation =
314
+ AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
315
+ return {
316
+ ...eventProps,
317
+ message_metadata: {
318
+ ...messageMetadata,
319
+ trigger_location: mappedTriggerLoccation,
320
+ full_trigger_location: triggerLocation,
321
+ },
322
+ };
323
+ }
324
+
276
325
  if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
277
326
  const mappedWidgetType = AmplitudeService.mapWidgetTypeToChatComponent(
278
327
  eventProps?.widget_type,
279
328
  );
329
+ const mappedTriggerLoccation =
330
+ AmplitudeService.mapTriggerLocationToChatComponent(triggerLocation);
280
331
  return {
281
332
  ...eventProps,
333
+ message_metadata: {
334
+ ...messageMetadata,
335
+ trigger_location: mappedTriggerLoccation,
336
+ full_trigger_location: triggerLocation,
337
+ },
282
338
  chat_component: mappedWidgetType,
283
339
  'chat.component_visible': true,
284
340
  };