@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,329 @@
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 booker_outcome_tracker_setTimeout = __webpack_require__(68034).pS;
6
+ /* provided dependency */ var __nativeWindowAddEventListener = __webpack_require__(68034).zh;
7
+ /* provided dependency */ var __nativeDocumentAddEventListener = __webpack_require__(68034).Qj;
8
+ /* provided dependency */ var booker_outcome_tracker_clearTimeout = __webpack_require__(68034).Kj;
9
+ /* provided dependency */ var __nativeWindowRemoveEventListener = __webpack_require__(68034).kZ;
10
+ /* provided dependency */ var __nativeDocumentRemoveEventListener = __webpack_require__(68034).LA;
11
+
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ // Booker SLI classification — two ORTHOGONAL axes; do not conflate them:
14
+ //
15
+ // pathway_origin — how/where the visitor reached the offer. SERVER-CANONICAL:
16
+ // values MUST match Ruby `Telemetry::Attributes::PathwayOrigin` (derived from
17
+ // conversation_type + offer.source + live_booker) so this client SLI
18
+ // reconciles with the server `book_calendar_event` log.
19
+ // surface — which client app rendered the booker (ours; failure-localization).
20
+ // NOT "where the visitor was" — that's pathway_origin.
21
+ //
22
+ // pathway_origin | conversation_type | surface | this SLI?
23
+ // ---------------|-------------------------------|------------------------|----------
24
+ // chat | chat (source != auto_respond) | legacy | yes
25
+ // ai_agent | chat (source == auto_respond) | multimodal | yes
26
+ // form | element | legacy | multimodal | yes (each app's lightbox)
27
+ // meeting_link | meeting_link[_routed] | standalone | not yet (convergence)
28
+ // live_booking | live_booking | (live_booker) | no (rep-side)
29
+ //
30
+ // web_extension composes slot links in Gmail; the prospect self-books on the
31
+ // standalone page (flagged `web_extension_offer` server-side) — not a surface here.
32
+ // ─────────────────────────────────────────────────────────────────────────────
33
+ const BOOKER_OUTCOME = {
34
+ SHOWN: "shown",
35
+ FAILED: "failed",
36
+ ABANDONED: "abandoned"
37
+ };
38
+ // Mirror of Ruby `Telemetry::Attributes::PathwayOrigin` — values MUST stay
39
+ // identical so the SLI reconciles with `book_calendar_event`. The client only
40
+ // derives chat/form/ai_agent; meeting_link/live_booking belong to surfaces this
41
+ // SLI does not emit (standalone, live booker) and are kept for the shared vocabulary.
42
+ const BOOKER_PATHWAY_ORIGIN = {
43
+ CHAT: "chat",
44
+ FORM: "form",
45
+ AI_AGENT: "ai_agent",
46
+ MEETING_LINK: "meeting_link",
47
+ LIVE_BOOKING: "live_booking"
48
+ };
49
+ // Which client app rendered the booker (NOT where the visitor was — that is
50
+ // pathway_origin). `legacy` = the classic React widget runtime (in-chat messenger
51
+ // + its form/CTA lightbox); `multimodal` = the Preact multimodal widget;
52
+ // `standalone` = the meeting-link page, which emits this vocabulary through its
53
+ // own `StandaloneBookerSli` rather than through this tracker.
54
+ const BOOKER_SURFACE = {
55
+ LEGACY: "legacy",
56
+ MULTIMODAL: "multimodal",
57
+ STANDALONE: "standalone"
58
+ };
59
+ // Client-observed pipeline stage this SLI reports on, stamped on the same
60
+ // `@meeting_stage` facet as the server meeting logs. Distinct from the server's
61
+ // `available_slots` ("calendar computed") - this is the client "booker rendered
62
+ // to the visitor" step.
63
+ const BOOKER_SHOWN_MEETING_STAGE = "booker_shown";
64
+ // Standalone booker uses a 90s watchdog; mirror it for the embedded surfaces.
65
+ const BOOKER_LOAD_TIMEOUT_MS = 90000;
66
+ /**
67
+ * Mirror of Ruby `PathwayOrigin::CONVERSATION_TYPE_MAP`. Kept as a map rather
68
+ * than a chain of conditionals so a missing entry is visible against the server's
69
+ * own table instead of silently falling through to the default.
70
+ */ const CONVERSATION_TYPE_TO_PATHWAY = {
71
+ chat: BOOKER_PATHWAY_ORIGIN.CHAT,
72
+ element: BOOKER_PATHWAY_ORIGIN.FORM,
73
+ meeting_link: BOOKER_PATHWAY_ORIGIN.MEETING_LINK,
74
+ meeting_link_routed: BOOKER_PATHWAY_ORIGIN.MEETING_LINK
75
+ };
76
+ /**
77
+ * Derives the canonical `pathway_origin` tag from socket-serialized values,
78
+ * normalized defensively for enum casing.
79
+ *
80
+ * Follows the server's precedence exactly (`PathwayOrigin.derive`): conversation
81
+ * type decides first, and `auto_respond` only promotes to `ai_agent` when that
82
+ * type is `chat`. Checking the offer source first — as this did — reported
83
+ * `ai_agent` for an `auto_respond` offer in a `meeting_link` conversation, where
84
+ * the server says `meeting_link`.
85
+ *
86
+ * `meeting_link` / `meeting_link_routed` are unreachable from today's callers:
87
+ * `StandaloneMeetingBooker` renders `LightboxEntry` without a `serverLog`, so the
88
+ * widget tracker no-ops there and standalone emits through `StandaloneBookerSli`
89
+ * with the pathway passed as a literal. They are mapped anyway because this
90
+ * function is specified to mirror the Ruby enum — see the file header — and a
91
+ * partial mirror is the bug it just had for `element`: a type the server
92
+ * recognises, silently relabelled `chat` here. Completeness is the contract,
93
+ * independent of which entries anything currently reaches.
94
+ *
95
+ * One deliberate divergence: the server returns `nil` for an unrecognised type
96
+ * ("never assert a pathway we can't determine"); this returns `chat`, because the
97
+ * tracker needs a value to emit at all and dropping the event loses more than a
98
+ * slightly wrong tag on a conversation type that does not exist yet.
99
+ */ function bookerPathwayOrigin(conversationType, offerSource) {
100
+ var _CONVERSATION_TYPE_TO_PATHWAY__toLowerCase;
101
+ const origin = (_CONVERSATION_TYPE_TO_PATHWAY__toLowerCase = CONVERSATION_TYPE_TO_PATHWAY[(conversationType != null ? conversationType : "").toLowerCase()]) != null ? _CONVERSATION_TYPE_TO_PATHWAY__toLowerCase : BOOKER_PATHWAY_ORIGIN.CHAT;
102
+ if (origin === BOOKER_PATHWAY_ORIGIN.CHAT && (offerSource != null ? offerSource : "").toLowerCase() === "auto_respond") {
103
+ return BOOKER_PATHWAY_ORIGIN.AI_AGENT;
104
+ }
105
+ return origin;
106
+ }
107
+ // One terminal outcome per offer, enforced across tracker instances: a booker
108
+ // component can mount more than once for the same offer (e.g. a remount in the
109
+ // legacy lightbox), and each mount arms its own tracker. Dedupe by offer id so
110
+ // the SLI counts each offer once regardless of how many trackers see it.
111
+ const emittedOfferIds = new Set();
112
+ /** Test-only: clears the cross-instance dedupe set between cases. */ function resetEmittedBookerOutcomes() {
113
+ emittedOfferIds.clear();
114
+ }
115
+ class BookerOutcomeTracker {
116
+ arm(offerMessageId, pathwayOrigin, conversationType) {
117
+ this.safely(()=>{
118
+ // Re-arming (offer -> offer without an intervening dispose) must cancel the
119
+ // previous offer's watchdog and listener first; otherwise the stale timer
120
+ // fires against the new offer's id and emits a premature `failed`.
121
+ this.teardown();
122
+ this.offerMessageId = offerMessageId;
123
+ this.pathwayOrigin = pathwayOrigin;
124
+ this.conversationType = conversationType;
125
+ // `undefined`, not 0, when there is no clock: 0 is a legitimate
126
+ // `performance.now()` reading, so falling back to it made an unmeasurable
127
+ // arm indistinguishable from one at page load. `timing()` then computed
128
+ // `now() - 0` — time since navigation start, not since arm (claude).
129
+ this.armedAtMs = typeof performance !== "undefined" ? performance.now() : undefined;
130
+ this.resolved = false;
131
+ // Seeded from the current state, not just from later transitions: an offer
132
+ // that arrives while the tab is already backgrounded never fires
133
+ // `visibilitychange`, so without this its whole wait would be timed as if
134
+ // the visitor had been watching.
135
+ this.armedWhileHidden = !this.documentVisible();
136
+ this.hiddenAtMs = undefined;
137
+ this.returnedFromHidden = false;
138
+ this.timeoutId = booker_outcome_tracker_setTimeout(this.handleTimeout, this.timeoutMs);
139
+ if (typeof window !== "undefined") {
140
+ __nativeWindowAddEventListener("pagehide", this.handlePagehide);
141
+ }
142
+ if (typeof document !== "undefined") {
143
+ __nativeDocumentAddEventListener("visibilitychange", this.handleVisibilityChange);
144
+ }
145
+ });
146
+ }
147
+ markShown() {
148
+ this.safely(()=>this.resolve(BOOKER_OUTCOME.SHOWN));
149
+ }
150
+ dispose() {
151
+ this.safely(()=>{
152
+ this.teardown();
153
+ this.offerMessageId = null;
154
+ });
155
+ }
156
+ documentVisible() {
157
+ if (typeof document === "undefined") return true;
158
+ return document.visibilityState === "visible";
159
+ }
160
+ nowMs() {
161
+ return typeof performance !== "undefined" ? performance.now() : 0;
162
+ }
163
+ // This tracker is pure observability; a fault here must never disrupt the
164
+ // booker it instruments. Every public entry point and event handler runs
165
+ // through this guard, so a broken transport (or an exotic browser API) drops
166
+ // one SLI datapoint instead of throwing into the booker's render/init path.
167
+ safely(fn) {
168
+ try {
169
+ fn();
170
+ } catch (unused) {
171
+ // Intentionally swallowed: losing a datapoint is strictly preferable to
172
+ // breaking the meeting booker.
173
+ }
174
+ }
175
+ resolve(outcome) {
176
+ if (this.resolved || !this.offerMessageId) return;
177
+ this.resolved = true;
178
+ // Tear down before emitting so a throwing transport cannot leak the pending
179
+ // timeout or the pagehide listener.
180
+ this.teardown();
181
+ this.emit(outcome);
182
+ }
183
+ emit(outcome) {
184
+ if (!this.offerMessageId) return;
185
+ if (emittedOfferIds.has(this.offerMessageId)) return;
186
+ emittedOfferIds.add(this.offerMessageId);
187
+ this.log(_extends({
188
+ type: "log",
189
+ message: "booker_outcome",
190
+ extra: _extends({
191
+ meeting_stage: BOOKER_SHOWN_MEETING_STAGE,
192
+ outcome,
193
+ surface: this.surface,
194
+ pathway_origin: this.pathwayOrigin,
195
+ conversation_type: this.conversationType,
196
+ offer_message_id: this.offerMessageId
197
+ }, this.timing(outcome))
198
+ }, outcome === BOOKER_OUTCOME.ABANDONED ? {
199
+ fireAndForget: true
200
+ } : {}));
201
+ }
202
+ /**
203
+ * Elapsed time from arm, or nothing when it cannot be trusted.
204
+ *
205
+ * Withheld rather than clamped: an absent value is honest about not knowing,
206
+ * whereas a capped one invents a number that looks like a real measurement.
207
+ * Mirrors `StandaloneBookerSli#timing`, which has always done this — the guard
208
+ * was simply never applied to this tracker, though the same reasoning already
209
+ * gates `failed` in `handleTimeout`.
210
+ *
211
+ * The outcome itself is never withheld; only the timing is.
212
+ *
213
+ * What the number means depends on the outcome, so the rule does too.
214
+ *
215
+ * `abandoned` measures the wait before giving up, so its clock stops at the
216
+ * first hidden transition. Browsers fire `visibilitychange:hidden` before
217
+ * `pagehide` on a navigation, so a blanket "was ever hidden" rule would discard
218
+ * every abandoned timing — including the ones where that transition *was* the
219
+ * visitor leaving, which is the number this outcome exists to report.
220
+ *
221
+ * `shown` and `failed` measure time to render, so they need the tab visible
222
+ * throughout. Applying the same clock-stop here would report a paint time from
223
+ * before the paint, which matches no real event.
224
+ *
225
+ * A backgrounded visitor is never penalised by any of this: the booker still
226
+ * resolves `shown` when it renders, and `handleTimeout` refuses to fire while
227
+ * hidden, so not seeing the UI never becomes a failure. Only the timing is
228
+ * withheld.
229
+ */ timing(outcome) {
230
+ if (typeof performance === "undefined") return {};
231
+ // No visible baseline: the offer arrived to an already-backgrounded tab, so
232
+ // there is no point at which the visitor started waiting.
233
+ if (this.armedWhileHidden) return {};
234
+ // `abandoned` measures how long the visitor waited before giving up, so the
235
+ // clock stops when they stopped watching. On a navigation that transition is
236
+ // the departure itself, which is the number this outcome exists to report.
237
+ if (outcome === BOOKER_OUTCOME.ABANDONED) {
238
+ var _this_hiddenAtMs;
239
+ // Hidden, returned, then left: they waited across two intervals with idle
240
+ // time between, and the tracker cannot subtract the middle out.
241
+ if (this.returnedFromHidden) return {};
242
+ return this.elapsedTo((_this_hiddenAtMs = this.hiddenAtMs) != null ? _this_hiddenAtMs : this.nowMs());
243
+ }
244
+ // `shown` and `failed` measure time to render, which is only meaningful if
245
+ // the visitor was watching for all of it. Stopping the clock at a hidden
246
+ // transition here would report a paint time from before the paint happened —
247
+ // a number matching no real event.
248
+ if (this.hiddenAtMs !== undefined || !this.documentVisible()) return {};
249
+ return this.elapsedTo(this.nowMs());
250
+ }
251
+ elapsedTo(endMs) {
252
+ if (this.armedAtMs === undefined) return {};
253
+ const elapsed = Math.round(endMs - this.armedAtMs);
254
+ return Number.isFinite(elapsed) && elapsed >= 0 ? {
255
+ timing: elapsed
256
+ } : {};
257
+ }
258
+ teardown() {
259
+ if (this.timeoutId !== undefined) {
260
+ booker_outcome_tracker_clearTimeout(this.timeoutId);
261
+ this.timeoutId = undefined;
262
+ }
263
+ if (typeof window !== "undefined") {
264
+ __nativeWindowRemoveEventListener("pagehide", this.handlePagehide);
265
+ }
266
+ if (typeof document !== "undefined") {
267
+ __nativeDocumentRemoveEventListener("visibilitychange", this.handleVisibilityChange);
268
+ }
269
+ }
270
+ constructor({ surface, log, timeoutMs = BOOKER_LOAD_TIMEOUT_MS }){
271
+ this.offerMessageId = null;
272
+ this.pathwayOrigin = BOOKER_PATHWAY_ORIGIN.CHAT;
273
+ this.conversationType = "chat";
274
+ this.resolved = false;
275
+ // Visibility state for the timing guard. Three fields rather than one boolean
276
+ // because "the tab went hidden" has two very different meanings: the visitor
277
+ // left (the hidden transition IS the departure, and the elapsed time up to it
278
+ // is exactly what we want to report) or the visitor tab-switched and came back
279
+ // (the elapsed time now spans an interval they were not watching, and we
280
+ // cannot subtract it out).
281
+ this.armedWhileHidden = false;
282
+ this.returnedFromHidden = false;
283
+ this.handleTimeout = ()=>{
284
+ this.safely(()=>{
285
+ // Only count a load timeout as a failure when the page is actually visible;
286
+ // a timeout that fires in a hidden tab is not an honest "didn't show".
287
+ if (typeof document !== "undefined" && document.visibilityState !== "visible") return;
288
+ this.resolve(BOOKER_OUTCOME.FAILED);
289
+ });
290
+ };
291
+ // Records visibility transitions for the timing guard only. This deliberately
292
+ // does NOT resolve an outcome: `visibilitychange:hidden` fires on plain tab
293
+ // switches, so treating it as abandonment would be a false positive.
294
+ // Abandonment stays on `pagehide` below; this only decides whether, and up to
295
+ // what moment, the measurement can be trusted.
296
+ this.handleVisibilityChange = ()=>{
297
+ this.safely(()=>{
298
+ if (!this.documentVisible()) {
299
+ var // First hidden transition only — that is when the visitor stopped
300
+ // watching. A later one is irrelevant because returning already
301
+ // invalidated the measurement.
302
+ _this_hiddenAtMs;
303
+ (_this_hiddenAtMs = this.hiddenAtMs) != null ? _this_hiddenAtMs : this.hiddenAtMs = this.nowMs();
304
+ } else if (this.hiddenAtMs !== undefined) {
305
+ this.returnedFromHidden = true;
306
+ }
307
+ });
308
+ };
309
+ // Drive abandonment from `pagehide` (fires reliably on tab close, navigation,
310
+ // refresh) but skip bfcache transitions (`persisted`) — the page can be
311
+ // restored, so the visitor has not abandoned. We deliberately ignore
312
+ // `visibilitychange:hidden`, which fires on plain tab switches too.
313
+ this.handlePagehide = (event)=>{
314
+ this.safely(()=>{
315
+ if (event.persisted) return;
316
+ this.resolve(BOOKER_OUTCOME.ABANDONED);
317
+ });
318
+ };
319
+ this.surface = surface;
320
+ this.log = log;
321
+ this.timeoutMs = timeoutMs;
322
+ }
323
+ }
324
+
325
+ var booker_outcome_tracker_BOOKER_LOAD_TIMEOUT_MS = /* unused export */ undefined;
326
+ var booker_outcome_tracker_BOOKER_OUTCOME = /* unused export */ undefined;
327
+ var booker_outcome_tracker_BOOKER_SHOWN_MEETING_STAGE = /* unused export */ undefined;
328
+ var booker_outcome_tracker_resetEmittedBookerOutcomes = /* unused export */ undefined;
329
+ export { BOOKER_PATHWAY_ORIGIN, BOOKER_SURFACE, BookerOutcomeTracker, bookerPathwayOrigin, booker_outcome_tracker_BOOKER_LOAD_TIMEOUT_MS as BOOKER_LOAD_TIMEOUT_MS, booker_outcome_tracker_BOOKER_OUTCOME as BOOKER_OUTCOME, booker_outcome_tracker_BOOKER_SHOWN_MEETING_STAGE as BOOKER_SHOWN_MEETING_STAGE, booker_outcome_tracker_resetEmittedBookerOutcomes as resetEmittedBookerOutcomes };
@@ -0,0 +1,150 @@
1
+ import { getSentryClient } from "./widget/sentry.js";
2
+ import { createPropertyDecorator } from "../src/decorators.js";
3
+
4
+
5
+
6
+ const handleErrorFn = (options, target, propertyKey, widget)=>(error)=>{
7
+ try {
8
+ var _getSentryClient;
9
+ // Cannot act on falsy errors
10
+ if (!error) return;
11
+ (_getSentryClient = getSentryClient()) == null ? void 0 : _getSentryClient.captureException(error);
12
+ if (options == null ? void 0 : options.sendToServer) {
13
+ const context = (options == null ? void 0 : options.context) || target.constructor.name + "#" + propertyKey;
14
+ const normalizedError = normalizeError(error);
15
+ const extra = {
16
+ context
17
+ };
18
+ if (typeof normalizedError.stack === "string") {
19
+ extra.stack = normalizedError.stack;
20
+ }
21
+ widget.serverLog({
22
+ message: normalizedError.message,
23
+ type: "both",
24
+ extra
25
+ });
26
+ }
27
+ } catch (e) {
28
+ // Wrap in a try/catch to prevent error-handling code from causing regressions
29
+ console.warn("Qualified: An unexpected issue occurred in captureWidgetExceptions", e); // eslint-disable-line no-console
30
+ }
31
+ // Rethrow unless explicitly told not to
32
+ if ((options == null ? void 0 : options.rethrow) !== false) {
33
+ throw error;
34
+ }
35
+ };
36
+ /**
37
+ * Creates a decorator that wraps a method with exception capturing functionality.
38
+ * @param {CaptureWidgetExceptionsOptions | undefined} options - Configuration options for exception capturing
39
+ * @param {any} target - The prototype of the class (for instance methods) or the constructor (for static methods)
40
+ * @param {string} propertyKey - The name of the method being decorated
41
+ * @param {WidgetPropertyDescriptor} descriptor - The property descriptor for the method
42
+ * @returns {PropertyDescriptor} A modified property descriptor with error capturing logic
43
+ */ const captureWidgetExceptions = createPropertyDecorator((options, target, propertyKey, descriptor)=>{
44
+ const originalMethod = descriptor.value;
45
+ descriptor.value = function() {
46
+ for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
47
+ args[_key] = arguments[_key];
48
+ }
49
+ const handleError = handleErrorFn(options, target, propertyKey, this.widget);
50
+ try {
51
+ const result = originalMethod.apply(this, args);
52
+ // If the original method was an async function, it'll return a thenable:
53
+ if (result && typeof result.catch === "function") {
54
+ return result.catch(handleError);
55
+ }
56
+ return result;
57
+ } catch (error) {
58
+ handleError(error);
59
+ }
60
+ };
61
+ return descriptor;
62
+ });
63
+ /**
64
+ * This function handles different error formats and converts them into
65
+ * a standardized object with a 'message' property and an optional 'stack' property.
66
+ * @param {unknown} error - The error to be normalized. Can be a string, Error object,
67
+ * an object with a 'message' property, or any other type.
68
+ * @returns {{ message: string; stack?: string }} An object with the following properties:
69
+ * - message: A string representation of the error message.
70
+ * - stack: (Optional) The error stack trace, if available.
71
+ * @example
72
+ * // 1) String error:
73
+ * normalizeError("err msg") => { message: "err msg" }
74
+ *
75
+ * // 2) Error object:
76
+ * normalizeError(new Error("err msg")) => { message: "err msg", stack: "<STACK_TRACE_HERE>" }
77
+ *
78
+ * // 3) Plain object - attempts JSON.stringify first:
79
+ * normalizeError({ abc: 123 }) => { message: '{"abc":123}' }
80
+ *
81
+ * // 4) Non-stringify-able objects (e.g. circular objects) - falls back to String():
82
+ * const circular = { self: {} }
83
+ * circular.self = circular
84
+ * normalizeError(circular) => { message: "[object Object]" }
85
+ *
86
+ * // 5) Everything else - uses String():
87
+ * normalizeError(42) => { message: "42" }
88
+ */ function normalizeError(error) {
89
+ // Cannot act on falsy errors
90
+ if (!error) return {
91
+ message: "Unknown error"
92
+ };
93
+ if (typeof error === "string") {
94
+ return {
95
+ message: error
96
+ };
97
+ } else if (error instanceof Error) {
98
+ return {
99
+ message: error.message,
100
+ stack: error.stack
101
+ };
102
+ } else if (error && typeof error === "object") {
103
+ try {
104
+ return {
105
+ message: JSON.stringify(error)
106
+ };
107
+ } catch (unused) {
108
+ /* NOOP - Fall back to String(error) */ }
109
+ }
110
+ return {
111
+ message: String(error)
112
+ };
113
+ }
114
+ /**
115
+ * A function that wraps a class with exception capturing functionality.
116
+ * It adds error logging to all methods of the provided class.
117
+ * Applied at runtime, because not all instances of a given class
118
+ * require exception capturing.
119
+ *
120
+ * @template T - A type that extends a constructor function
121
+ * @param {T} BaseClass - The class to be wrapped with exception capturing
122
+ * @param {Widget} widget - The widget instance required to use captureWidgetExceptions
123
+ * @param {CaptureWidgetExceptionsOptions} options - Configuration options for exception capturing
124
+ * @returns {T} A new class that extends BaseClass with added error capturing
125
+ */ function withCaptureExceptions(BaseClass, widget, options) {
126
+ if (options === void 0) options = {};
127
+ return class extends BaseClass {
128
+ constructor(...args){
129
+ super(...args);
130
+ this.widget = widget;
131
+ try {
132
+ const methodNames = Object.getOwnPropertyNames(BaseClass.prototype);
133
+ methodNames.forEach((methodName)=>{
134
+ if (methodName !== "constructor" && typeof this[methodName] === "function") {
135
+ const originalMethod = this[methodName];
136
+ this[methodName] = captureWidgetExceptions(options)(this, methodName, {
137
+ value: originalMethod
138
+ }).value;
139
+ }
140
+ });
141
+ } catch (e) {
142
+ // Wrap in a try/catch to prevent error-handling code from causing regressions
143
+ console.warn("Qualified: An unexpected issue occurred in withCaptureExceptions", e); // eslint-disable-line no-console
144
+ }
145
+ }
146
+ };
147
+ }
148
+
149
+ var capture_widget_exceptions_normalizeError = /* unused export */ undefined;
150
+ export { captureWidgetExceptions, capture_widget_exceptions_normalizeError as normalizeError, withCaptureExceptions };