@qualified-salesforce/web 0.0.1-oidc-bootstrap

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 (560) hide show
  1. package/41842993ec71d6628e4949e9a22b146b.svg +3 -0
  2. package/7271f3433ed82fc7f56adcd9e30275f4.svg +17 -0
  3. package/LICENSE.txt +82 -0
  4. package/components/helpers/entriesStringValidations.js +69 -0
  5. package/components/helpers/languages.js +32 -0
  6. package/components/shared/assertUnreachable.js +5 -0
  7. package/components/shared/controls/imageCropperHelpers.js +43 -0
  8. package/components/shared/meetingLoadingProgressSpec.js +116 -0
  9. package/constants.generated.js +9883 -0
  10. package/css/widget/multimodal_v2/host.split-css.css +162 -0
  11. package/css/widget/multimodal_v2/index.split-css.panda.css +5240 -0
  12. package/css/widget/widget.split-css.css +100 -0
  13. package/fonts/inter/Inter-Black.woff +0 -0
  14. package/fonts/inter/Inter-Black.woff2 +0 -0
  15. package/fonts/inter/Inter-BlackItalic.woff +0 -0
  16. package/fonts/inter/Inter-BlackItalic.woff2 +0 -0
  17. package/fonts/inter/Inter-Bold.woff +0 -0
  18. package/fonts/inter/Inter-Bold.woff2 +0 -0
  19. package/fonts/inter/Inter-BoldItalic.woff +0 -0
  20. package/fonts/inter/Inter-BoldItalic.woff2 +0 -0
  21. package/fonts/inter/Inter-ExtraBold.woff +0 -0
  22. package/fonts/inter/Inter-ExtraBold.woff2 +0 -0
  23. package/fonts/inter/Inter-ExtraBoldItalic.woff +0 -0
  24. package/fonts/inter/Inter-ExtraBoldItalic.woff2 +0 -0
  25. package/fonts/inter/Inter-ExtraLight.woff +0 -0
  26. package/fonts/inter/Inter-ExtraLight.woff2 +0 -0
  27. package/fonts/inter/Inter-ExtraLightItalic.woff +0 -0
  28. package/fonts/inter/Inter-ExtraLightItalic.woff2 +0 -0
  29. package/fonts/inter/Inter-Italic.woff +0 -0
  30. package/fonts/inter/Inter-Italic.woff2 +0 -0
  31. package/fonts/inter/Inter-Light.woff +0 -0
  32. package/fonts/inter/Inter-Light.woff2 +0 -0
  33. package/fonts/inter/Inter-LightItalic.woff +0 -0
  34. package/fonts/inter/Inter-LightItalic.woff2 +0 -0
  35. package/fonts/inter/Inter-Medium.woff +0 -0
  36. package/fonts/inter/Inter-Medium.woff2 +0 -0
  37. package/fonts/inter/Inter-MediumItalic.woff +0 -0
  38. package/fonts/inter/Inter-MediumItalic.woff2 +0 -0
  39. package/fonts/inter/Inter-Regular.woff +0 -0
  40. package/fonts/inter/Inter-Regular.woff2 +0 -0
  41. package/fonts/inter/Inter-SemiBold.woff +0 -0
  42. package/fonts/inter/Inter-SemiBold.woff2 +0 -0
  43. package/fonts/inter/Inter-SemiBoldItalic.woff +0 -0
  44. package/fonts/inter/Inter-SemiBoldItalic.woff2 +0 -0
  45. package/fonts/inter/Inter-Thin.woff +0 -0
  46. package/fonts/inter/Inter-Thin.woff2 +0 -0
  47. package/fonts/inter/Inter-ThinItalic.woff +0 -0
  48. package/fonts/inter/Inter-ThinItalic.woff2 +0 -0
  49. package/fonts/inter/Inter-italic.var.woff2 +0 -0
  50. package/fonts/inter/Inter-roman.var.woff2 +0 -0
  51. package/images/close.js +63 -0
  52. package/images/logo.js +22 -0
  53. package/js/4101.js +19721 -0
  54. package/js/daily-esm.js +9948 -0
  55. package/js/date-fns.js +427 -0
  56. package/js/multimodal_v2.js +1653 -0
  57. package/js/runtime.js +109 -0
  58. package/media/Inter-Black.796be8d8bf.woff2 +0 -0
  59. package/media/Inter-Black.b254104c56.woff +0 -0
  60. package/media/Inter-BlackItalic.70306b0eae.woff +0 -0
  61. package/media/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
  62. package/media/Inter-Bold.579e0f95ca.woff2 +0 -0
  63. package/media/Inter-Bold.b1234477a5.woff +0 -0
  64. package/media/Inter-BoldItalic.3d0d804323.woff +0 -0
  65. package/media/Inter-BoldItalic.828a494e04.woff2 +0 -0
  66. package/media/Inter-ExtraBold.208a9e6c99.woff +0 -0
  67. package/media/Inter-ExtraBold.d65f028165.woff2 +0 -0
  68. package/media/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
  69. package/media/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
  70. package/media/Inter-ExtraLight.15c082a57d.woff +0 -0
  71. package/media/Inter-ExtraLight.6824177d1e.woff2 +0 -0
  72. package/media/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
  73. package/media/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
  74. package/media/Inter-Italic.9beab78452.woff +0 -0
  75. package/media/Inter-Italic.d593a8df79.woff2 +0 -0
  76. package/media/Inter-Light.27083fa637.woff2 +0 -0
  77. package/media/Inter-Light.91dfddd842.woff +0 -0
  78. package/media/Inter-LightItalic.0a783b89b3.woff2 +0 -0
  79. package/media/Inter-LightItalic.f8ccf2813f.woff +0 -0
  80. package/media/Inter-Medium.dc792b508e.woff2 +0 -0
  81. package/media/Inter-Medium.ec7dd2d9d8.woff +0 -0
  82. package/media/Inter-MediumItalic.17301e5b40.woff +0 -0
  83. package/media/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
  84. package/media/Inter-Regular.f1f0c35b32.woff2 +0 -0
  85. package/media/Inter-Regular.f356e84aa0.woff +0 -0
  86. package/media/Inter-SemiBold.55027e4724.woff +0 -0
  87. package/media/Inter-SemiBold.fcb100c760.woff2 +0 -0
  88. package/media/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
  89. package/media/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
  90. package/media/Inter-Thin.16325d9b0f.woff +0 -0
  91. package/media/Inter-Thin.dafaa44d99.woff2 +0 -0
  92. package/media/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
  93. package/media/Inter-ThinItalic.d3d8994788.woff +0 -0
  94. package/media/Inter-italic.var.958a0b9742.woff2 +0 -0
  95. package/media/Inter-roman.var.b2129c009c.woff2 +0 -0
  96. package/package.json +20 -0
  97. package/packs/widget/api/docking/docking_host.js +97 -0
  98. package/packs/widget/api/docking/index.js +294 -0
  99. package/packs/widget/api/docking/shared.js +164 -0
  100. package/packs/widget/api/docking/viewport_lock.js +488 -0
  101. package/packs/widget/api/docking/viewport_resize.js +1203 -0
  102. package/packs/widget/esm/fonts/Inter-Black.796be8d8bf.woff2 +0 -0
  103. package/packs/widget/esm/fonts/Inter-Black.b254104c56.woff +0 -0
  104. package/packs/widget/esm/fonts/Inter-BlackItalic.70306b0eae.woff +0 -0
  105. package/packs/widget/esm/fonts/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
  106. package/packs/widget/esm/fonts/Inter-Bold.579e0f95ca.woff2 +0 -0
  107. package/packs/widget/esm/fonts/Inter-Bold.b1234477a5.woff +0 -0
  108. package/packs/widget/esm/fonts/Inter-BoldItalic.3d0d804323.woff +0 -0
  109. package/packs/widget/esm/fonts/Inter-BoldItalic.828a494e04.woff2 +0 -0
  110. package/packs/widget/esm/fonts/Inter-ExtraBold.208a9e6c99.woff +0 -0
  111. package/packs/widget/esm/fonts/Inter-ExtraBold.d65f028165.woff2 +0 -0
  112. package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
  113. package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
  114. package/packs/widget/esm/fonts/Inter-ExtraLight.15c082a57d.woff +0 -0
  115. package/packs/widget/esm/fonts/Inter-ExtraLight.6824177d1e.woff2 +0 -0
  116. package/packs/widget/esm/fonts/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
  117. package/packs/widget/esm/fonts/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
  118. package/packs/widget/esm/fonts/Inter-Italic.9beab78452.woff +0 -0
  119. package/packs/widget/esm/fonts/Inter-Italic.d593a8df79.woff2 +0 -0
  120. package/packs/widget/esm/fonts/Inter-Light.27083fa637.woff2 +0 -0
  121. package/packs/widget/esm/fonts/Inter-Light.91dfddd842.woff +0 -0
  122. package/packs/widget/esm/fonts/Inter-LightItalic.0a783b89b3.woff2 +0 -0
  123. package/packs/widget/esm/fonts/Inter-LightItalic.f8ccf2813f.woff +0 -0
  124. package/packs/widget/esm/fonts/Inter-Medium.dc792b508e.woff2 +0 -0
  125. package/packs/widget/esm/fonts/Inter-Medium.ec7dd2d9d8.woff +0 -0
  126. package/packs/widget/esm/fonts/Inter-MediumItalic.17301e5b40.woff +0 -0
  127. package/packs/widget/esm/fonts/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
  128. package/packs/widget/esm/fonts/Inter-Regular.f1f0c35b32.woff2 +0 -0
  129. package/packs/widget/esm/fonts/Inter-Regular.f356e84aa0.woff +0 -0
  130. package/packs/widget/esm/fonts/Inter-SemiBold.55027e4724.woff +0 -0
  131. package/packs/widget/esm/fonts/Inter-SemiBold.fcb100c760.woff2 +0 -0
  132. package/packs/widget/esm/fonts/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
  133. package/packs/widget/esm/fonts/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
  134. package/packs/widget/esm/fonts/Inter-Thin.16325d9b0f.woff +0 -0
  135. package/packs/widget/esm/fonts/Inter-Thin.dafaa44d99.woff2 +0 -0
  136. package/packs/widget/esm/fonts/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
  137. package/packs/widget/esm/fonts/Inter-ThinItalic.d3d8994788.woff +0 -0
  138. package/packs/widget/esm/fonts/Inter-italic.var.958a0b9742.woff2 +0 -0
  139. package/packs/widget/esm/fonts/Inter-roman.var.b2129c009c.woff2 +0 -0
  140. package/packs/widget/esm/index.js +183 -0
  141. package/packs/widget/esm/qualified.css +5502 -0
  142. package/routes/app/offers/scripts/OfferMainScript.js +154 -0
  143. package/routes/app/offers/scripts/constants.js +71 -0
  144. package/routes/app/offers/scripts/main/ButtonManager.js +65 -0
  145. package/routes/app/offers/scripts/main/FormManager.js +325 -0
  146. package/routes/app/offers/scripts/main/MainContext.js +19 -0
  147. package/routes/app/offers/scripts/main/OfferManager.js +91 -0
  148. package/routes/app/offers/scripts/main/TriggerManager.js +125 -0
  149. package/routes/app/offers/scripts/rendering/ContentManager.js +53 -0
  150. package/routes/app/offers/scripts/rendering/LocationManager.js +83 -0
  151. package/routes/app/offers/scripts/rendering/RenderedOffer.js +188 -0
  152. package/routes/app/offers/scripts/rendering/Renderer.js +69 -0
  153. package/routes/app/offers/scripts/rendering/RenderingInitializer.js +62 -0
  154. package/routes/app/offers/scripts/rendering/animations/AnimationManager.js +31 -0
  155. package/routes/app/offers/scripts/rendering/animations/AnimationManagerFooter.js +81 -0
  156. package/routes/app/offers/scripts/rendering/animations/AnimationManagerHeader.js +81 -0
  157. package/routes/app/offers/scripts/rendering/animations/AnimationManagerModal.js +117 -0
  158. package/routes/app/offers/scripts/rendering/animations/AnimationManagerSidebar.js +75 -0
  159. package/routes/app/offers/scripts/rendering/animations/AnimationResult.js +43 -0
  160. package/routes/app/offers/scripts/rendering/animations/Animator.js +78 -0
  161. package/routes/app/offers/scripts/rendering/animations/BaseAnimationManager.js +25 -0
  162. package/routes/app/offers/scripts/rendering/lib/BaseComponent.js +106 -0
  163. package/routes/app/offers/scripts/rendering/lib/FormComponent.js +134 -0
  164. package/routes/app/offers/scripts/rendering/lib/OfferComponent.js +144 -0
  165. package/routes/app/offers/scripts/rendering/lib/ScrollbarWidth.js +27 -0
  166. package/routes/app/offers/scripts/rendering/lib/decorators.js +20 -0
  167. package/routes/app/offers/scripts/rendering/locations/CSSVarsManager.js +66 -0
  168. package/routes/app/offers/scripts/rendering/locations/ElementResizeObserver.js +49 -0
  169. package/routes/app/offers/scripts/rendering/locations/footer.js +53 -0
  170. package/routes/app/offers/scripts/rendering/locations/header/AsyncBatchProcessor.js +70 -0
  171. package/routes/app/offers/scripts/rendering/locations/header/CSSTransitionObserver.js +182 -0
  172. package/routes/app/offers/scripts/rendering/locations/header/ElementStyleChangeObserver.js +138 -0
  173. package/routes/app/offers/scripts/rendering/locations/header/ExternalStyleManager.js +110 -0
  174. package/routes/app/offers/scripts/rendering/locations/header/Header.js +353 -0
  175. package/routes/app/offers/scripts/rendering/locations/header/InlineStyleManager.js +105 -0
  176. package/routes/app/offers/scripts/rendering/locations/header/MatchingElementsObserver.js +107 -0
  177. package/routes/app/offers/scripts/rendering/locations/header/NewElementsObserver.js +129 -0
  178. package/routes/app/offers/scripts/rendering/locations/header/RuleWrapper.js +46 -0
  179. package/routes/app/offers/scripts/rendering/locations/header/SelectorObservable.js +23 -0
  180. package/routes/app/offers/scripts/rendering/locations/header/SelectorObserver.js +61 -0
  181. package/routes/app/offers/scripts/rendering/locations/header/ShiftedElementsManager.js +45 -0
  182. package/routes/app/offers/scripts/rendering/locations/header/StyleElementManager.js +37 -0
  183. package/routes/app/offers/scripts/rendering/locations/header/StyleElementWrapper.js +62 -0
  184. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectorValue.js +45 -0
  185. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectors.js +62 -0
  186. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/StyleSelectorObserver.js +294 -0
  187. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/constants.js +21 -0
  188. package/routes/app/offers/scripts/rendering/locations/header/WindowResizeObserver.js +43 -0
  189. package/routes/app/offers/scripts/rendering/locations/header/utils.js +25 -0
  190. package/routes/app/offers/scripts/rendering/locations/popup.js +66 -0
  191. package/routes/app/offers/scripts/rendering/locations/sidebar.js +21 -0
  192. package/routes/app/offers/scripts/rendering/variations/ButtonBanner.js +105 -0
  193. package/routes/app/offers/scripts/rendering/variations/ButtonModal.js +114 -0
  194. package/routes/app/offers/scripts/rendering/variations/FormBanner.js +214 -0
  195. package/routes/app/offers/scripts/rendering/variations/FormModal.js +325 -0
  196. package/routes/app/offers/scripts/rendering/variations/LinkBanner.js +105 -0
  197. package/routes/app/offers/scripts/rendering/variations/components/Body.js +29 -0
  198. package/routes/app/offers/scripts/rendering/variations/components/Button.js +128 -0
  199. package/routes/app/offers/scripts/rendering/variations/components/DismissButton.js +39 -0
  200. package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageBanner.js +110 -0
  201. package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageModal.js +128 -0
  202. package/routes/app/offers/scripts/rendering/variations/components/Headline.js +94 -0
  203. package/routes/app/offers/scripts/rendering/variations/components/MultiFieldForm.js +302 -0
  204. package/routes/app/offers/scripts/rendering/variations/components/Tooltip.js +74 -0
  205. package/routes/app/offers/scripts/rendering/variations/icons.js +15 -0
  206. package/routes/app/offers/scripts/utils.js +115 -0
  207. package/routes/app/offers/utils/HTMLUtils.js +10 -0
  208. package/routes/app/offers/utils/createTypeGuard.js +32 -0
  209. package/routes/app/offers/utils/promise-utils.js +22 -0
  210. package/routes/app/websiteBuilder/stores/storeHelpers.js +18 -0
  211. package/sounds/message-initial.mp3 +0 -0
  212. package/sounds/message-received.mp3 +0 -0
  213. package/sounds/message-sent.mp3 +0 -0
  214. package/src/arrays.js +15 -0
  215. package/src/audio.js +106 -0
  216. package/src/bounded-set.js +16 -0
  217. package/src/bounding_box_observer.js +129 -0
  218. package/src/decorators.js +29 -0
  219. package/src/dom.js +128 -0
  220. package/src/dom_roots.js +26 -0
  221. package/src/embedded_forms/EmbeddedForm.js +638 -0
  222. package/src/embedded_forms/QualifiedEmbeddedForm.js +51 -0
  223. package/src/embedded_forms/QualifiedFormField.js +137 -0
  224. package/src/embedded_forms/utils.js +17 -0
  225. package/src/graphql-types.js +1686 -0
  226. package/src/iframes.js +86 -0
  227. package/src/localstorage.js +43 -0
  228. package/src/mirror/Shipper.js +133 -0
  229. package/src/mirror/constants.generated.js +13 -0
  230. package/src/mirror/constants.js +238 -0
  231. package/src/mirror/shipper/ChangeQueue.js +155 -0
  232. package/src/mirror/shipper/DOMSerializer.js +392 -0
  233. package/src/mirror/shipper/observers.js +441 -0
  234. package/src/mirror/shipper/utils.js +98 -0
  235. package/src/mixins/disposable.js +125 -0
  236. package/src/mixins/injectable.js +37 -0
  237. package/src/personalizations/personalization-manager.js +110 -0
  238. package/src/personalizations/strategies/node-freezing-strategy.js +174 -0
  239. package/src/personalizations/utils.js +187 -0
  240. package/src/promises.js +107 -0
  241. package/src/proxy.js +144 -0
  242. package/src/qualified_root.js +35 -0
  243. package/src/query_params.js +55 -0
  244. package/src/shadow-dom-helper.js +63 -0
  245. package/src/singleton_host.js +39 -0
  246. package/src/smart_website/trigger.js +49 -0
  247. package/src/smart_website/utils.js +149 -0
  248. package/src/string.js +53 -0
  249. package/src/timezone.js +57 -0
  250. package/src/timing.js +49 -0
  251. package/src/type-utils.js +76 -0
  252. package/src/url-utils.js +102 -0
  253. package/src/url.js +50 -0
  254. package/src/utils.js +72 -0
  255. package/src/validation.js.js +29 -0
  256. package/src/validation_ts.js +6 -0
  257. package/vendor/actioncable/adapters.js +6 -0
  258. package/vendor/actioncable/connection.js +204 -0
  259. package/vendor/actioncable/connection_monitor.js +129 -0
  260. package/vendor/actioncable/consumer.js +91 -0
  261. package/vendor/actioncable/index.js +34 -0
  262. package/vendor/actioncable/internal.js +22 -0
  263. package/vendor/actioncable/logger.js +28 -0
  264. package/vendor/actioncable/subscription.js +93 -0
  265. package/vendor/actioncable/subscriptions.js +89 -0
  266. package/vendor/open-telemetry-idgenerator.js +43 -0
  267. package/widget/analytics/facebook_tracker.js +8 -0
  268. package/widget/analytics/google_analytics_tracker.js +83 -0
  269. package/widget/analytics/google_tag_manager_tracker.js +22 -0
  270. package/widget/analytics.js +58 -0
  271. package/widget/api_handler/api_handler.js +730 -0
  272. package/widget/api_handler/base_api_handler.js +249 -0
  273. package/widget/booker_intent_tracker.js +391 -0
  274. package/widget/booker_outcome_tracker.js +329 -0
  275. package/widget/capture_widget_exceptions.js +150 -0
  276. package/widget/channel.js +282 -0
  277. package/widget/composite_experience_adapter.js +101 -0
  278. package/widget/constants.generated.js +350 -0
  279. package/widget/constants.js +21 -0
  280. package/widget/container.js +193 -0
  281. package/widget/content_activity_emitter.js +36 -0
  282. package/widget/data360_visitor.js +67 -0
  283. package/widget/date_provider.js +11 -0
  284. package/widget/debug_mode_state.js +175 -0
  285. package/widget/dummy_module.js +9 -0
  286. package/widget/eloqua_visitor.js +17 -0
  287. package/widget/form_cta_booker_intent.js +246 -0
  288. package/widget/hubspot_visitor.js +39 -0
  289. package/widget/inline_meeting_booker_page.js +90 -0
  290. package/widget/local_state/abstract_local_state.js +38 -0
  291. package/widget/local_state/debug_state/abstract_debug_flow.js +29 -0
  292. package/widget/local_state/debug_state/custom_form_flow.js +14 -0
  293. package/widget/local_state/debug_state/hubspot_form_flow.js +19 -0
  294. package/widget/local_state/debug_state/hubspot_v4_form_flow.js +19 -0
  295. package/widget/local_state/debug_state/marketo_form_flow.js +20 -0
  296. package/widget/local_state/debug_state/pardot_form_flow.js +18 -0
  297. package/widget/local_state/debug_state.js +362 -0
  298. package/widget/local_state/trace_state.js +20 -0
  299. package/widget/location_provider.js +9 -0
  300. package/widget/marketo_visitor.js +39 -0
  301. package/widget/meetings/tracing/buttons_forms_triggering_tracer.js +124 -0
  302. package/widget/meetings/tracing/spans/button_spans.js +18 -0
  303. package/widget/meetings/tracing/spans/form_spans.js +11 -0
  304. package/widget/multimodal_v2/assets_preloader.js +97 -0
  305. package/widget/multimodal_v2/components/AppLayout.js +93 -0
  306. package/widget/multimodal_v2/components/CursorOverlay.js +93 -0
  307. package/widget/multimodal_v2/components/PointerRectOverlay.js +74 -0
  308. package/widget/multimodal_v2/components/app/Artifact.js +109 -0
  309. package/widget/multimodal_v2/components/app/Background.js +27 -0
  310. package/widget/multimodal_v2/components/app/CalendarLoadingContent.js +255 -0
  311. package/widget/multimodal_v2/components/app/Chat.js +39 -0
  312. package/widget/multimodal_v2/components/app/CookieConsentModal.js +149 -0
  313. package/widget/multimodal_v2/components/app/Foreground.js +48 -0
  314. package/widget/multimodal_v2/components/app/HiddenInput.js +41 -0
  315. package/widget/multimodal_v2/components/app/Input.js +72 -0
  316. package/widget/multimodal_v2/components/app/LightboxExperience.js +769 -0
  317. package/widget/multimodal_v2/components/app/LoadingOverlay.js +97 -0
  318. package/widget/multimodal_v2/components/app/Main.js +985 -0
  319. package/widget/multimodal_v2/components/app/MessengerButton.js +160 -0
  320. package/widget/multimodal_v2/components/app/Multimodal.js +17 -0
  321. package/widget/multimodal_v2/components/app/OverlayControls.js +79 -0
  322. package/widget/multimodal_v2/components/app/Preview.js +32 -0
  323. package/widget/multimodal_v2/components/app/PrivacyDisclosure.js +57 -0
  324. package/widget/multimodal_v2/components/app/RotateDeviceOverlay.js +70 -0
  325. package/widget/multimodal_v2/components/app/Toolbar.js +156 -0
  326. package/widget/multimodal_v2/components/chat/ChatComposer.js +129 -0
  327. package/widget/multimodal_v2/components/chat/ChatInputForm.js +398 -0
  328. package/widget/multimodal_v2/components/chat/ColdStartQuestions.js +354 -0
  329. package/widget/multimodal_v2/components/chat/ComposerErrorBanner.js +62 -0
  330. package/widget/multimodal_v2/components/chat/PostCallSurvey.js +359 -0
  331. package/widget/multimodal_v2/components/chat/preview/FieldRequestRenderer.js +41 -0
  332. package/widget/multimodal_v2/components/chat/preview/PreviewMessageRenderer.js +60 -0
  333. package/widget/multimodal_v2/components/chat/preview/SharedOfferRenderer.js +143 -0
  334. package/widget/multimodal_v2/components/chat/preview/TextRenderer.js +27 -0
  335. package/widget/multimodal_v2/components/chat/preview/TimelinePreview.js +254 -0
  336. package/widget/multimodal_v2/components/chat/timeline/CalendarEventOfferRenderer.js +103 -0
  337. package/widget/multimodal_v2/components/chat/timeline/CalendarEventPickRenderer.js +148 -0
  338. package/widget/multimodal_v2/components/chat/timeline/FieldEntryRenderer.js +84 -0
  339. package/widget/multimodal_v2/components/chat/timeline/FieldRequestRenderer.js +56 -0
  340. package/widget/multimodal_v2/components/chat/timeline/InlinePrivacyDisclosure.js +66 -0
  341. package/widget/multimodal_v2/components/chat/timeline/LinkPreviewCard.js +70 -0
  342. package/widget/multimodal_v2/components/chat/timeline/MessageEntry.js +88 -0
  343. package/widget/multimodal_v2/components/chat/timeline/PresentContentRenderer.js +30 -0
  344. package/widget/multimodal_v2/components/chat/timeline/PresentDeckRenderer.js +279 -0
  345. package/widget/multimodal_v2/components/chat/timeline/PresentVideoRenderer.js +131 -0
  346. package/widget/multimodal_v2/components/chat/timeline/ShareContentRenderer.js +59 -0
  347. package/widget/multimodal_v2/components/chat/timeline/SharedOfferRenderer.js +131 -0
  348. package/widget/multimodal_v2/components/chat/timeline/SystemRenderer.js +82 -0
  349. package/widget/multimodal_v2/components/chat/timeline/TextRenderer.js +66 -0
  350. package/widget/multimodal_v2/components/chat/timeline/Timeline.js +158 -0
  351. package/widget/multimodal_v2/components/debug/DebugMultimodalPanel.js +327 -0
  352. package/widget/multimodal_v2/components/decks/index.js +160 -0
  353. package/widget/multimodal_v2/components/field_request/BooleanField.js +77 -0
  354. package/widget/multimodal_v2/components/field_request/FieldComponents.js +69 -0
  355. package/widget/multimodal_v2/components/field_request/Form.js +87 -0
  356. package/widget/multimodal_v2/components/field_request/MultiPicklistField.js +240 -0
  357. package/widget/multimodal_v2/components/field_request/PicklistField.js +166 -0
  358. package/widget/multimodal_v2/components/field_request/SingleLineInputField.js +69 -0
  359. package/widget/multimodal_v2/components/field_request/TextField.js +37 -0
  360. package/widget/multimodal_v2/components/field_request/index.js +170 -0
  361. package/widget/multimodal_v2/components/helpers/AutoScroll.js +37 -0
  362. package/widget/multimodal_v2/components/helpers/ErrorBoundary.js +53 -0
  363. package/widget/multimodal_v2/components/helpers/FocusTrapDialog.js +26 -0
  364. package/widget/multimodal_v2/components/helpers/ImpressionTracker.js +94 -0
  365. package/widget/multimodal_v2/components/helpers/ListRenderer.js +37 -0
  366. package/widget/multimodal_v2/components/helpers/Localization.js +76 -0
  367. package/widget/multimodal_v2/components/helpers/Persisted.js +166 -0
  368. package/widget/multimodal_v2/components/helpers/RichText.js +358 -0
  369. package/widget/multimodal_v2/components/helpers/ScreenReaderHeading.js +17 -0
  370. package/widget/multimodal_v2/components/helpers/Thumbnail.js +190 -0
  371. package/widget/multimodal_v2/components/helpers/VisuallyHidden.js +41 -0
  372. package/widget/multimodal_v2/components/helpers/content_click_payloads.js +58 -0
  373. package/widget/multimodal_v2/components/helpers/useDraggable.js +103 -0
  374. package/widget/multimodal_v2/components/helpers/useTextOverflow.js +44 -0
  375. package/widget/multimodal_v2/components/lightbox_gather/index.js +741 -0
  376. package/widget/multimodal_v2/components/meetings/ArtifactEntryPoint.js +252 -0
  377. package/widget/multimodal_v2/components/meetings/MeetingAdditionalAttendees.js +325 -0
  378. package/widget/multimodal_v2/components/meetings/MeetingBookerEntry.js +100 -0
  379. package/widget/multimodal_v2/components/meetings/MeetingDetailsCard.js +99 -0
  380. package/widget/multimodal_v2/components/meetings/MeetingErrorBanner.js +62 -0
  381. package/widget/multimodal_v2/components/meetings/MeetingOfferEmailStep.js +239 -0
  382. package/widget/multimodal_v2/components/meetings/MeetingOfferFooter.js +104 -0
  383. package/widget/multimodal_v2/components/meetings/MeetingOfferSelectionStep.js +60 -0
  384. package/widget/multimodal_v2/components/meetings/MeetingRepHeader.js +222 -0
  385. package/widget/multimodal_v2/components/meetings/MeetingStepShell.js +92 -0
  386. package/widget/multimodal_v2/components/meetings/MeetingSummaryRail.js +515 -0
  387. package/widget/multimodal_v2/components/meetings/MeetingTimeSelector.js +603 -0
  388. package/widget/multimodal_v2/components/meetings/MonthDatePicker.js +422 -0
  389. package/widget/multimodal_v2/components/meetings/NavigationButtons.js +76 -0
  390. package/widget/multimodal_v2/components/meetings/TimeSlotHeader.js +357 -0
  391. package/widget/multimodal_v2/components/meetings/WeekViewHeader.js +20 -0
  392. package/widget/multimodal_v2/components/meetings/constants.js +7 -0
  393. package/widget/multimodal_v2/components/meetings/index.js +47 -0
  394. package/widget/multimodal_v2/components/meetings/utils.js +328 -0
  395. package/widget/multimodal_v2/components/multimodal/Audio.js +28 -0
  396. package/widget/multimodal_v2/components/multimodal/Controls.js +188 -0
  397. package/widget/multimodal_v2/components/multimodal/LiveVideo.js +63 -0
  398. package/widget/multimodal_v2/components/multimodal/MultiModalComponent.js +424 -0
  399. package/widget/multimodal_v2/components/multimodal/MultimodalAvatar.js +36 -0
  400. package/widget/multimodal_v2/components/multimodal/OrbAvatar.js +326 -0
  401. package/widget/multimodal_v2/components/multimodal/Status.js +220 -0
  402. package/widget/multimodal_v2/components/multimodal/VideoAvatar.js +24 -0
  403. package/widget/multimodal_v2/components/multimodal/VideoPreview.js +114 -0
  404. package/widget/multimodal_v2/components/multimodal/useAudioLevelMonitoring.js +96 -0
  405. package/widget/multimodal_v2/components/multimodal/useMultimodal.js +434 -0
  406. package/widget/multimodal_v2/components/presentations/index.js +372 -0
  407. package/widget/multimodal_v2/components/shared/Avatar.js +92 -0
  408. package/widget/multimodal_v2/components/shared/AvatarGroup.js +135 -0
  409. package/widget/multimodal_v2/components/shared/Button.js +245 -0
  410. package/widget/multimodal_v2/components/shared/ButtonGroup.js +133 -0
  411. package/widget/multimodal_v2/components/shared/ComposerForm.js +98 -0
  412. package/widget/multimodal_v2/components/shared/SpeakingIndicator.js +239 -0
  413. package/widget/multimodal_v2/components/shared/ThinkingAnimation.js +165 -0
  414. package/widget/multimodal_v2/components/shared/Tooltip.js +266 -0
  415. package/widget/multimodal_v2/components/shared/controls/Dropdown.js +79 -0
  416. package/widget/multimodal_v2/components/shared/controls/PillToggle.js +142 -0
  417. package/widget/multimodal_v2/components/shared/controls/TextArea.js +114 -0
  418. package/widget/multimodal_v2/components/shared/toolCallLabels.js +12 -0
  419. package/widget/multimodal_v2/components/slides/SlidesThumbnail.js +47 -0
  420. package/widget/multimodal_v2/components/slides/index.js +61 -0
  421. package/widget/multimodal_v2/constants.js +88 -0
  422. package/widget/multimodal_v2/host.split-css.js +2 -0
  423. package/widget/multimodal_v2/host.string.js +96 -0
  424. package/widget/multimodal_v2/images/icons.js +582 -0
  425. package/widget/multimodal_v2/images/posters/piper_low_res.jpg +0 -0
  426. package/widget/multimodal_v2/index.js +23 -0
  427. package/widget/multimodal_v2/index.panda.js +28 -0
  428. package/widget/multimodal_v2/index.split-css.panda.js +2 -0
  429. package/widget/multimodal_v2/inline_meeting_booker.js +182 -0
  430. package/widget/multimodal_v2/locales/cs.js +196 -0
  431. package/widget/multimodal_v2/locales/da.js +196 -0
  432. package/widget/multimodal_v2/locales/de.js +196 -0
  433. package/widget/multimodal_v2/locales/en.js +196 -0
  434. package/widget/multimodal_v2/locales/en_AU.js +197 -0
  435. package/widget/multimodal_v2/locales/en_GB.js +197 -0
  436. package/widget/multimodal_v2/locales/es.js +197 -0
  437. package/widget/multimodal_v2/locales/es_LA.js +196 -0
  438. package/widget/multimodal_v2/locales/fi.js +196 -0
  439. package/widget/multimodal_v2/locales/fr.js +197 -0
  440. package/widget/multimodal_v2/locales/fr_CA.js +196 -0
  441. package/widget/multimodal_v2/locales/id.js +196 -0
  442. package/widget/multimodal_v2/locales/index.js +48 -0
  443. package/widget/multimodal_v2/locales/it.js +196 -0
  444. package/widget/multimodal_v2/locales/ja.js +196 -0
  445. package/widget/multimodal_v2/locales/ko.js +196 -0
  446. package/widget/multimodal_v2/locales/nb.js +196 -0
  447. package/widget/multimodal_v2/locales/nl.js +196 -0
  448. package/widget/multimodal_v2/locales/pl.js +196 -0
  449. package/widget/multimodal_v2/locales/pt_BR.js +196 -0
  450. package/widget/multimodal_v2/locales/ru.js +196 -0
  451. package/widget/multimodal_v2/locales/sv.js +196 -0
  452. package/widget/multimodal_v2/locales/th.js +196 -0
  453. package/widget/multimodal_v2/locales/tr.js +196 -0
  454. package/widget/multimodal_v2/locales/vi.js +196 -0
  455. package/widget/multimodal_v2/locales/zh_CN.js +196 -0
  456. package/widget/multimodal_v2/locales/zh_TW.js +196 -0
  457. package/widget/multimodal_v2/multimodal.js +633 -0
  458. package/widget/multimodal_v2/multimodal_channel.js +195 -0
  459. package/widget/multimodal_v2/signals/active_conversation_signal.js +33 -0
  460. package/widget/multimodal_v2/signals/allowed_conversation_mode_signal.js +38 -0
  461. package/widget/multimodal_v2/signals/artifact_signal.js +22 -0
  462. package/widget/multimodal_v2/signals/layout_signal.js +98 -0
  463. package/widget/multimodal_v2/signals/messages_signal.js +207 -0
  464. package/widget/multimodal_v2/signals/ui_state_signal.js +128 -0
  465. package/widget/multimodal_v2/stable_bundle_src.js +44 -0
  466. package/widget/multimodal_v2/stores/ai_conversation_store.js +221 -0
  467. package/widget/multimodal_v2/stores/artifact_store.js +205 -0
  468. package/widget/multimodal_v2/stores/base_store.js +16 -0
  469. package/widget/multimodal_v2/stores/call_store.js +770 -0
  470. package/widget/multimodal_v2/stores/call_ui_adapter.js +225 -0
  471. package/widget/multimodal_v2/stores/debug_multimodal_scenario_store.js +471 -0
  472. package/widget/multimodal_v2/stores/decks_store.js +285 -0
  473. package/widget/multimodal_v2/stores/device_store.js +63 -0
  474. package/widget/multimodal_v2/stores/docking_store.js +62 -0
  475. package/widget/multimodal_v2/stores/field_request_store.js +326 -0
  476. package/widget/multimodal_v2/stores/meeting_store.js +477 -0
  477. package/widget/multimodal_v2/stores/participant_store.js +73 -0
  478. package/widget/multimodal_v2/stores/post_call_survey_store.js +160 -0
  479. package/widget/multimodal_v2/stores/pounce_tracking_store.js +163 -0
  480. package/widget/multimodal_v2/stores/pounce_tracking_store_v2.js +511 -0
  481. package/widget/multimodal_v2/stores/presentations_store.js +111 -0
  482. package/widget/multimodal_v2/stores/root_store.js +1919 -0
  483. package/widget/multimodal_v2/stores/screen_share_store.js +217 -0
  484. package/widget/multimodal_v2/stores/slides_store.js +21 -0
  485. package/widget/multimodal_v2/stores/translation_store.js +185 -0
  486. package/widget/multimodal_v2/stores/ui_store.js +496 -0
  487. package/widget/multimodal_v2/stores/waiting_store.js +159 -0
  488. package/widget/multimodal_v2/stores/website_navigation_store.js +767 -0
  489. package/widget/multimodal_v2/styled-system/css/conditions.js +34 -0
  490. package/widget/multimodal_v2/styled-system/css/css.js +48 -0
  491. package/widget/multimodal_v2/styled-system/css/cva.js +96 -0
  492. package/widget/multimodal_v2/styled-system/css/cx.js +13 -0
  493. package/widget/multimodal_v2/styled-system/css/index.js +15 -0
  494. package/widget/multimodal_v2/styled-system/css/sva.js +69 -0
  495. package/widget/multimodal_v2/styled-system/helpers.js +384 -0
  496. package/widget/multimodal_v2/styled-system/jsx/create-style-context.js +96 -0
  497. package/widget/multimodal_v2/styled-system/jsx/factory-helper.js +19 -0
  498. package/widget/multimodal_v2/styled-system/jsx/factory.js +111 -0
  499. package/widget/multimodal_v2/styled-system/jsx/index.js +12 -0
  500. package/widget/multimodal_v2/styled-system/jsx/is-valid-prop.js +22 -0
  501. package/widget/multimodal_v2/types.js +105 -0
  502. package/widget/multimodal_v2/utils/auto_scroller.js +157 -0
  503. package/widget/multimodal_v2/utils/flip_animation.js +124 -0
  504. package/widget/multimodal_v2/utils/focus_gate.js +237 -0
  505. package/widget/multimodal_v2/utils/locale.js +16 -0
  506. package/widget/multimodal_v2/utils/media_queries.js +30 -0
  507. package/widget/multimodal_v2/utils/multimodal_cache.js +19 -0
  508. package/widget/multimodal_v2/utils/mutation_effect.js +14 -0
  509. package/widget/multimodal_v2/utils/navigation_interceptor.js +205 -0
  510. package/widget/multimodal_v2/utils/navigation_strategies/dom_swap.js +393 -0
  511. package/widget/multimodal_v2/utils/navigation_strategies/index.js +12 -0
  512. package/widget/multimodal_v2/utils/navigation_strategies/lwr.js +61 -0
  513. package/widget/multimodal_v2/utils/navigation_strategies/navigation_utils.js +46 -0
  514. package/widget/multimodal_v2/utils/navigation_strategies/next_js.js +24 -0
  515. package/widget/multimodal_v2/utils/navigation_strategies/wouter_v3.js +15 -0
  516. package/widget/multimodal_v2/utils/objects_map.js +38 -0
  517. package/widget/multimodal_v2/utils/perceived_voice_turn_tracker.js +345 -0
  518. package/widget/multimodal_v2/utils/sanitize_html.js +132 -0
  519. package/widget/multimodal_v2/utils/signals.js +97 -0
  520. package/widget/multimodal_v2/utils/slide_zoom.js +114 -0
  521. package/widget/multimodal_v2/utils/theme_styles.js +137 -0
  522. package/widget/multimodal_v2/utils/url_observer.js +52 -0
  523. package/widget/multimodal_v2/utils/voice_onset_detector.js +127 -0
  524. package/widget/page_mirror.js +89 -0
  525. package/widget/page_view_activity_emitter.js +71 -0
  526. package/widget/pardot_visitor.js +137 -0
  527. package/widget/personalization_observer.js +96 -0
  528. package/widget/personalizations_config.js +160 -0
  529. package/widget/qualified_form/constants.js +23 -0
  530. package/widget/qualified_form/phone_utils.js +38 -0
  531. package/widget/qualified_form/qualified_form_action.js +91 -0
  532. package/widget/qualified_form/qualified_form_action_orchestrator.js +21 -0
  533. package/widget/qualified_form/qualified_form_api.js +471 -0
  534. package/widget/scroll_disabler.js +109 -0
  535. package/widget/server-logger.js +156 -0
  536. package/widget/smart_website_config.js +112 -0
  537. package/widget/telemetry/context.js +75 -0
  538. package/widget/telemetry/index.js +16 -0
  539. package/widget/telemetry/messenger_uptime.js +80 -0
  540. package/widget/telemetry/metrics.js +120 -0
  541. package/widget/telemetry/span.js +82 -0
  542. package/widget/telemetry/telemetry.js +180 -0
  543. package/widget/telemetry/tracer.js +41 -0
  544. package/widget/telemetry/tracing_store.js +310 -0
  545. package/widget/tracker.js +916 -0
  546. package/widget/utils/native_globals.js +129 -0
  547. package/widget/v1_adapter.js +50 -0
  548. package/widget/v2_adapter.js +368 -0
  549. package/widget/visitor/base_visitor_state.js +11 -0
  550. package/widget/visitor/cookie_visitor_state.js +128 -0
  551. package/widget/visitor/in_memory_visitor_state.js +29 -0
  552. package/widget/visitor/visitor_state.js +384 -0
  553. package/widget/visitor.js +356 -0
  554. package/widget/widget/linked_widget_v2.js +227 -0
  555. package/widget/widget/page_mirror_factory.js +22 -0
  556. package/widget/widget/sentry.js +130 -0
  557. package/widget/widget/widget.js +1698 -0
  558. package/widget/widget.split-css.js +2 -0
  559. package/widget/widget_bootstrap.js +97 -0
  560. package/widget/widget_object.js +73 -0
