@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,249 @@
1
+ import { __webpack_require__ } from "../../js/runtime.js";
2
+ import { _class_private_field_loose_base, _class_private_field_loose_key } from "../../js/4101.js";
3
+ import { isIframed } from "../../src/iframes.js";
4
+ import { isIn } from "../../src/utils.js";
5
+ import { default as WidgetObject } from "../widget_object.js";
6
+
7
+ __webpack_require__("67353");
8
+ const isFunction = __webpack_require__("42902");
9
+ var isFunction_default = /*#__PURE__*/__webpack_require__.n(isFunction);
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ const API_VERBS = (/* unused pure expression or super */ null && ([
18
+ "initialize",
19
+ "open",
20
+ "initPardotForm",
21
+ "initPardotFormThankYou",
22
+ "parsePardotForm",
23
+ "parsePardotFormForLandingPage",
24
+ "saveFormData",
25
+ "saveSmartFormData",
26
+ "sendSmartFormData",
27
+ "pardotFormSubmitted",
28
+ "showExperience",
29
+ "endExperience",
30
+ "registerForm",
31
+ "showForm",
32
+ "showFormExperience",
33
+ "showExperienceForForm",
34
+ "refreshVisitorState",
35
+ "getIdentity",
36
+ "handleEvents",
37
+ "handleMessengerEvents",
38
+ "handleWidgetEvents",
39
+ "identify",
40
+ "page",
41
+ "setCookieConsent",
42
+ "teardown",
43
+ "emitFormFill",
44
+ "submitEmbeddedForm",
45
+ "logDebugEvent",
46
+ "setChatIsVisible",
47
+ "startCall",
48
+ "startChat"
49
+ ]));
50
+ const API_VERBS_ALLOWED_FOR_ACTIONS = [
51
+ "open",
52
+ "showExperience"
53
+ ];
54
+ const PARDOT_EMAIL_SELECTOR = "p.email input, div.email input";
55
+ /**
56
+ * List of API properties that should be preserved when the qualified object is replaced.
57
+ * These are sub-APIs that can be registered independently (e.g., via separate scripts).
58
+ */ const API_PROPERTIES = [
59
+ "docking",
60
+ "sentinel"
61
+ ];
62
+ var // TODO get classPrivateMethods working for eslint below....
63
+ // E.g. <button data-qualified-action="doit"
64
+ // data-qualified-arg="value1"
65
+ // data-qualified-arg-1="value2"/>
66
+ //
67
+ _initDeclarativeApi = /*#__PURE__*/ _class_private_field_loose_key("_initDeclarativeApi"), _initSmartForms = /*#__PURE__*/ _class_private_field_loose_key("_initSmartForms"), /**
68
+ * Extract only the known API properties from an object.
69
+ */ _getPreservedProperties = /*#__PURE__*/ _class_private_field_loose_key("_getPreservedProperties");
70
+ class BaseApiHandler extends WidgetObject {
71
+ init() {
72
+ var _this = this;
73
+ // Ensure all public facing objects exist. Usually created by the preamble before <script> we
74
+ // give to customers in the snippet.
75
+ if (!window.QualifiedObject) {
76
+ window.QualifiedObject = "qualified";
77
+ }
78
+ const qObjName = window.QualifiedObject, qObj = window[qObjName], hasEnqueued = isFunction_default()(qObj) && Array.isArray(qObj.q) && qObj.q.length > 0;
79
+ if (hasEnqueued) {
80
+ const queue = qObj.q;
81
+ // Prioritize execution of the first 'initialize' call if present.
82
+ const initializeIdx = queue.findIndex((fn)=>fn && fn[0] === "initialize");
83
+ if (initializeIdx !== -1) {
84
+ this.execute(...queue[initializeIdx]);
85
+ queue.splice(initializeIdx, 1);
86
+ }
87
+ // Save off remaining enqueued api calls
88
+ this.queue = queue;
89
+ delete qObj.q;
90
+ }
91
+ // Redefine public-facing API to use this handler.
92
+ // Preserve known sub-API properties (like .docking) from the old qualified object
93
+ const preservedProps = _class_private_field_loose_base(this, _getPreservedProperties)[_getPreservedProperties](qObj);
94
+ window[qObjName] = function() {
95
+ for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
96
+ args[_key] = arguments[_key];
97
+ }
98
+ _this.execute(...args); // eslint-disable-line prefer-rest-params
99
+ };
100
+ Object.defineProperties(window[qObjName], preservedProps);
101
+ this.initialized = true;
102
+ }
103
+ cleanup() {
104
+ if (this.initialized) {
105
+ // Restore snippet's original qualified(...) function that queues up API calls.
106
+ // Preserve known sub-API properties (like .docking) from the current qualified object
107
+ const preservedProps = _class_private_field_loose_base(this, _getPreservedProperties)[_getPreservedProperties](window[window.QualifiedObject]);
108
+ window[window.QualifiedObject] = function() {
109
+ for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
110
+ args[_key] = arguments[_key];
111
+ }
112
+ window[window.QualifiedObject].q.push(args);
113
+ };
114
+ window[window.QualifiedObject].q = [];
115
+ Object.defineProperties(window[window.QualifiedObject], preservedProps);
116
+ this.initialized = false;
117
+ }
118
+ super.cleanup();
119
+ }
120
+ markReady() {
121
+ this.ready = true;
122
+ if (this.queue.length > 0) {
123
+ this.queue.forEach((args)=>this.execute(...args));
124
+ this.queue = [];
125
+ }
126
+ }
127
+ execute(fn) {
128
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
129
+ args[_key - 1] = arguments[_key];
130
+ }
131
+ if (fn && this.handlers[fn]) {
132
+ if (this.ready || fn === "initialize") {
133
+ // Should execute immediately?
134
+ this.handlers[fn].apply(undefined, args);
135
+ } else {
136
+ this.queue.push([
137
+ fn,
138
+ ...args
139
+ ]);
140
+ }
141
+ } else {
142
+ console.warn("Qualified: Invalid API call '" + fn + "'."); // eslint-disable-line no-console
143
+ }
144
+ }
145
+ constructor(injectionProps, handlers){
146
+ super(injectionProps), Object.defineProperty(this, _getPreservedProperties, {
147
+ value: getPreservedProperties
148
+ }), Object.defineProperty(this, _initDeclarativeApi, {
149
+ writable: true,
150
+ value: void 0
151
+ }), Object.defineProperty(this, _initSmartForms, {
152
+ writable: true,
153
+ value: void 0
154
+ }), this.initialized = false, this.ready = false, _class_private_field_loose_base(this, _initDeclarativeApi)[_initDeclarativeApi] = ()=>{
155
+ [].slice.call(document.querySelectorAll("[data-qualified-action]")).forEach((el)=>{
156
+ // Parse API args from data attributes
157
+ const fn = el.dataset.qualifiedAction;
158
+ if (!isIn(API_VERBS_ALLOWED_FOR_ACTIONS, fn)) return;
159
+ const args = Object.keys(el.dataset).sort().reduce((args, name)=>{
160
+ if (/^qualifiedArg/.test(name)) {
161
+ var _exec;
162
+ const foo = Number((_exec = /^qualifiedArg-([0-9])+/.exec(name)) == null ? void 0 : _exec[1]) || 0;
163
+ args[foo] = el.dataset[name];
164
+ }
165
+ return args;
166
+ }, []);
167
+ const exec = ()=>this.execute(fn, ...args);
168
+ // Execute API call on click
169
+ // TODO: event type support?
170
+ el.addEventListener("click", exec);
171
+ this.callOnDispose(()=>el.removeEventListener("click", exec));
172
+ });
173
+ }, _class_private_field_loose_base(this, _initSmartForms)[_initSmartForms] = ()=>{
174
+ // TODO: mutation observer for dynamically generated forms
175
+ [].slice.call(document.querySelectorAll("[data-qualified-smart-form]")).forEach((el)=>{
176
+ // Save the original on submit and wrap it with our own
177
+ const { onsubmit } = el;
178
+ // Old smart form api specified data-qualified-smart-form="true"
179
+ const botApiName = el.dataset.qualifiedSmartForm === "true" ? "default" : el.dataset.qualifiedSmartForm, trigger = el.dataset.qualifiedSmartFormTrigger;
180
+ el.onsubmit = (e)=>{
181
+ const returnValue = onsubmit ? onsubmit.call(el, e) : true;
182
+ // eslint-disable-next-line no-useless-catch
183
+ try {
184
+ const fields = [].slice.call(e.target.querySelectorAll("[data-qualified-field]"));
185
+ const fieldValues = fields.reduce((values, param)=>{
186
+ let { dataset: { qualifiedField: apiName }, value, checked, type } = param;
187
+ switch(type){
188
+ case "checkbox":
189
+ values[apiName] = checked;
190
+ break;
191
+ case "radio":
192
+ checked && (values[apiName] = value);
193
+ break;
194
+ case "password":
195
+ break; // Never capture password fields
196
+ default:
197
+ value.trim() && (values[apiName] = value);
198
+ }
199
+ return values;
200
+ }, {});
201
+ // If return value is `false`, or if `e.preventDefault()` was called,
202
+ // the form will not submit and we can save gathered field values and
203
+ // bot api name right away. Otherwise, they'll be sent the next time
204
+ // the messenger loads.
205
+ //
206
+ // If iframed, always trigger save immediately and it will be bubbled
207
+ // up to the parent window.
208
+ if (trigger === "submit" || trigger !== "redirect" && (returnValue === false || e.defaultPrevented) || isIframed()) {
209
+ this.execute("sendSmartFormData", fieldValues, botApiName);
210
+ } else {
211
+ this.execute("saveSmartFormData", fieldValues, botApiName);
212
+ }
213
+ } catch (e) {
214
+ // TODO: sentry
215
+ throw e;
216
+ }
217
+ return returnValue;
218
+ };
219
+ this.callOnDispose(()=>el.onsubmit = onsubmit);
220
+ });
221
+ };
222
+ // For safety, check that a handler is defined for all verbs and that all
223
+ // verbs are declared
224
+ if (false) {}
225
+ this.handlers = handlers;
226
+ this.queue = [];
227
+ _class_private_field_loose_base(this, _initDeclarativeApi)[_initDeclarativeApi]();
228
+ _class_private_field_loose_base(this, _initSmartForms)[_initSmartForms]();
229
+ }
230
+ }
231
+ function getPreservedProperties(obj) {
232
+ if (!obj) return {};
233
+ const descriptors = {};
234
+ for (const key of API_PROPERTIES){
235
+ if (key in obj) {
236
+ const descriptor = Object.getOwnPropertyDescriptor(obj, key);
237
+ if (descriptor) {
238
+ descriptors[key] = descriptor;
239
+ }
240
+ }
241
+ }
242
+ return descriptors;
243
+ }
244
+ /* export default */ const base_api_handler = (BaseApiHandler);
245
+
246
+ var base_api_handler_API_VERBS = /* unused export */ undefined;
247
+ var base_api_handler_API_VERBS_ALLOWED_FOR_ACTIONS = /* unused export */ undefined;
248
+ export { PARDOT_EMAIL_SELECTOR, base_api_handler_API_VERBS as API_VERBS, base_api_handler_API_VERBS_ALLOWED_FOR_ACTIONS as API_VERBS_ALLOWED_FOR_ACTIONS };
249
+ export default base_api_handler;
@@ -0,0 +1,391 @@
1
+ import { __webpack_require__ } from "../js/runtime.js";
2
+ import "./utils/native_globals.js";
3
+ import { _extends } from "../js/4101.js";
4
+
5
+ /* provided dependency */ var __nativeWindowAddEventListener = __webpack_require__(68034).zh;
6
+ /* provided dependency */ var __nativeDocumentAddEventListener = __webpack_require__(68034).Qj;
7
+ /* provided dependency */ var __nativeWindowRemoveEventListener = __webpack_require__(68034).kZ;
8
+ /* provided dependency */ var __nativeDocumentRemoveEventListener = __webpack_require__(68034).LA;
9
+
10
+ // ─────────────────────────────────────────────────────────────────────────────
11
+ // Booker *intent* SLI — the window BEFORE an offer exists.
12
+ //
13
+ // `booker_outcome` (booker_outcome_tracker.ts) arms once an offer exists and
14
+ // measures offer -> booker shown. This tracker measures the step before that:
15
+ // something decided to offer a meeting -> the offer actually arrived. On the AI
16
+ // pathway that window holds an LLM turn, meeting routing, and offer creation —
17
+ // time the visitor sits waiting, without knowing why. It is invisible to
18
+ // `booker_outcome`, which cannot arm until the offer it measures exists.
19
+ //
20
+ // The `outcome` facet is emitted exactly ONCE per intent (`offered` |
21
+ // `abandoned_pre_offer` | `no_offer`) so the offer-made rate is a straight count
22
+ // over the facet rather than a join.
23
+ //
24
+ // `no_offer` is only reportable where the client can see a terminal non-meeting
25
+ // result. The form/CTA pathway can (the trigger response says so). The AI pathway
26
+ // cannot — when the AI decides not to offer, the conversation simply continues —
27
+ // so it sources that leg server-side from the `ai_offer_meeting_booker`
28
+ // `decision_outcome` instead.
29
+ //
30
+ // Surface-agnostic on purpose: the form/CTA pathway arms the same tracker from a
31
+ // click/submit instead of an AI signal.
32
+ // ─────────────────────────────────────────────────────────────────────────────
33
+ const BOOKER_INTENT_OUTCOME = {
34
+ OFFERED: "offered",
35
+ ABANDONED_PRE_OFFER: "abandoned_pre_offer",
36
+ /**
37
+ * The trigger resolved to something that is not a meeting. Only for pathways
38
+ * where the client can observe a *terminal* non-meeting result — on the AI
39
+ * pathway it cannot (the conversation just continues), so that one sources
40
+ * `no_offer` from the server `decision_outcome` instead.
41
+ */ NO_OFFER: "no_offer"
42
+ };
43
+ // Client-observed stages, deliberately NOT reused from the server's
44
+ // `meeting_stage` vocabulary: the server's stages mean "the step executed",
45
+ // these mean "the visitor experienced it". Colliding them would make the two
46
+ // uncomparable within one facet.
47
+ const BOOKER_INTENT_MEETING_STAGE = "booker_intent";
48
+ const INTENT_TO_BOOKER_SHOWN_MEETING_STAGE = "intent_to_booker_shown";
49
+ /**
50
+ * Trigger -> the questions arrived on the wire. **Not** the paint: the caller
51
+ * resolves this from `channel.ts`'s inbound handler, which runs before the
52
+ * payload is emitted to either renderer, so render and paint are excluded. Named
53
+ * `received` rather than `shown` for that reason — every other client stage here
54
+ * means "the visitor saw it", and this one cannot, because the questions render
55
+ * inside the messenger iframe while the trigger fired in the host realm.
56
+ *
57
+ * The *rest* of the qualification lifecycle is deliberately absent for the same
58
+ * cross-realm reason: the submit moment is unobservable from the host, and any
59
+ * interval spanning it would blend visitor think-time with our latency. That
60
+ * split is sourced from the server's `triggered_to_qq` / `qq_to_meeting_booker`.
61
+ */ const INTENT_TO_QUALIFICATION_RECEIVED_MEETING_STAGE = "intent_to_qualification_received";
62
+ /**
63
+ * How long after a `visibilitychange` to hidden a `pagehide` still counts as the
64
+ * same unload sequence.
65
+ *
66
+ * Browsers dispatch `visibilitychange` -> hidden immediately *before* `pagehide`
67
+ * on an ordinary navigation, so a naive "was the tab ever hidden?" check treats
68
+ * every abandonment as backgrounded and silently drops its duration. The two
69
+ * events are sub-frame apart during unload, whereas a genuine background
70
+ * interval is orders of magnitude longer, so a short grace window separates them
71
+ * without needing to distinguish the event causes.
72
+ */ const UNLOAD_VISIBILITY_GRACE_MS = 200;
73
+ /**
74
+ * Prefix for the per-intent "already counted" marker.
75
+ *
76
+ * `sessionStorage`, not `localStorage`: the marker only needs to outlive a reload
77
+ * within the same tab, which is exactly its scope, and it should not leak into a
78
+ * later visit.
79
+ */ const RESOLVED_INTENT_KEY_PREFIX = "qlfd:booker_intent_resolved:";
80
+ class BookerIntentTracker {
81
+ /** True while an intent is being tracked, for callers that gate on it. */ get isArmed() {
82
+ return this.intent !== null;
83
+ }
84
+ arm(param) {
85
+ let { intentId, pathwayOrigin, conversationType, botApiName, scriptId, fromHistory = false } = param;
86
+ this.safely(()=>{
87
+ var _this_intent;
88
+ if (((_this_intent = this.intent) == null ? void 0 : _this_intent.intentId) === intentId) return;
89
+ // A reload mid-wait sends the old page a non-persisted `pagehide`, which
90
+ // already reported this intent's terminal outcome. Re-arming from the
91
+ // hydrated message would let the same intent report a second one — an
92
+ // `offered` here against the `abandoned_pre_offer` the old page sent — and
93
+ // put one journey in the SLI denominator twice. `fromHistory` alone cannot
94
+ // see that: the outcome was emitted by a different JS context.
95
+ if (fromHistory && this.alreadyResolved(intentId)) return;
96
+ this.teardown();
97
+ const hidden = !this.documentVisible();
98
+ this.intent = {
99
+ intentId,
100
+ pathwayOrigin,
101
+ conversationType,
102
+ botApiName,
103
+ scriptId,
104
+ startedAtMs: this.nowMs(),
105
+ // No `performance` means no honest duration; keep the outcome, drop the timing.
106
+ measureTiming: !fromHistory && typeof performance !== "undefined",
107
+ fromHistory,
108
+ outcomeEmitted: false,
109
+ shownEmitted: false,
110
+ qualificationReceivedEmitted: false,
111
+ // A tab already hidden at arm time is as untrustworthy as one hidden later.
112
+ wasEverHidden: hidden,
113
+ hiddenAtMs: hidden ? this.nowMs() : undefined
114
+ };
115
+ if (typeof window !== "undefined") {
116
+ __nativeWindowAddEventListener("pagehide", this.handlePagehide);
117
+ }
118
+ if (typeof document !== "undefined") {
119
+ __nativeDocumentAddEventListener("visibilitychange", this.handleVisibilityChange);
120
+ }
121
+ });
122
+ }
123
+ /**
124
+ * The qualification questions arrived on the wire — **not** painted. Callers
125
+ * resolve this from the inbound channel handler, which runs before the payload
126
+ * reaches a renderer, so the emitted `intent_to_qualification_received` excludes
127
+ * render and paint. Naming it otherwise would invite consumers to read this
128
+ * latency as time-to-visible, which it is not and cannot be from the host realm.
129
+ *
130
+ * Then **stays armed**: the questions are not a terminal outcome — the
131
+ * booker can still arrive in a later broadcast once they are answered, and
132
+ * resolving here would misclassify every questions-then-booker journey as a
133
+ * failure. Most questions journeys do not reach a booker (prod 7d:
134
+ * `triggered_to_qq` 24,543 vs `qq_to_meeting_booker` 2,532), which is expected
135
+ * product behaviour and must never count as a booker failure.
136
+ */ markQualificationReceived() {
137
+ this.safely(()=>{
138
+ const { intent } = this;
139
+ if (!intent || intent.qualificationReceivedEmitted) return;
140
+ // Claimed before the timing check, deliberately. Untrustworthy timing is
141
+ // monotonic within an intent: `measureTiming` is fixed at arm, and
142
+ // `wasEverHidden` latches true the moment a hidden tab returns and is never
143
+ // cleared. So a call that finds no timing guarantees every later call finds
144
+ // none either — leaving the flag unset would invite a retry that cannot
145
+ // succeed.
146
+ //
147
+ // Single-shot is also the only correct model, and not merely a duplicate
148
+ // guard. A flow can paint many gathers — the server strips exactly this
149
+ // case in `remove_looped_messages` when a rematching visitor loops the
150
+ // questions. Only `intent -> first gather` is free of visitor input; every
151
+ // later interval contains the visitor answering the previous gather, so
152
+ // emitting one under this stage would mix think-time into a latency facet.
153
+ intent.qualificationReceivedEmitted = true;
154
+ // Timing-only line, no `outcome` facet: with no trustworthy duration there
155
+ // is nothing left to report, so skip it rather than emit an empty row. Same
156
+ // rule as `markShown`.
157
+ const timing = this.timing(intent);
158
+ if (timing.timing === undefined) return;
159
+ this.emit(intent, _extends({
160
+ meeting_stage: INTENT_TO_QUALIFICATION_RECEIVED_MEETING_STAGE
161
+ }, timing));
162
+ });
163
+ }
164
+ /**
165
+ * The trigger reached a terminal non-meeting result. Callers must pass only
166
+ * genuinely terminal signals — never "qualification questions were shown",
167
+ * which is a waypoint (see `markQualificationReceived`).
168
+ */ markNoOffer() {
169
+ this.safely(()=>{
170
+ const { intent } = this;
171
+ if (!intent || intent.outcomeEmitted) return;
172
+ intent.outcomeEmitted = true;
173
+ const timing = this.timing(intent);
174
+ // Release before emitting: a throwing transport must not strand the
175
+ // listeners, and `safely()` would otherwise unwind past this cleanup.
176
+ this.teardown();
177
+ this.intent = null;
178
+ this.emit(intent, _extends({
179
+ meeting_stage: BOOKER_INTENT_MEETING_STAGE,
180
+ outcome: BOOKER_INTENT_OUTCOME.NO_OFFER
181
+ }, timing));
182
+ });
183
+ }
184
+ /** The offer arrived: closes the outcome facet, keeps the window open for `shown`. */ markOffered(offerMessageId, param) {
185
+ let { calendarEventTypeId } = param === void 0 ? {} : param;
186
+ this.safely(()=>{
187
+ const { intent } = this;
188
+ if (!intent || intent.outcomeEmitted) return;
189
+ intent.outcomeEmitted = true;
190
+ intent.offerMessageId = offerMessageId;
191
+ // Only knowable once an offer exists, so it is absent from any line emitted
192
+ // before this point rather than backfilled onto them.
193
+ intent.calendarEventTypeId = calendarEventTypeId;
194
+ this.emit(intent, _extends({
195
+ meeting_stage: BOOKER_INTENT_MEETING_STAGE,
196
+ outcome: BOOKER_INTENT_OUTCOME.OFFERED,
197
+ offer_message_id: offerMessageId
198
+ }, this.timing(intent)));
199
+ });
200
+ }
201
+ /**
202
+ * The booker painted: emits the visitor-experienced total (intent -> shown).
203
+ * With `booker_outcome`'s offer -> shown timing this decomposes as
204
+ * `total = intent->offer + offer->shown`, so a bad total attributes to either
205
+ * the upstream wait or the client render.
206
+ */ markShown(offerMessageId) {
207
+ this.safely(()=>{
208
+ const { intent } = this;
209
+ if (!intent || !intent.outcomeEmitted || intent.shownEmitted) return;
210
+ // Only the offer this intent produced closes this window; a later offer
211
+ // belongs to its own intent.
212
+ if (intent.offerMessageId !== offerMessageId) return;
213
+ intent.shownEmitted = true;
214
+ // Unlike the outcome events, this line exists *only* to carry the timing —
215
+ // it has no `outcome` facet (which would double-count the SLI denominator).
216
+ // With no trustworthy timing there is nothing left to report, so skip it.
217
+ const timing = this.timing(intent);
218
+ // Release before emitting: a throwing transport must not strand the
219
+ // listeners, and `safely()` would otherwise unwind past this cleanup.
220
+ this.teardown();
221
+ this.intent = null;
222
+ if (timing.timing !== undefined) {
223
+ this.emit(intent, _extends({
224
+ meeting_stage: INTENT_TO_BOOKER_SHOWN_MEETING_STAGE,
225
+ offer_message_id: offerMessageId
226
+ }, timing));
227
+ }
228
+ });
229
+ }
230
+ dispose() {
231
+ this.safely(()=>{
232
+ this.teardown();
233
+ this.intent = null;
234
+ });
235
+ }
236
+ /**
237
+ * Elapsed time since intent, or nothing when it cannot be trusted.
238
+ *
239
+ * Backgrounded tabs carry the whole backgrounded interval in their wall clock —
240
+ * the defect CORE-2607 fixed on the standalone TTI metric, where the 30-day max
241
+ * reached ~9 days. Omitting the field (rather than emitting a wrong number)
242
+ * keeps the outcome counts complete while leaving the latency distribution
243
+ * honest. No rAF deferral is needed: the callers already fire from a rendered
244
+ * component's effect, i.e. after the paint they report on.
245
+ */ timing(intent, param) {
246
+ let { atUnload = false } = param === void 0 ? {} : param;
247
+ if (!intent.measureTiming) return {};
248
+ if (intent.wasEverHidden) return {};
249
+ if (intent.hiddenAtMs !== undefined) {
250
+ // Hidden right now. During unload that is just the `visibilitychange` that
251
+ // precedes `pagehide`; any longer stretch is a real background interval.
252
+ const hiddenForMs = this.nowMs() - intent.hiddenAtMs;
253
+ if (!atUnload || hiddenForMs > UNLOAD_VISIBILITY_GRACE_MS) return {};
254
+ } else if (!atUnload && !this.documentVisible()) {
255
+ return {};
256
+ }
257
+ const elapsed = Math.round(this.nowMs() - intent.startedAtMs);
258
+ return Number.isFinite(elapsed) && elapsed >= 0 ? {
259
+ timing: elapsed
260
+ } : {};
261
+ }
262
+ emit(intent, extra, fireAndForget) {
263
+ if (fireAndForget === void 0) fireAndForget = false;
264
+ // Marked here rather than at each call site: this is the one place a terminal
265
+ // outcome leaves the tracker, and lines without an `outcome` facet (the
266
+ // timing-only `intent_to_booker_shown`) must not claim the intent.
267
+ if (extra.outcome) this.markResolved(intent.intentId);
268
+ this.log(_extends({
269
+ type: "log",
270
+ message: "booker_intent",
271
+ extra: _extends({}, this.surface ? {
272
+ surface: this.surface
273
+ } : {}, {
274
+ pathway_origin: intent.pathwayOrigin,
275
+ conversation_type: intent.conversationType
276
+ }, intent.botApiName ? {
277
+ bot_api_name: intent.botApiName
278
+ } : {}, intent.scriptId ? {
279
+ script_id: intent.scriptId
280
+ } : {}, intent.calendarEventTypeId ? {
281
+ calendar_event_type_id: intent.calendarEventTypeId
282
+ } : {}, extra)
283
+ }, fireAndForget ? {
284
+ fireAndForget: true
285
+ } : {}));
286
+ }
287
+ /**
288
+ * Records that this intent has reported a terminal outcome, so a later page in
289
+ * the same tab does not report a second one.
290
+ *
291
+ * Storage can be unavailable — third-party-cookie blocking and some embeds throw
292
+ * on access. Failing silently degrades to the previous behaviour (a reload
293
+ * mid-wait may double-count) rather than breaking the booker, which is the right
294
+ * trade for instrumentation.
295
+ */ markResolved(intentId) {
296
+ try {
297
+ window.sessionStorage.setItem("" + RESOLVED_INTENT_KEY_PREFIX + intentId, "1");
298
+ } catch (unused) {
299
+ // Intentionally swallowed — see above.
300
+ }
301
+ }
302
+ alreadyResolved(intentId) {
303
+ try {
304
+ return window.sessionStorage.getItem("" + RESOLVED_INTENT_KEY_PREFIX + intentId) !== null;
305
+ } catch (unused) {
306
+ return false;
307
+ }
308
+ }
309
+ nowMs() {
310
+ return typeof performance !== "undefined" ? performance.now() : 0;
311
+ }
312
+ documentVisible() {
313
+ if (typeof document === "undefined") return true;
314
+ return document.visibilityState === "visible";
315
+ }
316
+ teardown() {
317
+ if (typeof window !== "undefined") {
318
+ __nativeWindowRemoveEventListener("pagehide", this.handlePagehide);
319
+ }
320
+ if (typeof document !== "undefined") {
321
+ __nativeDocumentRemoveEventListener("visibilitychange", this.handleVisibilityChange);
322
+ }
323
+ }
324
+ // This tracker is pure observability; a fault here must never disrupt the
325
+ // booker it instruments. Every public entry point and event handler runs
326
+ // through this guard, so a broken transport (or an exotic browser API) drops
327
+ // one SLI datapoint instead of throwing into the conversation's message path.
328
+ safely(fn) {
329
+ try {
330
+ fn();
331
+ } catch (unused) {
332
+ // Intentionally swallowed: losing a datapoint is strictly preferable to
333
+ // breaking the meeting booker.
334
+ }
335
+ }
336
+ constructor({ surface, log }){
337
+ this.intent = null;
338
+ // Abandonment rides on `pagehide` (fires reliably on tab close, navigation,
339
+ // refresh) but skips bfcache transitions (`persisted`) — the page can be
340
+ // restored, so the visitor has not left. `visibilitychange:hidden` is
341
+ // deliberately not used as the trigger; it fires on plain tab switches too.
342
+ this.handlePagehide = (event)=>{
343
+ this.safely(()=>{
344
+ if (event.persisted) return;
345
+ const { intent } = this;
346
+ if (!intent || intent.outcomeEmitted) return;
347
+ // Once the offer exists, leaving is `booker_outcome`'s `abandoned`.
348
+ // Emitting here as well would count one visitor in two SLIs.
349
+ // A hydrated intent never reports abandonment at all (see `fromHistory`).
350
+ if (intent.fromHistory) return;
351
+ intent.outcomeEmitted = true;
352
+ const timing = this.timing(intent, {
353
+ atUnload: true
354
+ });
355
+ // Release before emitting, as in `markShown`.
356
+ this.teardown();
357
+ this.intent = null;
358
+ this.emit(intent, _extends({
359
+ meeting_stage: BOOKER_INTENT_MEETING_STAGE,
360
+ outcome: BOOKER_INTENT_OUTCOME.ABANDONED_PRE_OFFER
361
+ }, timing), // Fires during page teardown; cannot wait for a response.
362
+ true);
363
+ });
364
+ };
365
+ /**
366
+ * Records backgrounding, but only counts it against the timing once the tab
367
+ * comes *back*. A tab that goes hidden and never returns is either the unload
368
+ * sequence (harmless, handled by the grace window) or a background interval
369
+ * that `timing` catches via `hiddenAtMs`.
370
+ */ this.handleVisibilityChange = ()=>{
371
+ this.safely(()=>{
372
+ const { intent } = this;
373
+ if (!intent) return;
374
+ if (this.documentVisible()) {
375
+ if (intent.hiddenAtMs !== undefined) intent.wasEverHidden = true;
376
+ intent.hiddenAtMs = undefined;
377
+ } else {
378
+ intent.hiddenAtMs = this.nowMs();
379
+ }
380
+ });
381
+ };
382
+ this.surface = surface;
383
+ this.log = log;
384
+ }
385
+ }
386
+
387
+ var booker_intent_tracker_BOOKER_INTENT_MEETING_STAGE = /* unused export */ undefined;
388
+ var booker_intent_tracker_BOOKER_INTENT_OUTCOME = /* unused export */ undefined;
389
+ var booker_intent_tracker_INTENT_TO_BOOKER_SHOWN_MEETING_STAGE = /* unused export */ undefined;
390
+ var booker_intent_tracker_INTENT_TO_QUALIFICATION_RECEIVED_MEETING_STAGE = /* unused export */ undefined;
391
+ export { BookerIntentTracker, booker_intent_tracker_BOOKER_INTENT_MEETING_STAGE as BOOKER_INTENT_MEETING_STAGE, booker_intent_tracker_BOOKER_INTENT_OUTCOME as BOOKER_INTENT_OUTCOME, booker_intent_tracker_INTENT_TO_BOOKER_SHOWN_MEETING_STAGE as INTENT_TO_BOOKER_SHOWN_MEETING_STAGE, booker_intent_tracker_INTENT_TO_QUALIFICATION_RECEIVED_MEETING_STAGE as INTENT_TO_QUALIFICATION_RECEIVED_MEETING_STAGE };