@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,477 @@
1
+ import { signals_core_module_r, signals_core_module_d, signals_core_module_w } from "../../../js/multimodal_v2.js";
2
+ import { BookerOutcomeTracker, BOOKER_SURFACE, bookerPathwayOrigin } from "../../booker_outcome_tracker.js";
3
+ import { observeBookerOutcome } from "../../form_cta_booker_intent.js";
4
+ import { serverLogger } from "../../server-logger.js";
5
+ import { getNextSlotAfterWeek, formatMonthTitle, findFirstSlotIndexFrom, getDefaultTimeZone, getSameDaySlots, getPrevSlotBeforeWeek, formatTimeShort, buildCalendarDays } from "../components/meetings/utils.js";
6
+ import { $exists, $any, $not } from "../utils/signals.js";
7
+ import { esm_browser_v4 } from "../../../js/4101.js";
8
+ import { validateEmail } from "../../../src/validation.js.js";
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ var meeting_store_Step = /*#__PURE__*/ function(Step) {
19
+ Step["Select"] = "select";
20
+ Step["Email"] = "email";
21
+ return Step;
22
+ }({});
23
+ /**
24
+ * How many time slots a page holds, by the layout the booker is drawing in.
25
+ *
26
+ * The grid is three across when the booker is compact and four when it is not, and
27
+ * the surfaces that draw it full size have a 500px card to fill — five rows of
28
+ * 36px slots. Paging a wide grid twelve at a time left two of those rows empty and
29
+ * put a "next" arrow in front of times that would have fitted on screen.
30
+ */ const PAGE_SIZE = {
31
+ small: 12,
32
+ large: 20
33
+ };
34
+ class MeetingStore {
35
+ // Actions
36
+ selectTimeSlot(timeSlot) {
37
+ this.selectedTimeSlot.value = timeSlot;
38
+ }
39
+ selectTimeZone(timeZone) {
40
+ this.timeZone.value = timeZone;
41
+ }
42
+ setEmail(email) {
43
+ signals_core_module_r(()=>{
44
+ this.email.value = email;
45
+ this.error.value = null;
46
+ });
47
+ }
48
+ setStep(step) {
49
+ this.step.value = step;
50
+ }
51
+ gotoNextStep() {
52
+ this.setStep("email");
53
+ }
54
+ gotoPrevStep() {
55
+ this.setStep("select");
56
+ }
57
+ navigateToPrevWeek() {
58
+ this.navigateToWeek(-1);
59
+ }
60
+ navigateToNextWeek() {
61
+ this.navigateToWeek(1);
62
+ }
63
+ navigateToPrevPage() {
64
+ this.navigateToPage(-1);
65
+ }
66
+ navigateToNextPage() {
67
+ this.navigateToPage(1);
68
+ }
69
+ selectDate(date) {
70
+ const index = findFirstSlotIndexFrom(this.sortedSlots.value, date);
71
+ if (index < this.sortedSlots.value.length) {
72
+ this.selectTimeSlot(this.sortedSlots.value[index]);
73
+ }
74
+ }
75
+ async confirmBooking() {
76
+ // Early return if form is not ready
77
+ if (this.submitDisabled.value) return;
78
+ const payload = this.buildPayload();
79
+ if (!payload) return;
80
+ // Keep reference to the offer message the confirmation is for
81
+ const offerMessage = this.activeOfferMessage.value;
82
+ if (!offerMessage) return;
83
+ try {
84
+ signals_core_module_r(()=>{
85
+ this.loading.value = true;
86
+ this.error.value = null;
87
+ });
88
+ if (this.rootStore.featureFlags.meetingEmailValidation) {
89
+ const email = this.email.value.trim();
90
+ const isEmailValid = await this.rootStore.validateEmail(email, "Meetings");
91
+ if (!isEmailValid) {
92
+ signals_core_module_r(()=>{
93
+ this.error.value = "Invalid email address";
94
+ this.loading.value = false;
95
+ });
96
+ return;
97
+ }
98
+ }
99
+ const response = await this.rootStore.sendMessage(payload, {
100
+ optimistic: false
101
+ });
102
+ if (response.error) {
103
+ throw new Error(response.error.message);
104
+ }
105
+ signals_core_module_r(()=>{
106
+ this.rootStore.updateMessage(offerMessage, {
107
+ calendarEventBooked: true
108
+ });
109
+ this.booked.value = true;
110
+ this.bookedEmail.value = this.email.value;
111
+ this.bookedTimeSlot.value = this.selectedTimeSlot.value;
112
+ // Clear the loading flag so any consumer of meetingStore.loading (e.g. the
113
+ // Confirm button's "Confirming..." label) returns to its idle state. The
114
+ // error branch below does the same; both success and error paths must
115
+ // converge here, otherwise the button stays in a perpetual spinner in
116
+ // flows where activeOfferMessage does not change after booking (the
117
+ // element-conversation lightbox path keeps the same offer reference).
118
+ this.loading.value = false;
119
+ // Do not call close() — lightbox renders its own confirmation UI;
120
+ // MeetingBooker watches booked and calls close() via effect.
121
+ });
122
+ } catch (e) {
123
+ signals_core_module_r(()=>{
124
+ this.error.value = (e == null ? void 0 : e.message) || "Something went wrong. Please try again.";
125
+ this.loading.value = false;
126
+ });
127
+ }
128
+ }
129
+ close() {
130
+ this.rootStore.closeMeetingBooker();
131
+ }
132
+ reset() {
133
+ this.outcomeTracker.dispose();
134
+ signals_core_module_r(()=>{
135
+ this.selectedTimeSlot.value = null;
136
+ this.timeZone.value = getDefaultTimeZone();
137
+ this.step.value = "select";
138
+ this.email.value = "";
139
+ this.loading.value = false;
140
+ this.error.value = null;
141
+ this.additionalAttendees.value = [];
142
+ this.showAdditionalAttendeesInput.value = false;
143
+ this.additionalAttendeesError.value = null;
144
+ this.booked.value = false;
145
+ this.bookedEmail.value = null;
146
+ this.bookedTimeSlot.value = null;
147
+ });
148
+ }
149
+ setError(message) {
150
+ this.error.value = message;
151
+ }
152
+ /**
153
+ * Resolve the "booker showing" SLI outcome as shown — called when the booker
154
+ * content first renders, whether that is the slot grid or the no-availability
155
+ * empty state. Empty availability is a successful render (backend responded
156
+ * with no open times), not a booker failure.
157
+ */ /**
158
+ * @param offerMessageId The offer this render is reporting. Callers should pass
159
+ * the id they rendered with rather than relying on the default: the default
160
+ * reads live state, and a second offer landing between the render and this
161
+ * call would report the newer id, which the intent tracker rejects as
162
+ * belonging to a different intent — silently dropping the timing.
163
+ */ markShown(offerMessageId) {
164
+ if (offerMessageId === void 0) offerMessageId = (()=>{
165
+ var _this_activeOfferMessage_value;
166
+ return (_this_activeOfferMessage_value = this.activeOfferMessage.value) == null ? void 0 : _this_activeOfferMessage_value.id;
167
+ })();
168
+ this.outcomeTracker.markShown();
169
+ // Closes the pre-offer window's visitor-experienced total (intent -> shown).
170
+ // No-ops unless this offer was preceded by an intent signal on this page.
171
+ if (offerMessageId) this.rootStore.bookerIntentTracker.markShown(offerMessageId);
172
+ }
173
+ toggleAdditionalAttendeesInput() {
174
+ this.showAdditionalAttendeesInput.value = !this.showAdditionalAttendeesInput.value;
175
+ }
176
+ addAttendeeEmail(email) {
177
+ const trimmedEmail = email.trim();
178
+ if (!trimmedEmail) return false;
179
+ if (!this.validateEmail(trimmedEmail)) {
180
+ this.additionalAttendeesError.value = '"' + trimmedEmail + '" is not a valid email address';
181
+ return false;
182
+ }
183
+ if (this.additionalAttendees.value.includes(trimmedEmail)) {
184
+ this.additionalAttendeesError.value = '"' + trimmedEmail + '" is already added';
185
+ return false;
186
+ }
187
+ signals_core_module_r(()=>{
188
+ this.additionalAttendees.value = [
189
+ ...this.additionalAttendees.value,
190
+ trimmedEmail
191
+ ];
192
+ this.additionalAttendeesError.value = null;
193
+ });
194
+ return true;
195
+ }
196
+ removeAttendeeEmail(email) {
197
+ this.additionalAttendees.value = this.additionalAttendees.value.filter((e)=>e !== email);
198
+ }
199
+ clearAdditionalAttendeesError() {
200
+ this.additionalAttendeesError.value = null;
201
+ }
202
+ // Everything below is private (helpers)
203
+ validateEmail(email) {
204
+ return /.+@.+\..+/.test(email);
205
+ }
206
+ // Conversation type this surface serves. A smart-form / CTA offer arrives via
207
+ // the element conversation, a separate signal from the chat-only
208
+ // `activeConversation`; when the active offer is that element offer the
209
+ // conversation is `element` (-> pathway_origin `form`). Otherwise it is the
210
+ // chat conversation's type (AI vs human splits on offer source, not type).
211
+ conversationType() {
212
+ var _ref;
213
+ var _this_rootStore_activeConversation_value;
214
+ if (this.rootStore.elementConversationOffer.value) return "element";
215
+ return (_ref = (_this_rootStore_activeConversation_value = this.rootStore.activeConversation.value) == null ? void 0 : _this_rootStore_activeConversation_value.type) != null ? _ref : "chat";
216
+ }
217
+ bookerPathwayOrigin() {
218
+ var _this_activeOfferMessage_value;
219
+ // Match the server: `element` -> `form`, an `auto_respond` offer -> `ai_agent`,
220
+ // otherwise `chat`.
221
+ return bookerPathwayOrigin(this.conversationType(), (_this_activeOfferMessage_value = this.activeOfferMessage.value) == null ? void 0 : _this_activeOfferMessage_value.source);
222
+ }
223
+ initialize() {
224
+ const message = this.activeOfferMessage.value;
225
+ if (!message) return;
226
+ // Arm at offer-receipt (not component mount) so an offer that never renders
227
+ // still resolves to a terminal SLI outcome. `arm()` is internally guarded
228
+ // (`safely()`), so no outer try/catch is needed.
229
+ this.outcomeTracker.arm(message.id, this.bookerPathwayOrigin(), this.conversationType());
230
+ signals_core_module_r(()=>{
231
+ var _ref;
232
+ var _message_availableSlots;
233
+ this.selectedTimeSlot.value = (_ref = (_message_availableSlots = message.availableSlots) == null ? void 0 : _message_availableSlots[0]) != null ? _ref : null;
234
+ this.timeZone.value = message.timeZone || new Intl.DateTimeFormat().resolvedOptions().timeZone;
235
+ this.email.value = message.calendarEventInviteEmail || "";
236
+ this.step.value = "select";
237
+ this.loading.value = false;
238
+ this.error.value = null;
239
+ this.additionalAttendees.value = [];
240
+ this.showAdditionalAttendeesInput.value = false;
241
+ this.additionalAttendeesError.value = null;
242
+ });
243
+ }
244
+ navigateToWeek(direction) {
245
+ const targetSlot = direction === -1 ? this.prevSlotBeforeWeek.value : this.nextSlotAfterWeek.value;
246
+ if (targetSlot) {
247
+ this.selectTimeSlot(targetSlot);
248
+ }
249
+ }
250
+ navigateToPage(direction) {
251
+ const hasPage = direction === -1 ? this.hasPrevSlotPage.value : this.hasNextSlotPage.value;
252
+ if (!hasPage) return;
253
+ const targetIndex = (this.slotPage.value + direction) * this.slotPageSize.value;
254
+ const slots = this.sameDaySlots.value;
255
+ if (targetIndex >= 0 && targetIndex < slots.length) {
256
+ this.selectTimeSlot(slots[targetIndex]);
257
+ }
258
+ }
259
+ buildPayload() {
260
+ const selectedTimeSlot = this.selectedTimeSlot.value;
261
+ const activeOfferMessage = this.activeOfferMessage.value;
262
+ if (!selectedTimeSlot || !activeOfferMessage) return null;
263
+ const payload = {
264
+ type: "calendar_event_pick",
265
+ replyToId: activeOfferMessage.id,
266
+ botStep: activeOfferMessage.botStep,
267
+ executionStep: activeOfferMessage.executionStep,
268
+ calendarEventStartsAt: selectedTimeSlot.startsAt,
269
+ calendarEventInviteEmail: this.email.value,
270
+ selectedTimeZone: this.timeZone.value,
271
+ calendarEvent: {
272
+ id: esm_browser_v4(),
273
+ startsAt: selectedTimeSlot.startsAt,
274
+ endsAt: selectedTimeSlot.endsAt,
275
+ email: this.email.value,
276
+ timeZone: this.timeZone.value
277
+ }
278
+ };
279
+ // Include additional attendees if any
280
+ if (this.additionalAttendees.value.length > 0) {
281
+ payload.additionalAttendeesEmails = this.additionalAttendees.value;
282
+ }
283
+ return payload;
284
+ }
285
+ // eslint-disable-next-line no-useless-constructor
286
+ constructor(rootStore){
287
+ this.rootStore = rootStore;
288
+ // State (public)
289
+ this.selectedTimeSlot = signals_core_module_d(null);
290
+ this.timeZone = signals_core_module_d(getDefaultTimeZone());
291
+ this.step = signals_core_module_d("select");
292
+ this.email = signals_core_module_d("");
293
+ this.loading = signals_core_module_d(false);
294
+ this.error = signals_core_module_d(null);
295
+ this.additionalAttendees = signals_core_module_d([]);
296
+ this.showAdditionalAttendeesInput = signals_core_module_d(false);
297
+ this.additionalAttendeesError = signals_core_module_d(null);
298
+ // Post-booking confirmation state (set after successful booking; cleared on reset)
299
+ this.booked = signals_core_module_d(false);
300
+ this.bookedEmail = signals_core_module_d(null);
301
+ this.bookedTimeSlot = signals_core_module_d(null);
302
+ /**
303
+ * Which of the two slot-grid layouts is on screen. Set by whichever surface is
304
+ * rendering the selector, since the choice is made from context and viewport
305
+ * there; only one booker surface is ever mounted, so one value covers it.
306
+ */ this.slotLayout = signals_core_module_d("small");
307
+ /** How many slots a page holds, and so how many cells the grid draws. */ this.slotPageSize = signals_core_module_w(()=>PAGE_SIZE[this.slotLayout.value]);
308
+ // Derived state (public)
309
+ this.activeOfferMessage = signals_core_module_w(()=>{
310
+ // Fullscreen lightbox flow from smart forms/buttons takes precedence.
311
+ const elementOffer = this.rootStore.elementConversationOffer.value;
312
+ if (elementOffer) return elementOffer;
313
+ // Every other offer opens in the artifact overlay.
314
+ const artifactMessage = this.rootStore.artifact.message.value;
315
+ return (artifactMessage == null ? void 0 : artifactMessage.type) === "calendar_event_offer" ? artifactMessage : null;
316
+ });
317
+ // Derived state (private)
318
+ this.availableSlots = signals_core_module_w(()=>{
319
+ var _ref;
320
+ var _this_activeOfferMessage_value;
321
+ return (_ref = (_this_activeOfferMessage_value = this.activeOfferMessage.value) == null ? void 0 : _this_activeOfferMessage_value.availableSlots) != null ? _ref : [];
322
+ });
323
+ this.durationSeconds = signals_core_module_w(()=>{
324
+ var _ref;
325
+ var _this_activeOfferMessage_value;
326
+ return (_ref = (_this_activeOfferMessage_value = this.activeOfferMessage.value) == null ? void 0 : _this_activeOfferMessage_value.calendarEventTypeDuration) != null ? _ref : 0;
327
+ });
328
+ this.emailValid = signals_core_module_w(()=>{
329
+ const email = this.email.value.trim();
330
+ const [valid] = validateEmail(email, false);
331
+ return valid;
332
+ });
333
+ this.sortedSlots = signals_core_module_w(()=>[
334
+ ...this.availableSlots.value
335
+ ].sort((a, b)=>a.startsAt.localeCompare(b.startsAt)));
336
+ this.sameDaySlots = signals_core_module_w(()=>{
337
+ const slot = this.selectedTimeSlot.value;
338
+ if (!slot) return [];
339
+ const tz = this.timeZone.value;
340
+ return getSameDaySlots(slot, this.sortedSlots.value, tz);
341
+ });
342
+ this.sameDaySlotsEmpty = signals_core_module_w(()=>this.sameDaySlots.value.length === 0);
343
+ /**
344
+ * The page is derived from where the selected slot falls, never stored. That is
345
+ * what keeps a change of page size safe: resizing cannot strand the view past the
346
+ * last page, because there is no index to go stale — the page is recomputed from
347
+ * a selection that is always somewhere in the list.
348
+ */ this.slotPage = signals_core_module_w(()=>{
349
+ const slot = this.selectedTimeSlot.value;
350
+ if (!slot || this.sameDaySlotsEmpty.value) return 0;
351
+ const index = this.sameDaySlots.value.findIndex((s)=>s.startsAt === slot.startsAt);
352
+ return index >= 0 ? Math.floor(index / this.slotPageSize.value) : 0;
353
+ });
354
+ this.slotPageCount = signals_core_module_w(()=>Math.ceil(this.sameDaySlots.value.length / this.slotPageSize.value));
355
+ this.nextSlotAfterWeek = signals_core_module_w(()=>{
356
+ const slot = this.selectedTimeSlot.value;
357
+ if (!slot) return null;
358
+ const tz = this.timeZone.value;
359
+ return getNextSlotAfterWeek(slot, this.sortedSlots.value, tz);
360
+ });
361
+ this.prevSlotBeforeWeek = signals_core_module_w(()=>{
362
+ const slot = this.selectedTimeSlot.value;
363
+ if (!slot) return null;
364
+ const tz = this.timeZone.value;
365
+ return getPrevSlotBeforeWeek(slot, this.sortedSlots.value, tz);
366
+ });
367
+ this.displayedTimeSlots = signals_core_module_w(()=>this.sameDaySlots.value.slice(this.slotPage.value * this.slotPageSize.value, (this.slotPage.value + 1) * this.slotPageSize.value));
368
+ this.durationMinutes = signals_core_module_w(()=>Math.max(1, Math.round(this.durationSeconds.value / 60)));
369
+ // Public computed state
370
+ this.submitDisabled = $any(this.loading, $not($exists(this.selectedTimeSlot)), $not(this.emailValid), $exists(this.additionalAttendeesError));
371
+ this.calendarDays = signals_core_module_w(()=>{
372
+ const slot = this.selectedTimeSlot.value;
373
+ if (!slot) return [];
374
+ const tz = this.timeZone.value;
375
+ const locale = this.rootStore.translationStore.effectiveLocale.value;
376
+ return buildCalendarDays(slot, tz, this.sortedSlots.value, locale);
377
+ });
378
+ this.hasPrevWeek = signals_core_module_w(()=>$exists(this.prevSlotBeforeWeek).value);
379
+ this.hasNextWeek = signals_core_module_w(()=>$exists(this.nextSlotAfterWeek).value);
380
+ this.hasNextSlotPage = signals_core_module_w(()=>this.slotPage.value < this.slotPageCount.value - 1);
381
+ this.hasPrevSlotPage = signals_core_module_w(()=>this.slotPage.value > 0);
382
+ this.displayedTimeSlotItems = signals_core_module_w(()=>{
383
+ const slot = this.selectedTimeSlot.value;
384
+ const tz = this.timeZone.value;
385
+ const locale = this.rootStore.translationStore.effectiveLocale.value;
386
+ return this.displayedTimeSlots.value.map((s)=>({
387
+ slot: s,
388
+ label: formatTimeShort(s.startsAt, tz, locale),
389
+ isSelected: s === slot
390
+ }));
391
+ });
392
+ this.availableDateStrings = signals_core_module_w(()=>{
393
+ const tz = this.timeZone.value;
394
+ const set = new Set();
395
+ const fmt = new Intl.DateTimeFormat("en-CA", {
396
+ timeZone: tz,
397
+ year: "numeric",
398
+ month: "2-digit",
399
+ day: "2-digit"
400
+ });
401
+ for (const slot of this.sortedSlots.value){
402
+ set.add(fmt.format(new Date(slot.startsAt)));
403
+ }
404
+ return set;
405
+ });
406
+ this.selectedDateString = signals_core_module_w(()=>{
407
+ const slot = this.selectedTimeSlot.value;
408
+ if (!slot) return null;
409
+ const tz = this.timeZone.value;
410
+ return new Intl.DateTimeFormat("en-CA", {
411
+ timeZone: tz,
412
+ year: "numeric",
413
+ month: "2-digit",
414
+ day: "2-digit"
415
+ }).format(new Date(slot.startsAt));
416
+ });
417
+ this.durationLabel = signals_core_module_w(()=>{
418
+ const minutes = this.durationMinutes.value;
419
+ if (!minutes) return "";
420
+ return this.rootStore.translationStore.t("meetings.durationMinutes", {
421
+ count: minutes
422
+ });
423
+ });
424
+ this.monthTitle = signals_core_module_w(()=>{
425
+ const slot = this.selectedTimeSlot.value;
426
+ if (!slot) return null;
427
+ const d = new Date(slot.startsAt);
428
+ const key = d.getFullYear() + "-" + ("" + (d.getMonth() + 1)).padStart(2, "0") + "-" + ("" + d.getDate()).padStart(2, "0");
429
+ const locale = this.rootStore.translationStore.effectiveLocale.value;
430
+ return formatMonthTitle(key, locale);
431
+ });
432
+ this.minDate = signals_core_module_w(()=>{
433
+ const slots = this.sortedSlots.value;
434
+ if (slots.length === 0) return null;
435
+ const date = new Date(slots[0].startsAt);
436
+ return date.getFullYear() + "-" + ("" + (date.getMonth() + 1)).padStart(2, "0") + "-" + ("" + date.getDate()).padStart(2, "0");
437
+ });
438
+ this.maxDate = signals_core_module_w(()=>{
439
+ const slots = this.sortedSlots.value;
440
+ if (slots.length === 0) return null;
441
+ const date = new Date(slots[slots.length - 1].startsAt);
442
+ return date.getFullYear() + "-" + ("" + (date.getMonth() + 1)).padStart(2, "0") + "-" + ("" + date.getDate()).padStart(2, "0");
443
+ });
444
+ // Signal subscriptions
445
+ this.signalSubscriptions = [
446
+ // Active Offer
447
+ ()=>this.activeOfferMessage.subscribe(this.handleActiveOfferMessageChange)
448
+ ];
449
+ this.handleActiveOfferMessageChange = (newOfferMessage)=>{
450
+ signals_core_module_r(()=>{
451
+ if (newOfferMessage) {
452
+ this.initialize();
453
+ } else {
454
+ this.reset();
455
+ }
456
+ });
457
+ };
458
+ // Emits the "booker showing" SLI outcome (shown/failed/abandoned) per offer.
459
+ this.outcomeTracker = new BookerOutcomeTracker({
460
+ surface: BOOKER_SURFACE.MULTIMODAL,
461
+ log: (params)=>{
462
+ // Mirrors what `widget.serverLog` does for the legacy booker. This store
463
+ // logs through the module singleton rather than the widget wrapper, so
464
+ // without this the host-side form/CTA tracker never observes a multimodal
465
+ // booker being shown — and the element lightbox, which is the multimodal
466
+ // form pathway, would silently lose its intent -> shown timing.
467
+ observeBookerOutcome(params);
468
+ serverLogger.serverLog(params);
469
+ }
470
+ });
471
+ this.signalSubscriptions.forEach((subscription)=>subscription());
472
+ }
473
+ }
474
+ /* export default */ const meeting_store = (MeetingStore);
475
+
476
+ export { MeetingStore, meeting_store_Step as Step };
477
+ export default meeting_store;
@@ -0,0 +1,73 @@
1
+ import { signals_core_module_d, signals_core_module_w } from "../../../js/multimodal_v2.js";
2
+ import { AvatarProvider as types_AvatarProvider } from "../types.js";
3
+
4
+ function _extends() {
5
+ _extends = Object.assign || function(target) {
6
+ for(var i = 1; i < arguments.length; i++){
7
+ var source = arguments[i];
8
+ for(var key in source){
9
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
10
+ target[key] = source[key];
11
+ }
12
+ }
13
+ }
14
+ return target;
15
+ };
16
+ return _extends.apply(this, arguments);
17
+ }
18
+
19
+
20
+ class ParticipantStore {
21
+ dispose() {
22
+ this.participants.value = {};
23
+ }
24
+ // eslint-disable-next-line no-useless-constructor
25
+ constructor(callStore){
26
+ this.callStore = callStore;
27
+ // participants
28
+ this.participants = signals_core_module_d({});
29
+ // Computed
30
+ this.avatarParticipant = signals_core_module_w(()=>{
31
+ const participants = this.participants.value;
32
+ const avatarParticipant = Object.values(participants).find((p)=>p.user_name === "Tavus Echo Audio Stream");
33
+ return avatarParticipant || null;
34
+ });
35
+ this.coffeeAgentParticipant = signals_core_module_w(()=>{
36
+ const participants = this.participants.value;
37
+ const coffeeAgentParticipant = Object.values(participants).find((p)=>p.user_name === "Agent");
38
+ return coffeeAgentParticipant || null;
39
+ });
40
+ /**
41
+ * The participant whose video track is the avatar.
42
+ *
43
+ * With failovers enabled this follows the provider Coffee reports rather than which tracks
44
+ * exist: the bot publishes a video track from the moment it joins and leaves it empty unless an
45
+ * Anam cutover commits, so track presence says nothing about which one to render.
46
+ *
47
+ * With failovers off there is only ever one candidate, so this stays on the original per-team
48
+ * flag and ignores the reported provider entirely.
49
+ */ this.videoParticipant = signals_core_module_w(()=>{
50
+ const { rootStore } = this.callStore;
51
+ if (rootStore.featureFlags.piperXEnableVideoFailovers) {
52
+ switch(rootStore.activeAvatarProvider.value){
53
+ case types_AvatarProvider.ANAM:
54
+ return this.coffeeAgentParticipant.value;
55
+ case types_AvatarProvider.TAVUS:
56
+ return this.avatarParticipant.value;
57
+ default:
58
+ break;
59
+ }
60
+ }
61
+ const isAnam = rootStore.featureFlags.piperXAnam;
62
+ return isAnam ? this.coffeeAgentParticipant.value : this.avatarParticipant.value;
63
+ });
64
+ this.updateParticipants = ()=>{
65
+ const call = this.callStore.dailyCall.value;
66
+ if (!call) return;
67
+ this.participants.value = _extends({}, call.participants());
68
+ };
69
+ }
70
+ }
71
+
72
+
73
+ export default ParticipantStore;