@@ -0,0 +1,916 @@
1
+ import { __webpack_require__ } from "../js/runtime.js";
2
+ import { esm_browser_v4, _class_private_field_loose_base, _class_private_field_loose_key, __decorate, __metadata } from "../js/4101.js";
3
+ import { supportedBrowserLanguage } from "../components/helpers/languages.js";
4
+ import { getEventTarget, addEventListener, isDomVisible, cloneEvent } from "../src/dom.js";
5
+ import { PersonalizationManager } from "../src/personalizations/personalization-manager.js";
6
+ import { BUTTON_LIKE_SELECTOR, isWithinQualifiedElement } from "../src/smart_website/utils.js";
7
+ import { fromBase64 } from "../src/string.js";
8
+ import { every, after } from "../src/timing.js";
9
+ import { default as WidgetObject } from "./widget_object.js";
10
+ import { captureWidgetExceptions } from "./capture_widget_exceptions.js";
11
+ import { isSafariUserAgent } from "./constants.js";
12
+ import { default as data360_visitor } from "./data360_visitor.js";
13
+ import { default as eloqua_visitor } from "./eloqua_visitor.js";
14
+ import { armFormCtaBookerIntent } from "./form_cta_booker_intent.js";
15
+ import { default as hubspot_visitor } from "./hubspot_visitor.js";
16
+ import { default as marketo_visitor } from "./marketo_visitor.js";
17
+ import { ButtonsFormsTriggeringTracer } from "./meetings/tracing/buttons_forms_triggering_tracer.js";
18
+ import { default as pardot_visitor } from "./pardot_visitor.js";
19
+ import { default as personalizations_config } from "./personalizations_config.js";
20
+ import { default as smart_website_config } from "./smart_website_config.js";
21
+ import "./telemetry/index.js";
22
+ import { inject } from "../src/mixins/injectable.js";
23
+ import { ignoreIfDisposed } from "../src/mixins/disposable.js";
24
+ import { telemetry, withTelemetryCtx, getTelemetryCtx } from "./telemetry/telemetry.js";
25
+
26
+ const debounce = __webpack_require__("37753");
27
+ var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);
28
+ const throttle = __webpack_require__("61442");
29
+ var throttle_default = /*#__PURE__*/__webpack_require__.n(throttle);
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ const events = [
59
+ "scroll",
60
+ "mousemove",
61
+ "click",
62
+ "touchstart",
63
+ "keypress"
64
+ ];
65
+ const HIJACK_BUTTON_DEBOUNCE_MS = 100;
66
+ const EXPERIENCE_TIMEOUT_MS = 5000;
67
+ const FALLBACK_EVENT_SYMBOL = Symbol("FALLBACK_EVENT");
68
+ const FALLBACK_EVENT_VALUE = "QUALIFIED_FALLBACK_EVENT";
69
+ const HIJACK_CLICK_DEBOUNCE_MS = 1200;
70
+ const PRIVACY_DISCLOSURE_MESSAGE_TYPES = [
71
+ "text",
72
+ "field_entry",
73
+ "lightbox_gather",
74
+ "calendar_event_offer"
75
+ ];
76
+ var _onVisibilityChange = /*#__PURE__*/ _class_private_field_loose_key("_onVisibilityChange");
77
+ class Tracker extends WidgetObject {
78
+ async init() {
79
+ var _this_config_pardotConfig;
80
+ this.telemetryCtx = getTelemetryCtx();
81
+ this.widget.logTiming("Time to init tracker", "widget_time_to_init_tracker_ms");
82
+ events.forEach((event)=>{
83
+ this.callOnDispose(addEventListener(window, event, this.eventHandler, {
84
+ capture: true
85
+ }));
86
+ });
87
+ this.callOnDispose(addEventListener(window, "visibilitychange", _class_private_field_loose_base(this, _onVisibilityChange)[_onVisibilityChange], {
88
+ capture: true
89
+ }));
90
+ this.callOnDispose(addEventListener(window, "pagehide", this.onPageHide, {
91
+ capture: true
92
+ }));
93
+ this.callOnDispose(()=>{
94
+ var _this_widget_personalizationObserver;
95
+ return (_this_widget_personalizationObserver = this.widget.personalizationObserver) == null ? void 0 : _this_widget_personalizationObserver.stop();
96
+ });
97
+ this.callOnDispose(()=>this.handleButtonTriggers.cancel());
98
+ if ((_this_config_pardotConfig = this.config.pardotConfig) == null ? void 0 : _this_config_pardotConfig.accountId) {
99
+ await telemetry.startActiveSpanAsync("Init pardot", {}, this.telemetryCtx, async (span)=>{
100
+ if (!this.config.pardotConfig) return;
101
+ const pardot = await new pardot_visitor(this.config.pardotConfig).getIdentities();
102
+ this.setInitializationParams({
103
+ pardot: {
104
+ prospect_email: pardot.prospectEmail,
105
+ visitor_id: pardot.visitorId
106
+ }
107
+ });
108
+ span.end();
109
+ });
110
+ }
111
+ if (this.isDisposed) {
112
+ return;
113
+ }
114
+ if (this.config.hasMarketo) {
115
+ await telemetry.startActiveSpanAsync("Init marketo", {}, this.telemetryCtx, async (span)=>{
116
+ const marketoToken = await new marketo_visitor().getToken();
117
+ if (marketoToken !== undefined) {
118
+ this.setInitializationParams({
119
+ marketo: {
120
+ token: marketoToken
121
+ }
122
+ });
123
+ }
124
+ span.end();
125
+ });
126
+ }
127
+ if (this.isDisposed) {
128
+ return;
129
+ }
130
+ if (this.config.hasHubSpot) {
131
+ await telemetry.startActiveSpanAsync("Init hubspot", {}, this.telemetryCtx, async (span)=>{
132
+ const hubspotToken = await new hubspot_visitor().getToken(this.widget.config.hubspotTokenRetrievalTimeout);
133
+ if (hubspotToken !== undefined) {
134
+ this.setInitializationParams({
135
+ hubspot: {
136
+ token: hubspotToken
137
+ }
138
+ });
139
+ }
140
+ span.end();
141
+ });
142
+ }
143
+ if (this.isDisposed) {
144
+ return;
145
+ }
146
+ if (this.config.hasData360) {
147
+ await telemetry.startActiveSpanAsync("Init data360", {}, this.telemetryCtx, async (span)=>{
148
+ const deviceId = await new data360_visitor().getDeviceId();
149
+ if (deviceId !== undefined) {
150
+ this.setInitializationParams({
151
+ data360: {
152
+ deviceId
153
+ }
154
+ });
155
+ }
156
+ span.end();
157
+ });
158
+ }
159
+ if (this.isDisposed) {
160
+ return;
161
+ }
162
+ if (this.config.hasEloqua) {
163
+ await telemetry.startActiveSpanAsync("Init eloqua", {}, this.telemetryCtx, async (span)=>{
164
+ const eloquaToken = new eloqua_visitor().getToken();
165
+ if (eloquaToken !== undefined) {
166
+ this.setInitializationParams({
167
+ eloqua: {
168
+ token: eloquaToken
169
+ }
170
+ });
171
+ }
172
+ span.end();
173
+ });
174
+ }
175
+ if (this.isDisposed) {
176
+ return;
177
+ }
178
+ if (this.visitor.smartFormData) {
179
+ if (this.config.hasSmartForms) {
180
+ this.experienceAdapter.showLightboxLoading();
181
+ // Pre-offer SLI: a submit saved by `saveSmartFormData` before this page
182
+ // context existed, replayed at init. Unlike the api_handler path this IS
183
+ // a replay, so the clock necessarily starts here — the original submit
184
+ // moment belongs to a previous context — the same compromise the
185
+ // redirect-replay arm site in `widget.ts` documents.
186
+ //
187
+ // Armed inside the `hasSmartForms` guard rather than beside the params:
188
+ // without smart forms there is no lightbox, no wait the visitor can see,
189
+ // and no path to a booker, so counting it would add journeys to the
190
+ // denominator that could never have produced an offer.
191
+ if (this.featureFlags.bookerJourneySLI) {
192
+ armFormCtaBookerIntent("form:smart_form", this.visitor.smartFormData.botApiName);
193
+ }
194
+ }
195
+ this.setInitializationParams({
196
+ smart_form: {
197
+ field_values: this.visitor.smartFormData.fieldValues,
198
+ bot_api_name: this.visitor.smartFormData.botApiName
199
+ }
200
+ });
201
+ this.visitor.clearSmartFormData();
202
+ }
203
+ if (!this.widget.isMeetingLink) {
204
+ const shouldRebroadcast = !!(this.visitor.lastValidRebroadcastTime && this.visitor.lastValidRebroadcastTime > this.widget.dateProvider.new().getTime());
205
+ if (shouldRebroadcast) {
206
+ const rebroadcastMessage = "[Qualified] Page loaded within the valid rebroadcast period, and thus is going to rebroadcast the last element conversation.";
207
+ this.widget.debugLog(rebroadcastMessage);
208
+ }
209
+ withTelemetryCtx(this.telemetryCtx, ()=>{
210
+ this.createPageView({
211
+ singlePageApp: false,
212
+ reconnecting: false,
213
+ rebroadcast: shouldRebroadcast,
214
+ qualifiedRedirected: this.visitor.qualifiedRedirected
215
+ });
216
+ });
217
+ this.visitor.setQualifiedRedirect(undefined);
218
+ this.visitor.setLastValidRebroadcastTime(undefined);
219
+ }
220
+ const searchParams = new URLSearchParams(window.location.search);
221
+ if (searchParams.has("q_offer_info")) {
222
+ let id, expiration;
223
+ try {
224
+ var _searchParams_get;
225
+ ({ id, expiration } = JSON.parse(fromBase64((_searchParams_get = searchParams.get("q_offer_info")) != null ? _searchParams_get : "")));
226
+ } catch (e) {
227
+ this.widget.debugLog("Error parsing offer info: " + e);
228
+ }
229
+ if (id && expiration && expiration > this.dateProvider.now()) {
230
+ this.pageViewActivityEmitter.emitOfferLanded({
231
+ offerVersionId: id
232
+ });
233
+ }
234
+ const uri = new URL(window.location.href);
235
+ uri.searchParams.delete("q_offer_info");
236
+ // Remove the offer info from the URL so that it doesn't get rebroadcasted
237
+ window.history.replaceState(window.history.state, "", uri.toString());
238
+ }
239
+ this.updatePageVisible();
240
+ this.channel.emit("initTrackerCreatePageView");
241
+ this.initializationParams = {};
242
+ this.initialize();
243
+ }
244
+ startBehaviorTracker() {
245
+ var _this_config_featureFlags;
246
+ this.timerStartedAt = Date.now();
247
+ const secondsToWait = ((_this_config_featureFlags = this.config.featureFlags) == null ? void 0 : _this_config_featureFlags.leads) ? 5 : 10;
248
+ const timerDisposer = every(500, ()=>{
249
+ if (this.timerStartedAt) {
250
+ this.timerTimeOnSite = Date.now() - this.timerStartedAt;
251
+ }
252
+ if (this.experienceAdapter.apMessagesCount >= 2 || this.experienceAdapter.autoRespondPounceCount >= 2 || this.experienceAdapter.userResponded || this.experienceAdapter.visitorResponded) {
253
+ stopBehaviorTracker();
254
+ }
255
+ if (this.timerTimeOnSite > secondsToWait * 1000) {
256
+ // 10s * (1000ms / 1s) = 10,000ms
257
+ this.metActiveThreshold();
258
+ stopBehaviorTracker();
259
+ }
260
+ });
261
+ // For window focusing
262
+ const windowFocusDisposer = addEventListener(window, "focus", ()=>{
263
+ this.timerStartedAt = Date.now();
264
+ });
265
+ const windowBlurDisposer = addEventListener(window, "blur", ()=>{
266
+ this.timerStartedAt = null;
267
+ });
268
+ // For tab focusing
269
+ const pageVisibilityDisposer = addEventListener(window, "visibilitychange", ()=>{
270
+ if (document.visibilityState === "visible") {
271
+ this.timerStartedAt = Date.now();
272
+ } else {
273
+ this.timerStartedAt = null;
274
+ }
275
+ });
276
+ const stopBehaviorTracker = ()=>{
277
+ pageVisibilityDisposer();
278
+ windowFocusDisposer();
279
+ windowBlurDisposer();
280
+ timerDisposer();
281
+ };
282
+ }
283
+ closestSelector(target, triggers) {
284
+ return Object.keys(triggers).find((key)=>{
285
+ const keySelector = key + ", " + key + " *";
286
+ const matchResult = target.matches(keySelector);
287
+ if (matchResult) {
288
+ this.widget.debugLog("trigger " + keySelector + " matched");
289
+ }
290
+ return matchResult;
291
+ });
292
+ }
293
+ handleTriggers(event, triggers, botType) {
294
+ this.widget.debugLog("Handling " + botType + " triggers: " + JSON.stringify(triggers));
295
+ let selector;
296
+ let filterFn;
297
+ const TargetClass = this.featureFlags.smartCtaNestedTriggersSupport ? Element : HTMLElement;
298
+ if (botType === "SMART_CTA") {
299
+ filterFn = (el)=>{
300
+ var _this_smartWebsiteConfig;
301
+ return el instanceof TargetClass && !!(selector = (_this_smartWebsiteConfig = this.smartWebsiteConfig) == null ? void 0 : _this_smartWebsiteConfig.matchingSelector(el));
302
+ };
303
+ } else {
304
+ filterFn = (el)=>el instanceof TargetClass && !!(selector = this.closestSelector(el, triggers));
305
+ }
306
+ const target = getEventTarget(event, {
307
+ filterFn,
308
+ hasShadowDomSupport: this.featureFlags.smartCtaShadowDomSupport,
309
+ nestedTriggersSupport: this.featureFlags.smartCtaNestedTriggersSupport
310
+ });
311
+ if (!selector || !target) return;
312
+ // preventDefault here since we're hijacking the click
313
+ event.preventDefault();
314
+ // stopPropagation here since we're hijacking the click
315
+ event.stopPropagation();
316
+ if (this.waitingForFallbackEvent) {
317
+ return;
318
+ }
319
+ this.afterInit(async ()=>{
320
+ await this.widget.initialized;
321
+ this.lastButtonTriggerEvent = {
322
+ event,
323
+ target,
324
+ selector: selector
325
+ };
326
+ this.hijackClick(botType, triggers[selector], this.lastButtonTriggerEvent);
327
+ this.recordClickActivity(event);
328
+ });
329
+ }
330
+ initialize() {
331
+ this.initialized = true;
332
+ this.afterInitQueue.forEach((queuedAction)=>queuedAction());
333
+ this.afterInitQueue = [];
334
+ }
335
+ setInitializationParams(params) {
336
+ if (this.initialized) {
337
+ throw new Error("Tracker already initialized!");
338
+ } else {
339
+ Object.assign(this.initializationParams, params);
340
+ }
341
+ }
342
+ constructor(injectionProps){
343
+ var _ref;
344
+ var _this_widget_personalizationObserver, _this_config_featureFlags, _this_config_featureFlags1, _this_config_featureFlags2;
345
+ super(injectionProps), Object.defineProperty(this, _onVisibilityChange, {
346
+ writable: true,
347
+ value: void 0
348
+ }), this.initialized = false, // AI Nudge
349
+ this.timerStartedAt = null, this.experienceLoadingStartTimeMap = new Map(), this.lastButtonTriggerEvent = null, this.isBotRedirecting = false, this.waitingForFallbackEvent = false, // @ts-expect-error property decorator typing
350
+ this.eventHandler = (e)=>{
351
+ // Cut down on noise by ignoring mousemove when document isn't focused
352
+ if (e.type !== "mousemove" || document.hasFocus()) {
353
+ this.registerActivity();
354
+ }
355
+ // Conditions are listed independently for clarity.
356
+ // Let non clicks propagate
357
+ if (e.type !== "click") return;
358
+ // Let clicks without a target propagate
359
+ if (!e.target) return;
360
+ if (FALLBACK_EVENT_SYMBOL in e && e[FALLBACK_EVENT_SYMBOL] === FALLBACK_EVENT_VALUE) {
361
+ this.waitingForFallbackEvent = false;
362
+ }
363
+ this.handleButtonTriggers(e);
364
+ }, /**
365
+ * Debounce for the case of EventDispatch triggering duplicated click events for the same
366
+ * selectors within a tight window.
367
+ *
368
+ * See discussion in https://github.com/FatbearLabs/fireball/pull/9915#issuecomment-1716515215
369
+ */ this.handleButtonTriggers = debounce_default()((e)=>{
370
+ // Cannot trigger smart cta/manual bot experiences on meeting link pages
371
+ if (this.widget.isMeetingLink) {
372
+ return;
373
+ }
374
+ // Let fallback events propagate and also debounce trigger handling
375
+ if (FALLBACK_EVENT_SYMBOL in e && e[FALLBACK_EVENT_SYMBOL] === FALLBACK_EVENT_VALUE) {
376
+ return;
377
+ }
378
+ if (e.target instanceof Element && isWithinQualifiedElement(e.target)) {
379
+ return;
380
+ }
381
+ this.handleSmartCtaTriggers(e);
382
+ this.handleManualBotTriggers(e);
383
+ }, HIJACK_BUTTON_DEBOUNCE_MS, {
384
+ leading: true,
385
+ trailing: false
386
+ }), this.recordClickActivity = (e)=>{
387
+ if (e.target instanceof Element && this.pageViewActivityEmitter && this.smartWebsiteConfig) {
388
+ const selector = this.smartWebsiteConfig.matchingSelector(e.target);
389
+ if (selector) {
390
+ var _this_personalizationsConfig;
391
+ const metadata = (_this_personalizationsConfig = this.personalizationsConfig) == null ? void 0 : _this_personalizationsConfig.lookupSelectorMetadata(selector);
392
+ this.pageViewActivityEmitter.emitPersonalizationClick({
393
+ selector,
394
+ experimentArmId: metadata == null ? void 0 : metadata.experimentArmId
395
+ });
396
+ }
397
+ }
398
+ }, this.updatePageVisible = ()=>{
399
+ if (!this.navigating) {
400
+ this.pageVisible = isDomVisible();
401
+ }
402
+ }, // Idle tracking
403
+ this.registerActivity = debounce_default()(()=>{
404
+ if (this.isDisposed) {
405
+ return;
406
+ }
407
+ this.widget.registerClientActivity();
408
+ // visitor active again, create new page view
409
+ if (this.expiredFromInactivity && document.hasFocus()) {
410
+ var _this_channel_connect;
411
+ this.expiredFromInactivity = false;
412
+ (_this_channel_connect = this.channel.connect()) == null ? void 0 : _this_channel_connect.then(()=>{
413
+ if (this.widget.isMeetingLink) {
414
+ // TODO: remove once meeting link has its own pack
415
+ this.recordMeetingLinkLoad();
416
+ } else {
417
+ this.createPageView();
418
+ }
419
+ // Needs to be toggled only after creating page view so that SPA page
420
+ // views are blocked
421
+ this.initialize();
422
+ this.initializationParams = {};
423
+ });
424
+ }
425
+ }, 200), this.hijackClick = debounce_default()(async (botType, apiName, param)=>{
426
+ let { target, selector, event } = param;
427
+ const transaction = esm_browser_v4();
428
+ const startTime = performance.now();
429
+ this.experienceLoadingStartTimeMap.set(transaction, startTime);
430
+ let loadingId;
431
+ if (botType === "MANUAL") {
432
+ if (this.config.hasMeetingBookerExperienceBuilder) {
433
+ this.experienceAdapter.showLightboxLoading();
434
+ } else {
435
+ this.experienceAdapter.showMessengerLoading();
436
+ }
437
+ } else if (botType === "SMART_CTA") {
438
+ try {
439
+ ButtonsFormsTriggeringTracer.startButtonClickSpan();
440
+ // Pre-offer SLI: the click is the visitor's intent moment. Gated at arm,
441
+ // so nothing is tracked at all for teams without the flag.
442
+ if (this.featureFlags.bookerJourneySLI) {
443
+ // `apiName` — the experience this selector is configured to trigger —
444
+ // not `visitor.botApiName`, which is a state key no widget code path
445
+ // ever writes (only `smartFormData.botApiName` is set), so it would
446
+ // leave every CTA intent with no experience dimension at all.
447
+ armFormCtaBookerIntent("cta:" + selector, apiName);
448
+ }
449
+ const loadingTarget = this.featureFlags.smartCtaNestedTriggersSupport ? target.closest(BUTTON_LIKE_SELECTOR) : target;
450
+ this.personalizationManager.add(loadingTarget, selector);
451
+ loadingId = this.personalizationManager.applyLoading(loadingTarget, "spinner");
452
+ loadingId && this.experienceAdapter.showInlineLoading(loadingId);
453
+ } catch (e) {
454
+ this.widget.debugLog("Failed to add inline spinner " + e.message);
455
+ this.widget.serverLog({
456
+ message: e.message,
457
+ type: "both",
458
+ extra: {
459
+ event: "meeting_progress_loading_bar_error"
460
+ }
461
+ });
462
+ }
463
+ }
464
+ this.widget.debugLog("Showing experience for trigger [" + transaction + "]: " + selector);
465
+ this.showExperience(apiName, undefined, transaction);
466
+ const showExperienceDisposer = after(EXPERIENCE_TIMEOUT_MS, ()=>{
467
+ if (!this.experienceLoadingStartTimeMap.has(transaction)) {
468
+ return;
469
+ }
470
+ this.widget.debugLog("Experience timed out [" + transaction + "]: " + selector);
471
+ this.experienceAdapter.closeLightbox();
472
+ loadingId && this.personalizationManager.removeLoadingByUuid(loadingId);
473
+ // This fallback is called if we don't receive a response from the server within the timeout
474
+ this.dispatchFallbackEvent({
475
+ event,
476
+ target,
477
+ selector
478
+ });
479
+ });
480
+ this.callOnDispose(showExperienceDisposer);
481
+ }, HIJACK_CLICK_DEBOUNCE_MS, {
482
+ leading: true,
483
+ trailing: false
484
+ }), this.handleManualBotTriggers = (e)=>{
485
+ this.handleTriggers(e, this.config.manualBotTriggers, "MANUAL");
486
+ }, this.handleSmartCtaTriggers = (e)=>{
487
+ var _this_smartWebsiteConfig;
488
+ if ((_this_smartWebsiteConfig = this.smartWebsiteConfig) == null ? void 0 : _this_smartWebsiteConfig.hasCurrentTriggerSelectors) {
489
+ this.handleTriggers(e, this.smartWebsiteConfig.triggerSelectors, "SMART_CTA");
490
+ }
491
+ }, this.afterInit = (callback)=>{
492
+ if (this.initialized) {
493
+ callback();
494
+ } else {
495
+ this.afterInitQueue.push(callback);
496
+ }
497
+ }, this.handlePardotFormSubmitted = async (botApiName)=>{
498
+ if (botApiName === void 0) botApiName = "default";
499
+ await telemetry.startActiveSpanAsync("Pardot form submitted", {}, this.telemetryCtx, async (span)=>{
500
+ const pardot = this.config.pardotConfig ? await new pardot_visitor(this.config.pardotConfig).getIdentities() : {};
501
+ if (this.isDisposed) {
502
+ return;
503
+ }
504
+ this.channel.send({
505
+ event: "pardotFormSubmitted",
506
+ payload: {
507
+ bot_api_name: botApiName,
508
+ pardot_prospect_email: pardot.prospectEmail,
509
+ pardot_visitor_id: pardot.visitorId
510
+ }
511
+ });
512
+ span.end();
513
+ });
514
+ }, this.handleSmartFormSubmitted = (fieldValues, botApiName)=>{
515
+ if (botApiName === void 0) botApiName = "default";
516
+ this.channel.send({
517
+ event: "smartFormSubmitted",
518
+ payload: {
519
+ field_values: fieldValues,
520
+ bot_api_name: botApiName
521
+ }
522
+ });
523
+ }, // TODO: Fix eslint error when this file is edited
524
+ // eslint-disable-next-line default-param-last
525
+ this.showExperience = (botApiName, initialClientState, transaction)=>{
526
+ if (botApiName === void 0) botApiName = "default";
527
+ this.channel.perform("show_experience", {
528
+ api_name: botApiName,
529
+ initial_client_state: initialClientState,
530
+ transaction
531
+ });
532
+ }, this.showFormExperience = (botApiName, formDestinations)=>{
533
+ var _this_widget_visitor_smartFormData, _this_widget_visitor_formData, _this_widget_visitor_smartFormData1;
534
+ if (!this.config.hasSmartForms) return;
535
+ const validBotApiName = botApiName || ((_this_widget_visitor_smartFormData = this.widget.visitor.smartFormData) == null ? void 0 : _this_widget_visitor_smartFormData.botApiName);
536
+ const validFieldValues = ((_this_widget_visitor_formData = this.widget.visitor.formData) == null ? void 0 : _this_widget_visitor_formData.fieldValues) || ((_this_widget_visitor_smartFormData1 = this.widget.visitor.smartFormData) == null ? void 0 : _this_widget_visitor_smartFormData1.fieldValues);
537
+ this.channel.perform("show_form_experience", {
538
+ bot_api_name: validBotApiName,
539
+ field_values: validFieldValues,
540
+ form_data: this.widget.visitor.formData,
541
+ form_destinations: formDestinations
542
+ });
543
+ this.widget.visitor.clearSmartFormData();
544
+ this.widget.visitor.clearFormData();
545
+ }, // TODO: extract redirect logic into its own handler, for setting up a form experience
546
+ // to be shown on the next page load
547
+ this.showExperienceForForm = (formType, formData, showOnRedirect)=>{
548
+ if (showOnRedirect === void 0) showOnRedirect = false;
549
+ var _formData_formActionUrl;
550
+ if (!this.config.hasSmartForms) {
551
+ this.widget.debugState.logEvent("tracker:showExperienceForForm", "error", {}, "smart_forms flag is not enabled");
552
+ return;
553
+ }
554
+ if (formData.formActionUrl && !this.config.formBotTriggers.pardot.includes((_formData_formActionUrl = formData.formActionUrl) == null ? void 0 : _formData_formActionUrl.replace(/^https?:\/\//, ""))) {
555
+ this.widget.debugState.logEvent("tracker:showExperienceForForm", "error", {}, "Form action URL is not in the list of Pardot form action URLs");
556
+ return;
557
+ }
558
+ if (showOnRedirect) {
559
+ this.widget.visitor.setFormExperienceDataWithExpiry({
560
+ formType,
561
+ formData
562
+ });
563
+ window.postMessage({
564
+ source: "qualified",
565
+ token: this.config.token,
566
+ message: "done",
567
+ verb: "showExperienceForForm"
568
+ }, window.location.origin);
569
+ } else {
570
+ var _formData_formActionUrl1;
571
+ ButtonsFormsTriggeringTracer.startSubmitFormSpan({
572
+ "form.type": formType,
573
+ "form.with_redirect": false
574
+ });
575
+ // Pre-offer SLI: the submit is the visitor's intent moment.
576
+ //
577
+ // No experience name on this path. `smartFormData` is written only by the
578
+ // `saveSmartFormData` API, so for a Marketo/HubSpot/custom submit arriving
579
+ // here any value it holds belongs to a different journey — reading it would
580
+ // attribute this form to an unrelated experience, which is worse than
581
+ // leaving the dimension absent. `formData` carries no api name either
582
+ // (`formEmail` / `formId` / `formActionUrl` only). Same call as the
583
+ // redirect-replay site in `widget.ts`.
584
+ if (this.featureFlags.bookerJourneySLI) {
585
+ armFormCtaBookerIntent("form:" + formType);
586
+ }
587
+ this.experienceAdapter.showLightboxLoading();
588
+ this.channel.perform("show_experience_for_form", {
589
+ form_type: formType,
590
+ form_data: {
591
+ raw: formData.raw || formData,
592
+ form_id: formData.formId,
593
+ form_email: formData.formEmail,
594
+ form_action_url: (_formData_formActionUrl1 = formData.formActionUrl) == null ? void 0 : _formData_formActionUrl1.replace(/^https?:\/\//, "")
595
+ }
596
+ });
597
+ }
598
+ this.widget.debugState.logEvent("tracker:showExperienceForForm", "success", {});
599
+ }, this.metActiveThreshold = ()=>{
600
+ const meta_description = document.querySelector('meta[name="description"]');
601
+ let description = null;
602
+ if (meta_description instanceof HTMLMetaElement) {
603
+ description = meta_description.content;
604
+ }
605
+ this.channel.perform("met_active_threshold", {
606
+ // Hack to prevent "Message from" title flashes from being fed to the backend
607
+ // Needed only temporarily until we start using chunks in auto pounce instead of the HTML title
608
+ title: this.resolveTitle(),
609
+ description,
610
+ source: this.experienceAdapter.apMessagesCount > 0 ? "auto_pounce" : "auto_respond"
611
+ });
612
+ }, this.resolveTitle = ()=>{
613
+ const { originalDocumentTitle } = this.experienceAdapter;
614
+ const documentTitle = document.title;
615
+ const resolvedTitle = originalDocumentTitle != null ? originalDocumentTitle : documentTitle;
616
+ if (resolvedTitle.startsWith("Message from")) {
617
+ var _this_experienceAdapter_originalDocumentTitle;
618
+ const message = "Resolved title is flash title for met_active_threshold";
619
+ this.widget.serverLog({
620
+ message,
621
+ extra: {
622
+ original_document_title: (_this_experienceAdapter_originalDocumentTitle = this.experienceAdapter.originalDocumentTitle) != null ? _this_experienceAdapter_originalDocumentTitle : "original_document_title was null or undefined",
623
+ document_title: document.title,
624
+ url: window.document.location.href
625
+ }
626
+ });
627
+ }
628
+ return resolvedTitle.startsWith("Message from") ? null : resolvedTitle;
629
+ }, this.getIdentity = ()=>{
630
+ this.channel.send({
631
+ event: "getIdentity",
632
+ payload: {}
633
+ });
634
+ }, this.setFieldValues = (fieldValues)=>{
635
+ this.channel.send({
636
+ event: "setFieldValues",
637
+ payload: {
638
+ field_values: fieldValues
639
+ }
640
+ });
641
+ }, // TODO: remove once meeting link has its own pack
642
+ this.recordMeetingLinkLoad = (token)=>{
643
+ if (token === void 0) token = undefined;
644
+ const data = Object.assign({}, this.initializationParams, {
645
+ wu: this.widget.widgetId,
646
+ url: document.location.href,
647
+ wv: this.config.version,
648
+ referrer: document.referrer,
649
+ mlt: token || this.widget.meetingLinkToken
650
+ });
651
+ return this.channel.perform("record_meeting_link_load", data);
652
+ }, this.recordPrivacyDisclosure = (target, conversationId)=>{
653
+ const browserLocale = supportedBrowserLanguage(navigator.language);
654
+ return this.channel.perform("record_privacy_disclosure", {
655
+ target,
656
+ conversation_id: conversationId,
657
+ meeting_link_locale: browserLocale
658
+ });
659
+ }, this.recordPrivacyDisclosureConsent = (message)=>{
660
+ if (message.type && PRIVACY_DISCLOSURE_MESSAGE_TYPES.includes(message.type)) {
661
+ return this.channel.perform("record_privacy_disclosure_consent", {
662
+ message_id: message.id
663
+ });
664
+ }
665
+ }, this.createPageView = (param)=>{
666
+ let { singlePageApp, reconnecting, rebroadcast, qualifiedRedirected } = param === void 0 ? {
667
+ singlePageApp: false,
668
+ reconnecting: false,
669
+ rebroadcast: false,
670
+ qualifiedRedirected: false
671
+ } : param;
672
+ const telemetryCtx = getTelemetryCtx();
673
+ // Ignore if URL hasn't changed
674
+ if (singlePageApp && document.location.href === this.lastPageViewUrl) return;
675
+ if (singlePageApp && !this.initialized) return;
676
+ this.lastPageViewUrl = document.location.href;
677
+ const data = Object.assign({}, this.initializationParams, {
678
+ wu: this.widget.widgetId,
679
+ url: document.location.href,
680
+ single_page_app: singlePageApp,
681
+ wv: this.config.version,
682
+ referrer: document.referrer,
683
+ reconnecting,
684
+ rebroadcast,
685
+ has_custom_form_data: this.visitor.hasFormData,
686
+ redirect_count: this.getRedirectCount()
687
+ });
688
+ const urlParams = new URLSearchParams(document.location.search);
689
+ if (urlParams.get("q_profiler_id")) {
690
+ data.q_profiler_id = urlParams.get("q_profiler_id");
691
+ }
692
+ this.widget.debugLog("Show clientside lightbox loading", "info", {
693
+ rebroadcast: String(rebroadcast),
694
+ qualifiedRedirected: String(qualifiedRedirected)
695
+ });
696
+ if (rebroadcast && !qualifiedRedirected) {
697
+ this.experienceAdapter.showLightboxLoading();
698
+ }
699
+ return withTelemetryCtx(telemetryCtx, ()=>this.channel.perform("record_page_view", data));
700
+ }, this.logExperienceLoadingTime = (transaction)=>{
701
+ const startTime = this.experienceLoadingStartTimeMap.get(transaction);
702
+ if (!startTime) {
703
+ return;
704
+ }
705
+ const delta = performance.now() - startTime;
706
+ const message = "Button experience loading time";
707
+ this.widget.logTiming(message, "buttons_time_to_socket_ms", delta);
708
+ this.experienceLoadingStartTimeMap.delete(transaction);
709
+ }, this.dispatchFallbackEvent = (buttonTriggerEvent)=>{
710
+ var _this_lastButtonTriggerEvent;
711
+ const { event, target: clickedElement, selector } = buttonTriggerEvent;
712
+ if (!event || this.isBotRedirecting) return;
713
+ // Force-open in current tab, because Safari does not allow us to open in a new tab asynchronously.
714
+ // This is a compromise. New tab is ideal, but Safari makes this impossible.
715
+ if (isSafariUserAgent && clickedElement instanceof HTMLAnchorElement && clickedElement.href && typeof clickedElement.target === "string" && clickedElement.target.toLowerCase() === "_blank") {
716
+ window.location.href = clickedElement.href;
717
+ this.waitingForFallbackEvent = false;
718
+ } else {
719
+ this.waitingForFallbackEvent = true;
720
+ const newEvent = cloneEvent(event, {
721
+ [FALLBACK_EVENT_SYMBOL]: FALLBACK_EVENT_VALUE
722
+ });
723
+ // Manipulations to host's DOM can cause the last event target to be detached
724
+ // For example, when adding a loading icon, we cleanup the inners of a button.
725
+ // Since the event is triggered on the cleaned element of that button,
726
+ // We need to check if target isConnected to DOM.
727
+ if (clickedElement == null ? void 0 : clickedElement.isConnected) {
728
+ clickedElement.dispatchEvent(newEvent);
729
+ } else if (selector) {
730
+ var _this_personalizationManager_get;
731
+ (_this_personalizationManager_get = this.personalizationManager.get(selector)) == null ? void 0 : _this_personalizationManager_get.dispatchEvent(newEvent);
732
+ }
733
+ }
734
+ if (event === ((_this_lastButtonTriggerEvent = this.lastButtonTriggerEvent) == null ? void 0 : _this_lastButtonTriggerEvent.event)) {
735
+ this.lastButtonTriggerEvent = null;
736
+ }
737
+ }, _class_private_field_loose_base(this, _onVisibilityChange)[_onVisibilityChange] = throttle_default()(()=>{
738
+ if (!this.isDisposed) {
739
+ this.updatePageVisible();
740
+ this.sendHeartbeat();
741
+ }
742
+ }, 1000), // @ts-expect-error property decorator typing
743
+ this.onPageHide = ()=>{
744
+ this.navigating = true;
745
+ }, // @ts-expect-error property decorator typing
746
+ this.onPing = ()=>{
747
+ var _this_config_heartbeatPingDivisor;
748
+ // Heartbeat frequency divisor. Default 2 (was hardcoded prior to INF-1108).
749
+ // With 4-second pings, divisor of 2 sends a heartbeat every 8 seconds (every 2nd ping).
750
+ // Fallback to 2 if config is missing (server-side validates to >= 1).
751
+ const divisor = (_this_config_heartbeatPingDivisor = this.config.heartbeatPingDivisor) != null ? _this_config_heartbeatPingDivisor : 2;
752
+ if (this.pingCounter++ % divisor === 0) {
753
+ this.sendHeartbeat();
754
+ }
755
+ }, this.sendHeartbeat = ()=>{
756
+ if (this.heartbeatManager.blocked) {
757
+ return;
758
+ }
759
+ this.channel.send({
760
+ event: "heartbeat",
761
+ payload: {
762
+ client_activity_at: this.widget.lastClientActivityAt,
763
+ page_visible: this.pageVisible
764
+ }
765
+ });
766
+ }, // @ts-expect-error property decorator typing
767
+ this.onSessionEnded = ()=>{
768
+ // TODO: when would this happen, backend didn't see heartbeats for awhile, but the cables are
769
+ // still connected?
770
+ this.channel.disconnect();
771
+ this.channel.connect();
772
+ }, // @ts-expect-error property decorator typing
773
+ this.onIdleTooLong = ()=>{
774
+ this.expiredFromInactivity = true;
775
+ this.initialized = false;
776
+ this.channel.disconnect();
777
+ }, // @ts-expect-error property decorator typing
778
+ this.onBotRedirect = ()=>{
779
+ this.visitor.setQualifiedRedirect(true);
780
+ this.isBotRedirecting = true;
781
+ }, // @ts-expect-error property decorator typing
782
+ this.onEndLoadingState = ()=>{
783
+ var // Clear any active loading overlay in the v2 adapter path.
784
+ // In v1, the iframe handles this via postMessage; v2 needs an explicit signal write.
785
+ // Guard: experienceAdapter may not be initialized yet if the channel fires before Widget.init() completes.
786
+ _this_experienceAdapter;
787
+ (_this_experienceAdapter = this.experienceAdapter) == null ? void 0 : _this_experienceAdapter.closeLightbox();
788
+ // This fallback is called if we should trigger the default behavior of the last button click
789
+ // i.e if the button click was hijacked but the visitor was disqualified
790
+ this.lastButtonTriggerEvent && this.dispatchFallbackEvent(this.lastButtonTriggerEvent);
791
+ }, this.getRedirectCount = ()=>{
792
+ var _performance_getEntriesByType;
793
+ const navigationEntry = performance.getEntriesByType == null ? void 0 : (_performance_getEntriesByType = performance.getEntriesByType.call(performance, "navigation")) == null ? void 0 : _performance_getEntriesByType[0];
794
+ return navigationEntry == null ? void 0 : navigationEntry.redirectCount;
795
+ };
796
+ this.lastPageViewUrl = "";
797
+ this.pingCounter = 0;
798
+ this.navigating = false;
799
+ this.pageVisible = true;
800
+ this.expiredFromInactivity = false;
801
+ this.initializationParams = {};
802
+ this.telemetryCtx = undefined;
803
+ this.afterInitQueue = [];
804
+ // AI Nudge
805
+ this.timerStartedAt = null;
806
+ this.timerTimeOnSite = 0;
807
+ if (this.config.smartCtaTriggers) {
808
+ this.smartWebsiteConfig = new smart_website_config({
809
+ smartCtaTriggers: this.config.smartCtaTriggers
810
+ });
811
+ }
812
+ this.personalizationManager = ((_this_widget_personalizationObserver = this.widget.personalizationObserver) == null ? void 0 : _this_widget_personalizationObserver.manager) || new PersonalizationManager((_ref = (_this_config_featureFlags = this.config.featureFlags) == null ? void 0 : _this_config_featureFlags.smartCtaEnhancedFreezing) != null ? _ref : false);
813
+ if (this.config.experimentSelectors && this.config.experimentSelectors.length > 0) {
814
+ var _this_widget_personalizationObserver1;
815
+ (_this_widget_personalizationObserver1 = this.widget.personalizationObserver) == null ? void 0 : _this_widget_personalizationObserver1.stop(true);
816
+ this.personalizationsConfig = new personalizations_config({
817
+ experimentSelectors: this.config.experimentSelectors,
818
+ currentUrl: window.location.href,
819
+ activityEmitter: this.pageViewActivityEmitter
820
+ }, this.personalizationManager);
821
+ }
822
+ this.channel.on("ping", this.onPing);
823
+ this.channel.on("sessionEnded", this.onSessionEnded);
824
+ this.channel.on("idleTooLong", this.onIdleTooLong);
825
+ this.channel.on("redirect", this.onBotRedirect);
826
+ this.channel.on("endLoadingState", this.onEndLoadingState);
827
+ this.channel.on("reconnected", ()=>{
828
+ /**
829
+ * When idle, "initialized" is set to false.
830
+ * We just want to send this pageview if the reconnection was from an active connection trying to recover after being lost
831
+ * instead of idle connection reconnecting.
832
+ * Idle connections page views are already being taken care on "registerActivity" debounce.
833
+ */ if (this.initialized) {
834
+ this.createPageView({
835
+ singlePageApp: false,
836
+ reconnecting: true,
837
+ rebroadcast: false
838
+ });
839
+ }
840
+ });
841
+ this.channel.on("personalizeWebsite", (data)=>{
842
+ var _this_personalizationsConfig;
843
+ return (_this_personalizationsConfig = this.personalizationsConfig) == null ? void 0 : _this_personalizationsConfig.onPersonalizeWebsite(data);
844
+ });
845
+ this.channel.on("showExperienceEnd", this.logExperienceLoadingTime);
846
+ this.channel.on("endInlineLoading", (uuid)=>{
847
+ this.personalizationManager.removeLoadingByUuid(uuid);
848
+ });
849
+ this.channel.on("widgetEvent", (name)=>this.widget.emitWidgetEvent(name));
850
+ this.channel.on("syncScriptState", (scriptState)=>{
851
+ try {
852
+ this.widget.iframeManager.handleSyncScriptState(scriptState);
853
+ } catch (unused) {
854
+ // V2 path: IframeManager not registered, syncScriptState is v1-only — safe to ignore
855
+ }
856
+ });
857
+ if (((_this_config_featureFlags1 = this.config.featureFlags) == null ? void 0 : _this_config_featureFlags1.demo) || ((_this_config_featureFlags2 = this.config.featureFlags) == null ? void 0 : _this_config_featureFlags2.demoKillSessionShortcut)) {
858
+ // Demo utility to quickly kill the session. Shift-Cmd-K (Mac) or Shift-Ctrl-K (Windows/Linux)
859
+ this.callOnDispose(addEventListener(document, "keydown", async (event)=>{
860
+ // eslint-disable-next-line rulesdir/enforce-comment
861
+ if (event.key === "k" && (event.metaKey || event.ctrlKey) && event.shiftKey) {
862
+ event.preventDefault();
863
+ await this.channel.perform("kill_session", {});
864
+ this.channel.disconnect();
865
+ // Show a small red dot in the bottom right corner to let SE know session was killed
866
+ // z-index allows it to show over the multimodal widget
867
+ const indicator = document.createElement("div");
868
+ // eslint-disable-next-line rulesdir/enforce-comment
869
+ indicator.style.cssText = "position:fixed;bottom:10px;right:10px;width:10px;height:10px;background:#f44;border-radius:50%;z-index:2147483648";
870
+ document.body.appendChild(indicator);
871
+ }
872
+ }));
873
+ }
874
+ }
875
+ }
876
+ __decorate([
877
+ inject,
878
+ __metadata("design:type", typeof HeartbeatManager === "undefined" ? Object : HeartbeatManager)
879
+ ], Tracker.prototype, "heartbeatManager", void 0);
880
+ __decorate([
881
+ ignoreIfDisposed
882
+ ], Tracker.prototype, "eventHandler", void 0);
883
+ __decorate([
884
+ captureWidgetExceptions,
885
+ __metadata("design:type", Function),
886
+ __metadata("design:paramtypes", [
887
+ typeof Event === "undefined" ? Object : Event,
888
+ typeof TriggerQuerySelectors === "undefined" ? Object : TriggerQuerySelectors,
889
+ typeof BotType === "undefined" ? Object : BotType
890
+ ]),
891
+ __metadata("design:returntype", void 0)
892
+ ], Tracker.prototype, "handleTriggers", null);
893
+ __decorate([
894
+ ignoreIfDisposed
895
+ ], Tracker.prototype, "onPageHide", void 0);
896
+ __decorate([
897
+ ignoreIfDisposed
898
+ ], Tracker.prototype, "onPing", void 0);
899
+ __decorate([
900
+ ignoreIfDisposed
901
+ ], Tracker.prototype, "onSessionEnded", void 0);
902
+ __decorate([
903
+ ignoreIfDisposed
904
+ ], Tracker.prototype, "onIdleTooLong", void 0);
905
+ __decorate([
906
+ ignoreIfDisposed
907
+ ], Tracker.prototype, "onBotRedirect", void 0);
908
+ __decorate([
909
+ ignoreIfDisposed
910
+ ], Tracker.prototype, "onEndLoadingState", void 0);
911
+ /* export default */ const tracker = (Tracker);
912
+
913
+ var tracker_HIJACK_CLICK_DEBOUNCE_MS = /* unused export */ undefined;
914
+ var tracker_PRIVACY_DISCLOSURE_MESSAGE_TYPES = /* unused export */ undefined;
915
+ export { tracker_HIJACK_CLICK_DEBOUNCE_MS as HIJACK_CLICK_DEBOUNCE_MS, tracker_PRIVACY_DISCLOSURE_MESSAGE_TYPES as PRIVACY_DISCLOSURE_MESSAGE_TYPES };
916
+ export default tracker;