@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,358 @@
1
+ import { hooks_module_, hooks_module_A, jsxRuntime_module_u, hooks_module_T } from "../../../../js/multimodal_v2.js";
2
+ import "../../styled-system/jsx/index.js";
3
+ import { sanitizeHtml } from "../../utils/sanitize_html.js";
4
+ import { styled as factory_styled } from "../../styled-system/jsx/factory.js";
5
+
6
+
7
+ /** @jsxImportSource preact */
8
+
9
+
10
+ const DEFAULT_TRANSFORMERS = {};
11
+ /**
12
+ * The widget renders into a shadow root on the customer's page, so an anchor here navigates the
13
+ * top-level page. Cross-origin links would take the visitor off the site entirely and tear the
14
+ * widget down mid-conversation, so they open in a new tab instead.
15
+ *
16
+ * Same-origin links are deliberately left bare so the navigation interceptor can still soft-navigate
17
+ * them in place for co-browsing.
18
+ */ const EXTERNAL_LINK_TRANSFORMERS = {
19
+ a: (node)=>{
20
+ if (node.hasAttribute("target")) return;
21
+ if (!isCrossOriginHttpUrl(node.getAttribute("href"))) return;
22
+ node.setAttribute("target", "_blank");
23
+ node.setAttribute("rel", withRelTokens(node.getAttribute("rel")));
24
+ }
25
+ };
26
+ /**
27
+ * Renders sanitized HTML content with optional word-by-word animation.
28
+ *
29
+ * Note: This component uses useMemo instead of useComputed because it receives
30
+ * plain props (not signals) from parent components that iterate over message lists.
31
+ * The useEffect for animation handling is acceptable per DEVELOPMENT.md guidelines.
32
+ */ const RichText = (props)=>{
33
+ const { wrapperRef, processedHtml, animated, styled, paragraphSpacing } = useRichText(props);
34
+ return /*#__PURE__*/ jsxRuntime_module_u(Wrapper, {
35
+ ref: wrapperRef,
36
+ animated: animated,
37
+ styled: styled,
38
+ paragraphSpacing: paragraphSpacing,
39
+ dangerouslySetInnerHTML: {
40
+ __html: processedHtml
41
+ }
42
+ });
43
+ };
44
+ function useRichText(param) {
45
+ let { text, animated = false, styled = true, paragraphSpacing = false, elementTransformers = DEFAULT_TRANSFORMERS, onAnimationEnd } = param;
46
+ const wrapperRef = hooks_module_A(null);
47
+ // useMemo is acceptable here since props are plain values, not signals.
48
+ // The expensive DOM processing (sanitization + animation wrapping) benefits from memoization.
49
+ const processedHtml = hooks_module_T(()=>{
50
+ const sanitizeConfig = {
51
+ ADD_ATTR: [
52
+ "target",
53
+ "rel"
54
+ ],
55
+ AFTER_SANITIZE_ATTRIBUTES: (node)=>{
56
+ const tag = node.tagName.toLowerCase();
57
+ // Built-ins run first so a caller-supplied transformer can still override them.
58
+ const builtIn = EXTERNAL_LINK_TRANSFORMERS[tag];
59
+ builtIn == null ? void 0 : builtIn(node);
60
+ const fn = elementTransformers[tag];
61
+ fn == null ? void 0 : fn(node);
62
+ }
63
+ };
64
+ const sanitizedFragment = sanitizeHtml(text, sanitizeConfig);
65
+ if (animated) {
66
+ return processFragmentForAnimation(sanitizedFragment);
67
+ }
68
+ return processFragmentForSerialization(sanitizedFragment);
69
+ }, [
70
+ text,
71
+ animated,
72
+ elementTransformers
73
+ ]);
74
+ // useLayoutEffect ensures the animationend listener is attached before paint,
75
+ // preventing short animations (e.g. 5-10ms) from completing before the listener exists.
76
+ hooks_module_(()=>{
77
+ if (!onAnimationEnd || !wrapperRef.current) return;
78
+ if (!animated) {
79
+ onAnimationEnd();
80
+ return;
81
+ }
82
+ const elements = wrapperRef.current.querySelectorAll("[data-animated-word], [data-animated-element]");
83
+ if (elements.length === 0) {
84
+ onAnimationEnd();
85
+ return;
86
+ }
87
+ const lastElement = elements[elements.length - 1];
88
+ lastElement.addEventListener("animationend", onAnimationEnd);
89
+ return ()=>lastElement.removeEventListener("animationend", onAnimationEnd);
90
+ }, [
91
+ animated,
92
+ onAnimationEnd,
93
+ processedHtml
94
+ ]);
95
+ return {
96
+ wrapperRef,
97
+ processedHtml,
98
+ animated,
99
+ styled,
100
+ paragraphSpacing
101
+ };
102
+ }
103
+ const VOID_ELEMENTS = new Set([
104
+ "area",
105
+ "base",
106
+ "br",
107
+ "col",
108
+ "embed",
109
+ "hr",
110
+ "img",
111
+ "input",
112
+ "link",
113
+ "meta",
114
+ "param",
115
+ "source",
116
+ "track",
117
+ "wbr"
118
+ ]);
119
+ /**
120
+ * Serialize a DOM fragment to HTML string.
121
+ * Consumes the fragment (moves children out) - caller should not reuse it after this.
122
+ */ function processFragmentForSerialization(fragment) {
123
+ const div = document.createElement("div");
124
+ div.appendChild(fragment.cloneNode(true));
125
+ return div.innerHTML;
126
+ }
127
+ /**
128
+ * Process a sanitized DOM fragment and return HTML string with animation metadata.
129
+ * Iterates through the DOM once and builds a string - no DOM mutations.
130
+ */ function processFragmentForAnimation(fragment) {
131
+ const state = {
132
+ accumulatedDelay: 0,
133
+ result: ""
134
+ };
135
+ serializeNode(fragment, state);
136
+ return state.result;
137
+ }
138
+ function serializeNode(node, state) {
139
+ for (const child of node.childNodes){
140
+ if (child.nodeType === Node.TEXT_NODE) {
141
+ serializeTextNode(child.textContent || "", state);
142
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
143
+ serializeElement(child, state);
144
+ }
145
+ }
146
+ }
147
+ function serializeTextNode(text, state) {
148
+ const words = text.match(/\S+\s*/g);
149
+ if (!(words == null ? void 0 : words.length)) {
150
+ // Whitespace-only, preserve as-is
151
+ state.result += escapeHtml(text);
152
+ return;
153
+ }
154
+ // Preserve leading whitespace
155
+ const firstWordStart = text.indexOf(words[0]);
156
+ if (firstWordStart > 0) {
157
+ state.result += escapeHtml(text.slice(0, firstWordStart));
158
+ }
159
+ for (const word of words){
160
+ const duration = word.length * WORD_ANIMATION_DURATION_PER_CHARACTER;
161
+ state.result += '<span data-animated-word="true" style="--animation-duration: ' + duration + "ms; --accumulated-delay: " + state.accumulatedDelay + 'ms">' + escapeHtml(word) + "</span>";
162
+ state.accumulatedDelay += duration;
163
+ }
164
+ }
165
+ function serializeElement(element, state) {
166
+ const tag = element.tagName.toLowerCase();
167
+ // Build opening tag
168
+ state.result += "<" + tag;
169
+ // Copy existing attributes
170
+ for(let i = 0; i < element.attributes.length; i++){
171
+ const attr = element.attributes[i];
172
+ state.result += " " + attr.name + '="' + escapeAttr(attr.value) + '"';
173
+ }
174
+ // Add animation CSS vars for special elements
175
+ if (ELEMENT_ANIMATION_DURATION_MAP[tag]) {
176
+ const duration = ELEMENT_ANIMATION_DURATION_MAP[tag](element);
177
+ state.result += ' data-animated-element="true" style="--animation-duration: ' + duration + "ms; --accumulated-delay: " + state.accumulatedDelay + 'ms"';
178
+ state.accumulatedDelay += duration;
179
+ }
180
+ state.result += ">";
181
+ // Void elements have no children or closing tag
182
+ if (VOID_ELEMENTS.has(tag)) {
183
+ return;
184
+ }
185
+ // Recursively process children
186
+ serializeNode(element, state);
187
+ // Closing tag
188
+ state.result += "</" + tag + ">";
189
+ }
190
+ function escapeHtml(text) {
191
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
192
+ }
193
+ function escapeAttr(value) {
194
+ return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
195
+ }
196
+ /**
197
+ * Whether `href` points at a different origin over http(s).
198
+ *
199
+ * Resolved explicitly rather than read off the `href` IDL property, because these nodes live in a
200
+ * detached <template> whose base URL is not the page's. `document.baseURI` is the base the browser
201
+ * will actually use once the anchor is in the page, so a customer page carrying a cross-origin
202
+ * <base href> still classifies its relative links as external.
203
+ */ function isCrossOriginHttpUrl(href) {
204
+ if (!href) return false;
205
+ try {
206
+ const url = new URL(href, document.baseURI);
207
+ // mailto:/tel: hand off to another app and would strand an empty tab behind.
208
+ if (url.protocol !== "http:" && url.protocol !== "https:") return false;
209
+ return url.origin !== window.location.origin;
210
+ } catch (unused) {
211
+ return false;
212
+ }
213
+ }
214
+ function withRelTokens(existing) {
215
+ const tokens = new Set((existing != null ? existing : "").split(/\s+/).filter(Boolean));
216
+ tokens.add("noopener");
217
+ tokens.add("noreferrer");
218
+ return [
219
+ ...tokens
220
+ ].join(" ");
221
+ }
222
+ // Compute custom animation duration for elements
223
+ // The animation is the same it's a fade in of the entire element
224
+ const ELEMENT_ANIMATION_DURATION_MAP = {
225
+ // Fade in the li::marker before starting animation of the li text
226
+ li: ()=>30
227
+ };
228
+ const WORD_ANIMATION_DURATION_PER_CHARACTER = 5;
229
+ /**
230
+ * External-link glyph, reused from the icon in OpenedPositionSettings so the widget matches the
231
+ * rest of the app.
232
+ *
233
+ * Carried as a mask rather than a background image so the pseudo-element can be painted in
234
+ * currentColor and track whatever colour the link already has. Only the alpha channel is read, so
235
+ * the stroke colour baked into the markup here is arbitrary.
236
+ */ const EXTERNAL_LINK_ICON_URL = "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8.5 1.5H10.5V3.5'/%3E%3Cpath d='M10.5 1.5L6.5 5.5'/%3E%3Cpath d='M5.5 2H3.75C2.7835 2 2 2.7835 2 3.75V8.25C2 9.2165 2.7835 10 3.75 10H8.25C9.2165 10 10 9.2165 10 8.25V6.5'/%3E%3C/svg%3E\")";
237
+ const Wrapper = factory_styled("div", {
238
+ base: {
239
+ fontFamily: "$inter",
240
+ // Flags links that leave the page. Keyed off the rendered target rather than the built-in
241
+ // cross-origin rule, so it also covers call sites that set target="_blank" themselves.
242
+ // Kept out of the `styled` variant so the glyph is never left unpositioned on unstyled callers.
243
+ "& a[target='_blank']::after": {
244
+ // U+2060 WORD JOINER forbids a line break on either side of itself, keeping the glyph on the
245
+ // same line as the last word. Must stay a non-atomic inline: browsers offer a break
246
+ // opportunity beside an atomic inline whatever the surrounding characters ask for, so the
247
+ // 12px glyph and its 2px gap come from padding rather than a width.
248
+ content: '"\\2060"',
249
+ paddingInlineStart: "[14px]",
250
+ backgroundColor: "[currentColor]",
251
+ maskImage: EXTERNAL_LINK_ICON_URL,
252
+ maskRepeat: "no-repeat",
253
+ maskPosition: "[right center]",
254
+ maskSize: "[12px 12px]",
255
+ WebkitMaskImage: EXTERNAL_LINK_ICON_URL,
256
+ WebkitMaskRepeat: "no-repeat",
257
+ WebkitMaskPosition: "[right center]",
258
+ WebkitMaskSize: "[12px 12px]"
259
+ }
260
+ },
261
+ variants: {
262
+ styled: {
263
+ true: {
264
+ "& b, & strong": {
265
+ fontWeight: "$bold"
266
+ },
267
+ "& a": {
268
+ color: "[inherit]",
269
+ fontSize: "14px",
270
+ fontWeight: "[inherit]",
271
+ lineHeight: "22px",
272
+ textDecoration: "underline"
273
+ },
274
+ "& ol, & ul": {
275
+ paddingBlock: "$sm"
276
+ },
277
+ "& table": {
278
+ borderCollapse: "collapse",
279
+ width: "[100%]",
280
+ marginBlock: "$sm"
281
+ },
282
+ "& th, & td": {
283
+ borderWidth: "1px",
284
+ borderStyle: "solid",
285
+ borderColor: "$gray.border",
286
+ paddingBlock: "$xs",
287
+ paddingInline: "$sm",
288
+ textAlign: "left",
289
+ verticalAlign: "top"
290
+ },
291
+ "& th": {
292
+ fontWeight: "$bold"
293
+ }
294
+ }
295
+ },
296
+ paragraphSpacing: {
297
+ true: {
298
+ "& p + p": {
299
+ marginTop: "$sm"
300
+ }
301
+ },
302
+ false: {}
303
+ },
304
+ animated: {
305
+ true: {
306
+ "& [data-animated-element]": {
307
+ opacity: 0,
308
+ animation: "q-fadeIn ease-out forwards",
309
+ animationDuration: "var(--animation-duration)",
310
+ animationDelay: "var(--accumulated-delay)"
311
+ },
312
+ "& span[data-animated-word]": {
313
+ position: "relative",
314
+ display: "inline-block",
315
+ whiteSpace: "pre-wrap"
316
+ },
317
+ // The word joiner gluing on the external-link glyph is disregarded next to an atomic inline,
318
+ // so the word the glyph follows cannot be one. Matched at any depth because formatting is
319
+ // preserved through serialization, which nests that word inside e.g. a <strong>.
320
+ "& a[target='_blank'] span[data-animated-word]:last-child": {
321
+ display: "inline"
322
+ },
323
+ // Apply styles to spans inside links (inline-block breaks inheritance)
324
+ "& a span[data-animated-word]": {
325
+ color: "[inherit]",
326
+ fontSize: "14px",
327
+ fontWeight: "[inherit]",
328
+ lineHeight: "22px",
329
+ textDecoration: "underline"
330
+ },
331
+ "& b span[data-animated-word], & strong span[data-animated-word]": {
332
+ fontWeight: "$bold"
333
+ },
334
+ "& span[data-animated-word]::after": {
335
+ content: '""',
336
+ position: "absolute",
337
+ zIndex: 1,
338
+ top: "[0]",
339
+ right: "[0]",
340
+ bottom: "[0]",
341
+ left: "[0]",
342
+ backgroundColor: "$white",
343
+ animationName: "q-revealWord",
344
+ animationDuration: "var(--animation-duration)",
345
+ animationTimingFunction: "ease-out",
346
+ animationFillMode: "forwards",
347
+ animationDelay: "var(--accumulated-delay)",
348
+ transformOrigin: "right",
349
+ transform: "scaleX(1)"
350
+ }
351
+ },
352
+ false: {}
353
+ }
354
+ }
355
+ });
356
+
357
+ var RichText_ELEMENT_ANIMATION_DURATION_MAP = /* unused export */ undefined;
358
+ export { RichText, RichText_ELEMENT_ANIMATION_DURATION_MAP as ELEMENT_ANIMATION_DURATION_MAP, WORD_ANIMATION_DURATION_PER_CHARACTER };
@@ -0,0 +1,17 @@
1
+ import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
2
+ import { VisuallyHidden } from "./VisuallyHidden.js";
3
+
4
+ /** @jsxImportSource preact */
5
+
6
+ const ScreenReaderHeading = (param)=>{
7
+ let { level, children } = param;
8
+ return /*#__PURE__*/ jsxRuntime_module_u(VisuallyHidden, {
9
+ children: /*#__PURE__*/ jsxRuntime_module_u("span", {
10
+ role: "heading",
11
+ "aria-level": level,
12
+ children: children
13
+ })
14
+ });
15
+ };
16
+
17
+ export { ScreenReaderHeading };
@@ -0,0 +1,190 @@
1
+ import { jsxRuntime_module_u, hooks_module_y, hooks_module_A } from "../../../../js/multimodal_v2.js";
2
+ import "../../styled-system/jsx/index.js";
3
+ import { getCache } from "../../utils/multimodal_cache.js";
4
+ import { styled } from "../../styled-system/jsx/factory.js";
5
+
6
+ function _extends() {
7
+ _extends = Object.assign || function(target) {
8
+ for(var i = 1; i < arguments.length; i++){
9
+ var source = arguments[i];
10
+ for(var key in source){
11
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
12
+ target[key] = source[key];
13
+ }
14
+ }
15
+ }
16
+ return target;
17
+ };
18
+ return _extends.apply(this, arguments);
19
+ }
20
+ function _object_without_properties_loose(source, excluded) {
21
+ if (source == null) return {};
22
+ var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
23
+ for(i = 0; i < sourceKeys.length; i++){
24
+ key = sourceKeys[i];
25
+ if (excluded.indexOf(key) >= 0) continue;
26
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
27
+ target[key] = source[key];
28
+ }
29
+ return target;
30
+ }
31
+
32
+
33
+
34
+
35
+ const Thumbnail = (props)=>{
36
+ const { videoUrl, timestamp } = props, attributes = _object_without_properties_loose(props, [
37
+ "videoUrl",
38
+ "timestamp"
39
+ ]);
40
+ const canvasRef = useThumbnail({
41
+ videoUrl,
42
+ timestamp
43
+ });
44
+ return /*#__PURE__*/ jsxRuntime_module_u(ThumbnailCanvas, _extends({
45
+ ref: canvasRef,
46
+ role: "img"
47
+ }, attributes));
48
+ };
49
+ const VIDEO_CACHE_KEY = "components.helpers.useThumbnail.videos";
50
+ function useThumbnail(param) {
51
+ let { videoUrl, timestamp } = param;
52
+ // Video elements are cached by url so repeated thumbnails of the same video
53
+ // reuse a single loaded element instead of re-downloading it each time. The
54
+ // captured frame itself is not cached — re-seeking a buffered video and
55
+ // grabbing a fresh bitmap is cheap, and avoids holding decoded pixels around.
56
+ const videoCache = getCache(VIDEO_CACHE_KEY, ()=>new Map());
57
+ const canvasRef = hooks_module_A(null);
58
+ hooks_module_y(()=>{
59
+ let cancelled = false;
60
+ const render = async ()=>{
61
+ try {
62
+ const bitmap = await captureFrame(videoCache, videoUrl, timestamp);
63
+ if (!cancelled && canvasRef.current) {
64
+ paintBitmap(canvasRef.current, bitmap);
65
+ }
66
+ // Pixels are copied onto the canvas, so release the bitmap promptly.
67
+ bitmap.close();
68
+ } catch (unused) {
69
+ // Capture failed; nothing to paint.
70
+ }
71
+ };
72
+ void render();
73
+ return ()=>{
74
+ cancelled = true;
75
+ };
76
+ }, [
77
+ videoUrl,
78
+ timestamp,
79
+ videoCache
80
+ ]);
81
+ return canvasRef;
82
+ }
83
+ /**
84
+ * Captures a single frame at `timestamp` by seeking the cached video element
85
+ * and snapshotting it into an ImageBitmap. Seeks are serialized per video so
86
+ * concurrent captures of different timestamps don't clobber each other.
87
+ *
88
+ * Requires the video host to send CORS headers; otherwise the frame is tainted
89
+ * and drawing it to a canvas throws a SecurityError.
90
+ */ function captureFrame(videoCache, videoUrl, timestamp) {
91
+ const entry = getCachedVideo(videoCache, videoUrl);
92
+ const previous = entry.queue;
93
+ const capture = async ()=>{
94
+ // Wait for any in-flight capture so seeks stay serialized on the element.
95
+ await previous.catch(()=>undefined);
96
+ const video = await entry.ready;
97
+ await seekTo(video, timestamp);
98
+ // Snapshot the current frame; the bitmap is decoded pixels (no encoding).
99
+ return createImageBitmap(video);
100
+ };
101
+ // Claim the queue synchronously so the next capture waits for this one.
102
+ const result = capture();
103
+ entry.queue = result.catch(()=>undefined);
104
+ return result;
105
+ }
106
+ function getCachedVideo(videoCache, videoUrl) {
107
+ const existing = videoCache.get(videoUrl);
108
+ if (existing) return existing;
109
+ const load = async ()=>{
110
+ try {
111
+ return await loadVideo(videoUrl);
112
+ } catch (err) {
113
+ // Evict on failure so a later mount can retry loading the video.
114
+ videoCache.delete(videoUrl);
115
+ throw err;
116
+ }
117
+ };
118
+ const ready = load();
119
+ const entry = {
120
+ ready,
121
+ queue: ready
122
+ };
123
+ videoCache.set(videoUrl, entry);
124
+ return entry;
125
+ }
126
+ function loadVideo(videoUrl) {
127
+ return new Promise((resolve, reject)=>{
128
+ const video = document.createElement("video");
129
+ video.crossOrigin = "anonymous";
130
+ video.muted = true;
131
+ video.preload = "metadata";
132
+ video.addEventListener("loadedmetadata", ()=>resolve(video), {
133
+ once: true
134
+ });
135
+ video.addEventListener("error", ()=>{
136
+ var _video_error;
137
+ return reject((_video_error = video.error) != null ? _video_error : new Error("Failed to load video: " + videoUrl));
138
+ }, {
139
+ once: true
140
+ });
141
+ video.src = videoUrl;
142
+ });
143
+ }
144
+ function seekTo(video, timestamp) {
145
+ return new Promise((resolve, reject)=>{
146
+ // Clamp the requested time so we never seek past the final frame.
147
+ const target = Math.min(timestamp, Math.max(video.duration - 0.001, 0));
148
+ // Already positioned at the target frame (no "seeked" event would fire).
149
+ if (video.readyState >= video.HAVE_CURRENT_DATA && video.currentTime === target) {
150
+ resolve();
151
+ return;
152
+ }
153
+ const onSeeked = ()=>{
154
+ video.removeEventListener("error", onError);
155
+ resolve();
156
+ };
157
+ const onError = ()=>{
158
+ var _video_error;
159
+ video.removeEventListener("seeked", onSeeked);
160
+ reject((_video_error = video.error) != null ? _video_error : new Error("Failed to seek video"));
161
+ };
162
+ video.addEventListener("seeked", onSeeked, {
163
+ once: true
164
+ });
165
+ video.addEventListener("error", onError, {
166
+ once: true
167
+ });
168
+ video.currentTime = target;
169
+ });
170
+ }
171
+ /**
172
+ * Draws a cached frame onto the canvas. `drawImage` copies the pixels, so the
173
+ * bitmap stays intact and can be reused by other mounted thumbnails.
174
+ */ function paintBitmap(canvas, bitmap) {
175
+ canvas.width = bitmap.width;
176
+ canvas.height = bitmap.height;
177
+ const ctx = canvas.getContext("2d");
178
+ if (!ctx) return;
179
+ ctx.drawImage(bitmap, 0, 0);
180
+ }
181
+ const ThumbnailCanvas = styled("canvas", {
182
+ base: {
183
+ width: "[100%]",
184
+ height: "[100%]",
185
+ objectFit: "cover"
186
+ }
187
+ });
188
+ ThumbnailCanvas.displayName = "ThumbnailCanvas";
189
+
190
+ export { Thumbnail };
@@ -0,0 +1,41 @@
1
+ import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
2
+ import "../../styled-system/jsx/index.js";
3
+ import { styled } from "../../styled-system/jsx/factory.js";
4
+
5
+ /** @jsxImportSource preact */
6
+
7
+ const properties = {
8
+ position: "absolute",
9
+ width: "1px",
10
+ height: "1px",
11
+ padding: "0",
12
+ margin: "-1px",
13
+ overflow: "hidden",
14
+ clip: "rect(0,0,0,0)",
15
+ border: "0"
16
+ };
17
+ const VISUALLY_HIDDEN_STYLE = Object.entries(properties).map((param)=>{
18
+ let [k, v] = param;
19
+ return k.replace(/[A-Z]/g, (m)=>"-" + m.toLowerCase()) + ":" + v;
20
+ }).join(";");
21
+ const VisuallyHidden = (param)=>{
22
+ let { children } = param;
23
+ return /*#__PURE__*/ jsxRuntime_module_u(Hidden, {
24
+ children: children
25
+ });
26
+ };
27
+ const Hidden = styled("span", {
28
+ base: {
29
+ position: properties.position,
30
+ width: "[" + properties.width + "]",
31
+ height: "[" + properties.height + "]",
32
+ padding: "[" + properties.padding + "]",
33
+ margin: "[" + properties.margin + "]",
34
+ overflow: properties.overflow,
35
+ clip: "[" + properties.clip + "]",
36
+ border: "[" + properties.border + "]"
37
+ }
38
+ });
39
+ Hidden.displayName = "VisuallyHidden";
40
+
41
+ export { VISUALLY_HIDDEN_STYLE, VisuallyHidden };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Builders for custEv_contentClick, custEv_chatView, and custEv_contentImpression
3
+ * GTM events (Piper web tracking).
4
+ */ /** Payload for custEv_chatView when user interacts with the initial Chat Invitation UI. */ function buildCustEvChatViewPayload(conversationId, formJoinIDUnique) {
5
+ if (formJoinIDUnique === void 0) formJoinIDUnique = "";
6
+ return {
7
+ event: "custEv_chatView",
8
+ chatExperience: "qualified",
9
+ nameCaptureCampaignId: "",
10
+ formJoinIDUnique,
11
+ conversationId
12
+ };
13
+ }
14
+ /** Payload for custEv_contentImpression when rich content or links become visible in the viewport. */ function buildCustEvContentImpressionPayload(modules) {
15
+ return {
16
+ event: "custEv_contentImpression",
17
+ blade: {
18
+ id: "",
19
+ name: "qualified/customerstory",
20
+ position: "",
21
+ source: "qualified",
22
+ modules: modules.map((m)=>({
23
+ id: "",
24
+ name: m.name,
25
+ type: "",
26
+ url: m.url
27
+ }))
28
+ }
29
+ };
30
+ }
31
+ /** Payload for custEv_contentClick when a link in the widget is clicked (e.g. in a message body). */ function buildCustEvContentClickPayloadForLink(url, moduleName, clickedLinkText, conversationId) {
32
+ if (conversationId === void 0) conversationId = "";
33
+ return {
34
+ event: "custEv_contentClick",
35
+ blade: {
36
+ id: "",
37
+ conversationId,
38
+ name: "qualified/link",
39
+ position: "",
40
+ source: "qualified",
41
+ variant: "",
42
+ module: {
43
+ id: "",
44
+ name: moduleName,
45
+ type: "link",
46
+ position: "",
47
+ link: {
48
+ url,
49
+ text: clickedLinkText,
50
+ internalDriver: "qualified",
51
+ elementType: ""
52
+ }
53
+ }
54
+ }
55
+ };
56
+ }
57
+
58
+ export { buildCustEvChatViewPayload, buildCustEvContentClickPayloadForLink, buildCustEvContentImpressionPayload };