@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,328 @@
1
+ import { toIntlLocale } from "../../utils/locale.js";
2
+
3
+
4
+ function getDefaultTimeZone() {
5
+ return new Intl.DateTimeFormat().resolvedOptions().timeZone;
6
+ }
7
+ /**
8
+ * Format time according to locale conventions.
9
+ * Uses Intl.DateTimeFormat to respect each locale's native time format:
10
+ * - en-US: 12-hour with AM/PM (e.g., "3:00 PM")
11
+ * - fr-FR: 24-hour (e.g., "15:00")
12
+ * - fr-CA: 24-hour with "h" (e.g., "15 h 00")
13
+ * - zh-CN: 12-hour with Chinese AM/PM (e.g., "下午3:00")
14
+ * - ja-JP: 24-hour (e.g., "15:00")
15
+ * - etc.
16
+ */ function formatTime(iso, tz, locale) {
17
+ const date = new Date(iso);
18
+ const intlLocale = toIntlLocale(locale);
19
+ try {
20
+ return new Intl.DateTimeFormat(intlLocale, {
21
+ timeZone: tz || undefined,
22
+ hour: "numeric",
23
+ minute: "2-digit",
24
+ timeZoneName: "short"
25
+ }).format(date);
26
+ } catch (unused) {
27
+ return date.toLocaleString();
28
+ }
29
+ }
30
+ /**
31
+ * Format time without timezone name.
32
+ * Uses Intl.DateTimeFormat to respect each locale's native time format.
33
+ */ function formatTimeShort(iso, tz, locale) {
34
+ const d = new Date(iso);
35
+ const intlLocale = toIntlLocale(locale);
36
+ try {
37
+ return d.toLocaleTimeString(intlLocale, {
38
+ hour: "numeric",
39
+ minute: "2-digit",
40
+ timeZone: tz || undefined
41
+ });
42
+ } catch (unused) {
43
+ return d.toLocaleTimeString();
44
+ }
45
+ }
46
+ function formatMonthTitle(dateKey, locale) {
47
+ const [y, m, d] = dateKey.split("-").map((n)=>parseInt(n, 10));
48
+ const date = new Date(y, m - 1, d);
49
+ const intlLocale = toIntlLocale(locale);
50
+ return new Intl.DateTimeFormat(intlLocale, {
51
+ month: "long",
52
+ year: "numeric"
53
+ }).format(date);
54
+ }
55
+ function formatDate(iso, tz, locale) {
56
+ var _parts_find;
57
+ const d = new Date(iso);
58
+ const intlLocale = toIntlLocale(locale);
59
+ const opts = {
60
+ weekday: "long",
61
+ month: "long",
62
+ day: "numeric",
63
+ year: "numeric",
64
+ timeZone: tz || undefined
65
+ };
66
+ const parts = new Intl.DateTimeFormat(intlLocale, opts).formatToParts(d);
67
+ const dayNum = Number(((_parts_find = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find.value) || d.getDate());
68
+ // Only add ordinal suffix for English locales
69
+ const isEnglish = intlLocale.startsWith("en");
70
+ const withOrdinal = parts.map((p)=>p.type === "day" && isEnglish ? "" + dayNum + ordinal(dayNum) : p.value).join("");
71
+ return withOrdinal;
72
+ }
73
+ /**
74
+ * "Thu, Jul 30" — the summary rail's restatement of the chosen day, which sits in a
75
+ * 264px column and has to stay on one line beside its icon. `formatDate` above spells
76
+ * the weekday, month and year out in full for the details card, which has the width.
77
+ */ function formatDateCompact(iso, tz, locale) {
78
+ const date = new Date(iso);
79
+ const intlLocale = toIntlLocale(locale);
80
+ try {
81
+ return new Intl.DateTimeFormat(intlLocale, {
82
+ timeZone: tz || undefined,
83
+ weekday: "short",
84
+ month: "short",
85
+ day: "numeric"
86
+ }).format(date);
87
+ } catch (unused) {
88
+ return date.toLocaleDateString();
89
+ }
90
+ }
91
+ function formatDayShort(date, locale) {
92
+ const intlLocale = toIntlLocale(locale);
93
+ return date.toLocaleDateString(intlLocale, {
94
+ weekday: "short"
95
+ });
96
+ }
97
+ function ordinal(n) {
98
+ const s = [
99
+ "th",
100
+ "st",
101
+ "nd",
102
+ "rd"
103
+ ];
104
+ const v = n % 100;
105
+ return s[(v - 20) % 10] || s[v] || s[0];
106
+ }
107
+ /**
108
+ * Returns the first Sunday of the week containing the given date
109
+ * @param isoTimestamp - ISO 8601 timestamp string
110
+ * @param timeZone - IANA timeZone identifier (e.g., 'America/New_York')
111
+ * @returns The Date object for the first Sunday of that week
112
+ */ function getFirstSundayOfWeek(isoTimestamp, timeZone) {
113
+ var _parts_find, _parts_find1, _parts_find2;
114
+ // Create a date in the target timeZone
115
+ const date = new Date(isoTimestamp);
116
+ // Get the date components in the target timeZone (en-US format for consistency)
117
+ const formatter = new Intl.DateTimeFormat("en-US", {
118
+ timeZone,
119
+ year: "numeric",
120
+ month: "2-digit",
121
+ day: "2-digit"
122
+ });
123
+ const parts = formatter.formatToParts(date);
124
+ const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
125
+ const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
126
+ const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
127
+ // Create a date object for the day in the target timeZone at midnight
128
+ const localDate = new Date(year + "-" + month + "-" + day + "T00:00:00");
129
+ // Get the day of the week (0 = Sunday)
130
+ const dayOfWeek = localDate.getDay();
131
+ // Calculate the Sunday of that week
132
+ const sunday = new Date(localDate);
133
+ sunday.setDate(localDate.getDate() - dayOfWeek);
134
+ return sunday;
135
+ }
136
+ /**
137
+ * Binary search to find the first slot on or after the target date
138
+ * @param slots - Sorted array of slots
139
+ * @param targetDate - Target date to search for
140
+ * @returns Index of the first slot >= targetDate, or slots.length if none found
141
+ */ function findFirstSlotIndexFrom(slots, targetDate) {
142
+ let left = 0;
143
+ let right = slots.length;
144
+ while(left < right){
145
+ const mid = Math.floor((left + right) / 2);
146
+ const slotDate = new Date(slots[mid].startsAt);
147
+ if (slotDate >= targetDate) {
148
+ right = mid;
149
+ } else {
150
+ left = mid + 1;
151
+ }
152
+ }
153
+ return left;
154
+ }
155
+ /**
156
+ * Builds an array of calendar days for the week containing the given time slot
157
+ * @param slot - Calendar event time slot with startsAt ISO timestamp
158
+ * @param timeZone - IANA timeZone identifier
159
+ * @param slots - SORTED array of all calendar event time slots
160
+ * @param locale - Optional locale for day name formatting
161
+ * @returns Array of calendar days with abbreviated day names, date values, and slots for each day
162
+ */ function buildCalendarDays(slot, timeZone, slots, locale) {
163
+ const firstSunday = getFirstSundayOfWeek(slot.startsAt, timeZone);
164
+ // First, create calendar days with empty slots
165
+ const days = [];
166
+ for(let i = 0; i < 7; i++){
167
+ const currentDate = new Date(firstSunday);
168
+ currentDate.setDate(firstSunday.getDate() + i);
169
+ days.push({
170
+ day: formatDayShort(currentDate, locale),
171
+ value: currentDate.getDate(),
172
+ slots: [],
173
+ isSelected: false,
174
+ isDisabled: false
175
+ });
176
+ }
177
+ // Use binary search to find the first slot in this week
178
+ const startIndex = findFirstSlotIndexFrom(slots, firstSunday);
179
+ if (startIndex >= slots.length) {
180
+ return days;
181
+ }
182
+ const weekEnd = new Date(firstSunday);
183
+ weekEnd.setDate(firstSunday.getDate() + 7); // Start of next week
184
+ // Now iterate through slots starting from startIndex until we go past the week
185
+ let currentDayIndex = 0;
186
+ const nextDayStart = new Date(firstSunday);
187
+ nextDayStart.setDate(firstSunday.getDate() + 1); // Monday
188
+ for(let slotIndex = startIndex; slotIndex < slots.length; slotIndex++){
189
+ const slotDate = new Date(slots[slotIndex].startsAt);
190
+ // Stop if we've gone past this week
191
+ if (slotDate >= weekEnd) {
192
+ break;
193
+ }
194
+ // Move to next day if current slot is on or after the next day
195
+ while(currentDayIndex < 6 && slotDate >= nextDayStart){
196
+ currentDayIndex++;
197
+ nextDayStart.setDate(nextDayStart.getDate() + 1);
198
+ }
199
+ // Add slot to the current day
200
+ days[currentDayIndex].slots.push(slots[slotIndex]);
201
+ }
202
+ for (const day of days){
203
+ day.isDisabled = day.slots.length === 0;
204
+ day.isSelected = new Date(slot.startsAt).getDate() === day.value;
205
+ }
206
+ return days;
207
+ }
208
+ /**
209
+ * Finds all timeslots on the same day as the given timeslot
210
+ * @param targetSlot - The reference timeslot
211
+ * @param sortedSlots - SORTED array of all timeslots
212
+ * @param timeZone - IANA timeZone identifier for day comparison
213
+ * @returns Array of all slots that fall on the same day as targetSlot
214
+ */ function getSameDaySlots(targetSlot, sortedSlots, timeZone) {
215
+ var _parts_find, _parts_find1, _parts_find2;
216
+ const targetDate = new Date(targetSlot.startsAt);
217
+ // Get the start of the day in the target timeZone (YYYY-MM-DD format)
218
+ const formatter = new Intl.DateTimeFormat("en-US", {
219
+ timeZone,
220
+ year: "numeric",
221
+ month: "2-digit",
222
+ day: "2-digit"
223
+ });
224
+ const parts = formatter.formatToParts(targetDate);
225
+ const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
226
+ const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
227
+ const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
228
+ const dayStart = new Date(year + "-" + month + "-" + day + "T00:00:00");
229
+ // Get the start of the next day
230
+ const nextDayStart = new Date(dayStart);
231
+ nextDayStart.setDate(dayStart.getDate() + 1);
232
+ // Find the first slot on this day
233
+ const startIndex = findFirstSlotIndexFrom(sortedSlots, dayStart);
234
+ if (startIndex >= sortedSlots.length) {
235
+ return []; // No slots found on or after this day
236
+ }
237
+ // Collect all slots on this day
238
+ const sameDaySlots = [];
239
+ for(let i = startIndex; i < sortedSlots.length; i++){
240
+ const slotDate = new Date(sortedSlots[i].startsAt);
241
+ // Stop when we reach the next day
242
+ if (slotDate >= nextDayStart) {
243
+ break;
244
+ }
245
+ sameDaySlots.push(sortedSlots[i]);
246
+ }
247
+ return sameDaySlots;
248
+ }
249
+ /**
250
+ * Returns a Set of all unique days (as Date objects) that contain slots
251
+ * @param slots - Array of timeslots
252
+ * @param timezone - IANA timezone identifier
253
+ * @returns Set of Date objects representing days with slots (each date is set to midnight in the timezone)
254
+ */ function getDaysWithSlots(slots, timeZone) {
255
+ const daysSet = new Set();
256
+ let lastDateString = "";
257
+ for (const slot of slots){
258
+ var _parts_find, _parts_find1, _parts_find2;
259
+ const slotDate = new Date(slot.startsAt);
260
+ // Get the date string in the target timezone (YYYY-MM-DD format)
261
+ const formatter = new Intl.DateTimeFormat("en-US", {
262
+ timeZone,
263
+ year: "numeric",
264
+ month: "2-digit",
265
+ day: "2-digit"
266
+ });
267
+ const parts = formatter.formatToParts(slotDate);
268
+ const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
269
+ const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
270
+ const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
271
+ const dateString = year + "-" + month + "-" + day;
272
+ // Only create a new Date object if this is a different day than the last one
273
+ if (dateString !== lastDateString) {
274
+ // Create a Date object for midnight of this day
275
+ daysSet.add(new Date("" + dateString + "T00:00:00"));
276
+ lastDateString = dateString;
277
+ }
278
+ }
279
+ return daysSet;
280
+ }
281
+ /**
282
+ * Finds the first slot in the week AFTER the week containing the given slot
283
+ * @param targetSlot - The reference slot
284
+ * @param sortedSlots - SORTED array of all slots
285
+ * @param timeZone - IANA timeZone identifier used to compute week boundaries
286
+ * @returns The first slot in the next week, or null if none found
287
+ */ function getNextSlotAfterWeek(targetSlot, sortedSlots, timeZone) {
288
+ // Start of the current week (Sunday) in the target timeZone
289
+ const currentWeekSunday = getFirstSundayOfWeek(targetSlot.startsAt, timeZone);
290
+ // Start of the next week and its end
291
+ const nextWeekStart = new Date(currentWeekSunday);
292
+ nextWeekStart.setDate(currentWeekSunday.getDate() + 7);
293
+ const nextWeekEnd = new Date(nextWeekStart);
294
+ nextWeekEnd.setDate(nextWeekStart.getDate() + 7);
295
+ // Find first slot on or after the start of next week
296
+ const index = findFirstSlotIndexFrom(sortedSlots, nextWeekStart);
297
+ if (index >= sortedSlots.length) return null;
298
+ const candidate = sortedSlots[index];
299
+ const candidateDate = new Date(candidate.startsAt);
300
+ // Ensure the candidate lies within the next week
301
+ return candidateDate < nextWeekEnd ? candidate : null;
302
+ }
303
+ /**
304
+ * Finds the first slot in the week BEFORE the week containing the given slot
305
+ * @param targetSlot - The reference slot
306
+ * @param sortedSlots - SORTED array of all slots
307
+ * @param timeZone - IANA timeZone identifier used to compute week boundaries
308
+ * @returns The first slot in the previous week, or null if none found
309
+ */ function getPrevSlotBeforeWeek(targetSlot, sortedSlots, timeZone) {
310
+ // Start of the current week (Sunday) in the target timeZone
311
+ const currentWeekSunday = getFirstSundayOfWeek(targetSlot.startsAt, timeZone);
312
+ // Previous week boundaries
313
+ const prevWeekStart = new Date(currentWeekSunday);
314
+ prevWeekStart.setDate(currentWeekSunday.getDate() - 7);
315
+ const prevWeekEnd = new Date(currentWeekSunday);
316
+ // Find first slot on or after the start of previous week
317
+ const index = findFirstSlotIndexFrom(sortedSlots, prevWeekStart);
318
+ if (index >= sortedSlots.length) return null;
319
+ const candidate = sortedSlots[index];
320
+ const candidateDate = new Date(candidate.startsAt);
321
+ // Ensure the candidate lies before the start of current week (i.e., within the previous week)
322
+ return candidateDate < prevWeekEnd ? candidate : null;
323
+ }
324
+
325
+ var utils_formatDayShort = /* unused export */ undefined;
326
+ var utils_getDaysWithSlots = /* unused export */ undefined;
327
+ var utils_getFirstSundayOfWeek = /* unused export */ undefined;
328
+ export { buildCalendarDays, findFirstSlotIndexFrom, formatDate, formatDateCompact, formatMonthTitle, formatTime, formatTimeShort, getDefaultTimeZone, getNextSlotAfterWeek, getPrevSlotBeforeWeek, getSameDaySlots, utils_formatDayShort as formatDayShort, utils_getDaysWithSlots as getDaysWithSlots, utils_getFirstSundayOfWeek as getFirstSundayOfWeek };
@@ -0,0 +1,28 @@
1
+ import { jsxRuntime_module_u, utils_module_o, useSignalEffect } from "../../../../js/multimodal_v2.js";
2
+
3
+
4
+
5
+
6
+ const Audio = (param)=>{
7
+ let { audioTrack } = param;
8
+ const audioRef = utils_module_o(null);
9
+ useSignalEffect(()=>{
10
+ const audioElement = audioRef.value;
11
+ if (!audioElement) return;
12
+ if (!audioTrack.value) return;
13
+ audioElement.srcObject = new MediaStream([
14
+ audioTrack.value
15
+ ]);
16
+ return ()=>{
17
+ if (audioElement) {
18
+ audioElement.srcObject = null;
19
+ }
20
+ };
21
+ });
22
+ return /*#__PURE__*/ jsxRuntime_module_u("audio", {
23
+ ref: audioRef,
24
+ autoPlay: true
25
+ });
26
+ };
27
+
28
+ export { Audio };
@@ -0,0 +1,188 @@
1
+ import { jsxRuntime_module_u, preact_module_k, utils_module_u } from "../../../../js/multimodal_v2.js";
2
+ import { WarningIcon, ExpandIcon, PipIcon, MinimizeIcon, MicOffIcon, UpCaretIcon, SpinnerIcon, PinnedIcon, MicIcon } from "../../images/icons.js";
3
+ import "../../styled-system/jsx/index.js";
4
+ import { Text, t } from "../helpers/Localization.js";
5
+ import { Button } from "../shared/Button.js";
6
+ import { Dropdown } from "../shared/controls/Dropdown.js";
7
+ import { PillToggle } from "../shared/controls/PillToggle.js";
8
+ import { default as shared_Tooltip } from "../shared/Tooltip.js";
9
+ import { ConversationMode as types_ConversationMode } from "../../types.js";
10
+ import { styled } from "../../styled-system/jsx/factory.js";
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+ const Controls = (param)=>{
23
+ let { connectingStatus, conversationMode, mic, maximize, minimizeToCorner, endCall } = param;
24
+ return /*#__PURE__*/ jsxRuntime_module_u(Container, {
25
+ "data-component-name": "Controls.Container",
26
+ children: [
27
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
28
+ when: conversationMode.visible,
29
+ children: /*#__PURE__*/ jsxRuntime_module_u(PillToggle, {
30
+ options: VIDEO_MODE_OPTIONS,
31
+ value: conversationMode.currentMode.value,
32
+ onChange: conversationMode.onChange
33
+ })
34
+ }),
35
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
36
+ when: connectingStatus.visible,
37
+ children: /*#__PURE__*/ jsxRuntime_module_u(ConnectingMessage, {
38
+ "data-component-name": "Controls.ConnectingMessage",
39
+ children: [
40
+ /*#__PURE__*/ jsxRuntime_module_u(SpinnerIcon, {}),
41
+ /*#__PURE__*/ jsxRuntime_module_u(ConnectingText, {
42
+ "data-component-name": "Controls.ConnectingText",
43
+ children: /*#__PURE__*/ jsxRuntime_module_u(Text, {
44
+ id: "video.connectingToAudio"
45
+ })
46
+ })
47
+ ]
48
+ })
49
+ }),
50
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
51
+ when: mic.visible,
52
+ children: /*#__PURE__*/ jsxRuntime_module_u(preact_module_k, {
53
+ children: [
54
+ /*#__PURE__*/ jsxRuntime_module_u(Button, {
55
+ variant: "minimal",
56
+ size: "sm",
57
+ iconOnly: true,
58
+ onClick: mic.onToggle,
59
+ disabled: !mic.hasDevicesAvailable.value,
60
+ title: t(()=>mic.isOn.value ? "video.mute" : "video.unmute"),
61
+ ariaLabel: t(()=>mic.isOn.value ? "video.muteMicrophone" : "video.unmuteMicrophone"),
62
+ css: {
63
+ marginRight: "-$sm"
64
+ },
65
+ children: !mic.hasDevicesAvailable.value || !mic.isOn.value ? /*#__PURE__*/ jsxRuntime_module_u(MicOffIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(MicIcon, {})
66
+ }),
67
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
68
+ when: mic.hasDevicesAvailable,
69
+ fallback: /*#__PURE__*/ jsxRuntime_module_u(shared_Tooltip, {
70
+ position: "top",
71
+ content: t("video.grantMicAccess"),
72
+ children: /*#__PURE__*/ jsxRuntime_module_u(WarningIcon, {})
73
+ }),
74
+ children: /*#__PURE__*/ jsxRuntime_module_u(Dropdown, {
75
+ options: mic.devices.value,
76
+ value: mic.selectedDeviceId.value,
77
+ onChange: mic.onDeviceChange,
78
+ ariaLabel: t("video.openMicrophoneMenu"),
79
+ children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
80
+ variant: "minimal",
81
+ size: "xs",
82
+ ariaLabel: t("video.selectMicrophone"),
83
+ iconOnly: true,
84
+ tabIndex: -1,
85
+ css: {
86
+ transform: "rotate(180deg)"
87
+ },
88
+ children: /*#__PURE__*/ jsxRuntime_module_u(UpCaretIcon, {})
89
+ })
90
+ })
91
+ })
92
+ ]
93
+ })
94
+ }),
95
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
96
+ when: maximize.visible,
97
+ children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
98
+ variant: "minimal",
99
+ size: "sm",
100
+ iconOnly: true,
101
+ onClick: maximize.onToggle,
102
+ ariaLabel: t(()=>maximize.isMaximized.value ? "toolbar.minimize" : "toolbar.expand"),
103
+ title: t(()=>maximize.isMaximized.value ? "toolbar.minimize" : "toolbar.expand"),
104
+ children: maximize.isMaximized.value ? /*#__PURE__*/ jsxRuntime_module_u(MinimizeIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(ExpandIcon, {})
105
+ })
106
+ }),
107
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
108
+ when: minimizeToCorner.visible,
109
+ children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
110
+ variant: "minimal",
111
+ size: "sm",
112
+ iconOnly: true,
113
+ onClick: minimizeToCorner.onToggle,
114
+ ariaLabel: t(()=>minimizeToCorner.isClosed.value ? "toolbar.expand" : "toolbar.minimize"),
115
+ title: t(()=>minimizeToCorner.isClosed.value ? "toolbar.expand" : "toolbar.minimize"),
116
+ children: minimizeToCorner.isClosed.value ? /*#__PURE__*/ jsxRuntime_module_u(PinnedIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(PipIcon, {})
117
+ })
118
+ }),
119
+ /*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
120
+ when: endCall.visible,
121
+ children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
122
+ variant: "minimal",
123
+ size: "sm",
124
+ onClick: endCall.onClick,
125
+ ariaLabel: t("video.endCall"),
126
+ "data-component-name": "Controls.EndCallButton",
127
+ css: {
128
+ color: "[#E4251B]",
129
+ fontWeight: "$semibold"
130
+ },
131
+ children: /*#__PURE__*/ jsxRuntime_module_u(Text, {
132
+ id: "video.end"
133
+ })
134
+ })
135
+ })
136
+ ]
137
+ });
138
+ };
139
+ const VIDEO_MODE_OPTIONS = [
140
+ {
141
+ value: types_ConversationMode.VIDEO,
142
+ label: t("video.videoMode"),
143
+ ariaLabel: t("video.videoModeAriaLabel")
144
+ },
145
+ {
146
+ value: types_ConversationMode.VOICE,
147
+ label: t("video.voiceMode"),
148
+ ariaLabel: t("video.voiceModeAriaLabel")
149
+ }
150
+ ];
151
+ const Container = styled("div", {
152
+ base: {
153
+ display: "flex",
154
+ alignItems: "center",
155
+ gap: "[8px]",
156
+ zIndex: 1000
157
+ }
158
+ });
159
+ Container.displayName = "ControlsInner";
160
+ const ConnectingMessage = styled("div", {
161
+ base: {
162
+ display: "flex",
163
+ padding: "[4px 8px 4px 4px]",
164
+ alignItems: "center",
165
+ gap: "[4px]",
166
+ borderRadius: "[100px]",
167
+ border: "1px solid #D0D5DD",
168
+ background: "$white",
169
+ opacity: 0.7,
170
+ "& svg path": {
171
+ fill: "[#8A9394]"
172
+ }
173
+ }
174
+ });
175
+ ConnectingMessage.displayName = "ConnectingMessage";
176
+ const ConnectingText = styled("span", {
177
+ base: {
178
+ fontSize: "12px",
179
+ fontStyle: "normal",
180
+ fontWeight: "$normal",
181
+ lineHeight: "22px",
182
+ color: "[#152229]",
183
+ whiteSpace: "nowrap"
184
+ }
185
+ });
186
+ ConnectingText.displayName = "ConnectingText";
187
+
188
+ export { Controls };
@@ -0,0 +1,63 @@
1
+ import { useComputed, jsxRuntime_module_u, utils_module_o, useSignalEffect } from "../../../../js/multimodal_v2.js";
2
+ import "../../styled-system/jsx/index.js";
3
+ import { Persisted } from "../helpers/Persisted.js";
4
+ import { styled } from "../../styled-system/jsx/factory.js";
5
+
6
+ /** @jsxImportSource preact */
7
+
8
+
9
+
10
+
11
+ const LiveVideo = (props)=>{
12
+ var _props_id;
13
+ const { hidden, liveVideoRef } = useLiveVideo(props);
14
+ return /*#__PURE__*/ jsxRuntime_module_u(VideoElement, {
15
+ "data-component-name": "LiveVideo.VideoElement",
16
+ id: (_props_id = props.id) != null ? _props_id : "live-video",
17
+ elementType: "video",
18
+ innerRef: liveVideoRef,
19
+ autoplay: true,
20
+ muted: true,
21
+ playsInline: true,
22
+ hidden: hidden
23
+ });
24
+ };
25
+ function useLiveVideo(props) {
26
+ const { config } = props;
27
+ const hidden = useComputed(()=>!config.value);
28
+ const liveVideoRef = utils_module_o(null);
29
+ // Handle live video track
30
+ useSignalEffect(()=>{
31
+ if (!liveVideoRef.value || !config.value) return;
32
+ if (config.value.type === "track") {
33
+ liveVideoRef.value.srcObject = new MediaStream([
34
+ config.value.track
35
+ ]);
36
+ } else {
37
+ liveVideoRef.value.src = config.value.src;
38
+ liveVideoRef.value.loop = true;
39
+ }
40
+ });
41
+ return {
42
+ hidden,
43
+ liveVideoRef
44
+ };
45
+ }
46
+ const VideoElement = styled(Persisted, {
47
+ base: {
48
+ width: "[100%]",
49
+ height: "[100%]",
50
+ gridArea: "1 / 1",
51
+ objectFit: "contain"
52
+ },
53
+ variants: {
54
+ hidden: {
55
+ true: {
56
+ display: "none"
57
+ }
58
+ }
59
+ }
60
+ });
61
+ VideoElement.displayName = "VideoElement";
62
+
63
+ export { LiveVideo };