@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,237 @@
1
+ import { VISUALLY_HIDDEN_STYLE } from "../components/helpers/VisuallyHidden.js";
2
+
3
+
4
+ const ANCHOR_SELECTOR = "[data-q-widget-anchor]";
5
+ /**
6
+ * Manages keyboard focus relay between the host page and a shadow-root widget.
7
+ *
8
+ * Four sentinels mark the widget boundary. The entry and exit gates live inside
9
+ * a single `q-focus-sentinel` wrapper (display:contents) in the page DOM. Guards
10
+ * are appended to the host's light DOM with slot attributes and slotted into the
11
+ * shadow root via AppLayout.
12
+ *
13
+ * [page] … sentinel[entry … exit] … [host] startGuard … content … endGuard [/host] … [page]
14
+ *
15
+ * Gates and guards only talk to each other. Natural browser tab order handles
16
+ * all movement within the widget.
17
+ *
18
+ * Relay mode (default):
19
+ * - Tab into entry → focus startGuard → Tab → first content (natural)
20
+ * - Tab past endGuard → focus exit → Tab → next page element (natural)
21
+ * - Shift+Tab to exit → focus endGuard → Shift+Tab → last content (natural)
22
+ * - Shift+Tab to startGuard → focus entry → Shift+Tab → prev page element (natural)
23
+ *
24
+ * Dialog mode (isDialogActive = true):
25
+ * - Tab past endGuard → focus startGuard → Tab → first content (wrap)
26
+ * - Shift+Tab to startGuard → focus endGuard → Shift+Tab → last content (wrap)
27
+ * - body.inert = true so page is unreachable
28
+ */ class FocusGate {
29
+ init(param) {
30
+ let { host, selector, position, isDialogActive, labels } = param;
31
+ registerSentinel();
32
+ this.host = host;
33
+ this.selector = selector;
34
+ this.position = position != null ? position : "after";
35
+ this.sentinel = this.createSentinel(labels);
36
+ this.startGuard = this.createHiddenFocusable(labels.startGuard.value, "start-guard");
37
+ this.endGuard = this.createHiddenFocusable(labels.endGuard.value, "end-guard");
38
+ this.sentinel.onGateDisconnected = this.insertSentinel;
39
+ this.insertSentinel();
40
+ this.host.appendChild(this.startGuard);
41
+ this.host.appendChild(this.endGuard);
42
+ this.sentinel.entry.addEventListener("focusin", this.onEntryGateFocus);
43
+ this.sentinel.exit.addEventListener("focusin", this.onExitGateFocus);
44
+ this.startGuard.addEventListener("focusin", this.onStartGuardFocus);
45
+ this.endGuard.addEventListener("focusin", this.onEndGuardFocus);
46
+ const disposeDialog = isDialogActive.subscribe((active)=>this.setDialogActive(active));
47
+ const disposeLabels = [
48
+ [
49
+ labels.entryGate,
50
+ this.sentinel.entry
51
+ ],
52
+ [
53
+ labels.exitGate,
54
+ this.sentinel.exit
55
+ ],
56
+ [
57
+ labels.startGuard,
58
+ this.startGuard
59
+ ],
60
+ [
61
+ labels.endGuard,
62
+ this.endGuard
63
+ ]
64
+ ].map((param)=>{
65
+ let [sig, el] = param;
66
+ return sig.subscribe((l)=>el.setAttribute("aria-label", l));
67
+ });
68
+ this.disposeEffect = ()=>{
69
+ disposeDialog();
70
+ disposeLabels.forEach((d)=>d());
71
+ };
72
+ }
73
+ dispose() {
74
+ var _this_sentinel, _this_sentinel1, _this_startGuard, _this_endGuard, _this_sentinel2, _this_startGuard1, _this_endGuard1;
75
+ this.disposeEffect == null ? void 0 : this.disposeEffect.call(this);
76
+ this.disposeEffect = null;
77
+ if (this.sentinel) this.sentinel.onGateDisconnected = undefined;
78
+ (_this_sentinel = this.sentinel) == null ? void 0 : _this_sentinel.entry.removeEventListener("focusin", this.onEntryGateFocus);
79
+ (_this_sentinel1 = this.sentinel) == null ? void 0 : _this_sentinel1.exit.removeEventListener("focusin", this.onExitGateFocus);
80
+ (_this_startGuard = this.startGuard) == null ? void 0 : _this_startGuard.removeEventListener("focusin", this.onStartGuardFocus);
81
+ (_this_endGuard = this.endGuard) == null ? void 0 : _this_endGuard.removeEventListener("focusin", this.onEndGuardFocus);
82
+ (_this_sentinel2 = this.sentinel) == null ? void 0 : _this_sentinel2.remove();
83
+ (_this_startGuard1 = this.startGuard) == null ? void 0 : _this_startGuard1.remove();
84
+ (_this_endGuard1 = this.endGuard) == null ? void 0 : _this_endGuard1.remove();
85
+ // Only restore inert if we set it (i.e., dialog was still active at dispose time).
86
+ if (this.dialogActive) document.body.inert = this.priorBodyInert;
87
+ if (this.host) this.host.tabIndex = -1;
88
+ this.host = null;
89
+ this.sentinel = null;
90
+ this.startGuard = null;
91
+ this.endGuard = null;
92
+ this.focusOrigin = null;
93
+ }
94
+ createSentinel(labels) {
95
+ const el = document.createElement("q-focus-sentinel");
96
+ // display:contents makes the wrapper box-less — entry and exit participate
97
+ // in page tab order as if they were direct children of the parent.
98
+ el.style.cssText = "display:contents;";
99
+ el.entry = this.createHiddenFocusable(labels.entryGate.value);
100
+ el.exit = this.createHiddenFocusable(labels.exitGate.value);
101
+ el.appendChild(el.entry);
102
+ el.appendChild(el.exit);
103
+ return el;
104
+ }
105
+ createHiddenFocusable(label, slotName) {
106
+ const el = document.createElement("div");
107
+ el.tabIndex = 0;
108
+ // A bare <div> has the implicit role "generic", and aria-label is prohibited
109
+ // on generic-role elements. role="note" gives the sentinel a non-generic role
110
+ // so the aria-label is exposed to assistive technologies as intended.
111
+ el.setAttribute("role", "note");
112
+ el.setAttribute("aria-label", label);
113
+ el.style.cssText = VISUALLY_HIDDEN_STYLE;
114
+ if (slotName) el.setAttribute("slot", slotName);
115
+ return el;
116
+ }
117
+ setDialogActive(active) {
118
+ this.dialogActive = active;
119
+ if (active) {
120
+ var _this_host;
121
+ // Capture the trigger element BEFORE setting body.inert — real browsers defocus the
122
+ // active element synchronously when inert is applied, so we must read it first.
123
+ this.focusOrigin = document.activeElement;
124
+ this.priorBodyInert = document.body.inert;
125
+ document.body.inert = true;
126
+ if (this.host) this.host.tabIndex = 0;
127
+ (_this_host = this.host) == null ? void 0 : _this_host.focus();
128
+ } else {
129
+ document.body.inert = this.priorBodyInert;
130
+ if (this.host) this.host.tabIndex = -1;
131
+ if (this.focusOrigin instanceof HTMLElement) {
132
+ this.focusOrigin.focus();
133
+ this.focusOrigin = null;
134
+ }
135
+ }
136
+ }
137
+ constructor(){
138
+ this.host = null;
139
+ this.sentinel = null;
140
+ this.startGuard = null;
141
+ this.endGuard = null;
142
+ this.disposeEffect = null;
143
+ this.selector = undefined;
144
+ this.position = "after";
145
+ this.dialogActive = false;
146
+ this.focusOrigin = null;
147
+ this.priorBodyInert = false;
148
+ this.insertSentinel = ()=>{
149
+ if (!this.sentinel || this.sentinel.isConnected) return;
150
+ const dataAnchor = document.querySelector(ANCHOR_SELECTOR);
151
+ if (dataAnchor) {
152
+ const attrValue = dataAnchor.getAttribute("data-q-widget-anchor");
153
+ const placement = attrValue === "before" ? "beforebegin" : "afterend";
154
+ dataAnchor.insertAdjacentElement(placement, this.sentinel);
155
+ return;
156
+ }
157
+ const selectorAnchor = this.selector ? document.querySelector(this.selector) : null;
158
+ if (selectorAnchor) {
159
+ const placement = this.position === "before" ? "beforebegin" : "afterend";
160
+ selectorAnchor.insertAdjacentElement(placement, this.sentinel);
161
+ return;
162
+ }
163
+ document.body.appendChild(this.sentinel);
164
+ };
165
+ this.onEntryGateFocus = (e)=>{
166
+ var _this_startGuard;
167
+ // Skip when start guard relayed back here (prevents loop).
168
+ const from = e.relatedTarget;
169
+ if (from === this.startGuard) return;
170
+ (_this_startGuard = this.startGuard) == null ? void 0 : _this_startGuard.focus();
171
+ };
172
+ this.onExitGateFocus = (e)=>{
173
+ var _this_endGuard;
174
+ // Skip when end guard relayed back here (prevents loop).
175
+ const from = e.relatedTarget;
176
+ if (from === this.endGuard) return;
177
+ (_this_endGuard = this.endGuard) == null ? void 0 : _this_endGuard.focus();
178
+ };
179
+ this.onStartGuardFocus = (e)=>{
180
+ var _this_sentinel;
181
+ const from = e.relatedTarget;
182
+ // entry tabbed forward into us — do nothing, let Tab move to first content naturally.
183
+ if (from === ((_this_sentinel = this.sentinel) == null ? void 0 : _this_sentinel.entry)) return;
184
+ if (this.dialogActive) {
185
+ var _this_endGuard;
186
+ // Shift+Tab from first content — wrap to end guard.
187
+ // Skip if endGuard just focused us (loop prevention).
188
+ if (from === this.endGuard) return;
189
+ (_this_endGuard = this.endGuard) == null ? void 0 : _this_endGuard.focus();
190
+ } else {
191
+ var _this_sentinel1;
192
+ (_this_sentinel1 = this.sentinel) == null ? void 0 : _this_sentinel1.entry.focus();
193
+ }
194
+ };
195
+ this.onEndGuardFocus = (e)=>{
196
+ var _this_sentinel;
197
+ const from = e.relatedTarget;
198
+ // exit shift-tabbed backward into us — do nothing, let Shift+Tab move to last content naturally.
199
+ if (from === ((_this_sentinel = this.sentinel) == null ? void 0 : _this_sentinel.exit)) return;
200
+ if (this.dialogActive) {
201
+ var _this_startGuard;
202
+ // Tab from last content — wrap to start guard.
203
+ // Skip if startGuard just focused us (loop prevention).
204
+ if (from === this.startGuard) return;
205
+ (_this_startGuard = this.startGuard) == null ? void 0 : _this_startGuard.focus();
206
+ } else {
207
+ var _this_sentinel1;
208
+ (_this_sentinel1 = this.sentinel) == null ? void 0 : _this_sentinel1.exit.focus();
209
+ }
210
+ };
211
+ }
212
+ }
213
+ /**
214
+ * Wrapper sentinel placed in the page DOM to house the entry and exit gates.
215
+ * Using display:contents makes the wrapper itself box-less, so `entry` and `exit`
216
+ * participate in tab order as if they were direct siblings of the sentinel's parent.
217
+ *
218
+ * Exposes `entry` and `exit` as public properties so callers can attach event
219
+ * listeners and aria-labels without querying the DOM.
220
+ *
221
+ * Uses disconnectedCallback + queueMicrotask to notify FocusGate when it is removed
222
+ * so it can be reinserted. queueMicrotask defers the check so that a move
223
+ * (remove + re-add in the same task) doesn't trigger a spurious reinsertion.
224
+ */ class FocusGateSentinel extends HTMLElement {
225
+ disconnectedCallback() {
226
+ queueMicrotask(()=>{
227
+ if (!this.isConnected) this.onGateDisconnected == null ? void 0 : this.onGateDisconnected.call(this);
228
+ });
229
+ }
230
+ }
231
+ function registerSentinel() {
232
+ if (!customElements.get("q-focus-sentinel")) {
233
+ customElements.define("q-focus-sentinel", FocusGateSentinel);
234
+ }
235
+ }
236
+
237
+ export { FocusGate };
@@ -0,0 +1,16 @@
1
+ import "../stores/translation_store.js";
2
+
3
+
4
+ /**
5
+ * Convert our locale codes (e.g., "en_GB", "zh_CN") to Intl-compatible BCP 47 language
6
+ * tags (e.g., "en-GB", "zh-CN").
7
+ *
8
+ * Our locale identifiers use underscores (they mirror the locale filenames), which the
9
+ * Intl constructors reject with `RangeError: Invalid language tag`. Anything handed to
10
+ * `Intl.*` or a `toLocale*String` call must go through this first.
11
+ */ function toIntlLocale(locale) {
12
+ if (!locale) return (/* inlined export .DEFAULT_LOCALE */"en");
13
+ return locale.replace(/_/g, "-");
14
+ }
15
+
16
+ export { toIntlLocale };
@@ -0,0 +1,30 @@
1
+ import { signals_core_module_d } from "../../../js/multimodal_v2.js";
2
+ import { originalOf } from "../../../src/proxy.js";
3
+
4
+
5
+
6
+ // Make sure it's synced with panda.config.ts!!!
7
+ const queries = {
8
+ mobile: "(max-width: 767px)",
9
+ touchDevice: "(pointer: coarse)",
10
+ narrowLandscape: "(max-height: 500px) and (orientation: landscape) and (pointer: coarse)"
11
+ };
12
+ const isMobile = createMediaQuerySignal(queries.mobile);
13
+ const isTouchDevice = createMediaQuerySignal(queries.touchDevice);
14
+ const isLandscapeNarrow = createMediaQuerySignal(queries.narrowLandscape);
15
+ function createMediaQuerySignal(query) {
16
+ // Docking points `window.matchMedia` at the shrunk content area, but the
17
+ // widget lives outside it (in the docked panel), so it needs the real
18
+ // viewport — read through the pre-patch view. `matchMedia` is unbound there,
19
+ // hence the explicit receiver.
20
+ const { matchMedia } = originalOf(window);
21
+ const mql = matchMedia.call(window, query);
22
+ const matches = signals_core_module_d(mql.matches);
23
+ const handler = (e)=>{
24
+ matches.value = e.matches;
25
+ };
26
+ mql.addEventListener("change", handler);
27
+ return matches;
28
+ }
29
+
30
+ export { isLandscapeNarrow, isMobile, isTouchDevice };
@@ -0,0 +1,19 @@
1
+ class MultimodalCache {
2
+ static get(key, factory) {
3
+ let value = this.cache.get(key);
4
+ if (!value) {
5
+ value = factory();
6
+ this.cache.set(key, value);
7
+ }
8
+ return value;
9
+ }
10
+ static clear() {
11
+ this.cache.clear();
12
+ }
13
+ }
14
+ MultimodalCache.cache = new Map();
15
+ function getCache(key, factory) {
16
+ return MultimodalCache.get(key, factory);
17
+ }
18
+
19
+ export { MultimodalCache, getCache };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Runs `callback` once on setup and then every time a matching mutation fires on
3
+ * `target`. Think of it as an `effect()` keyed off DOM mutations instead of
4
+ * signals — handy for reacting to attributes the widget doesn't own (e.g. flags
5
+ * another script stamps on `<html>`). Returns a disposer that disconnects the
6
+ * observer; wire it into your teardown (e.g. push onto `uiDisposers`).
7
+ */ function mutationEffect(callback, target, options) {
8
+ const observer = new MutationObserver((mutations)=>callback(mutations));
9
+ observer.observe(target, options);
10
+ callback([]);
11
+ return ()=>observer.disconnect();
12
+ }
13
+
14
+ export { mutationEffect };
@@ -0,0 +1,205 @@
1
+ import { __webpack_require__ } from "../../../js/runtime.js";
2
+ import "../../utils/native_globals.js";
3
+
4
+ /* provided dependency */ var __nativeDocumentAddEventListener = __webpack_require__(68034).Qj;
5
+ /* provided dependency */ var __nativeWindowAddEventListener = __webpack_require__(68034).zh;
6
+ /* provided dependency */ var __nativeDocumentRemoveEventListener = __webpack_require__(68034).LA;
7
+ /* provided dependency */ var __nativeWindowRemoveEventListener = __webpack_require__(68034).kZ;
8
+ function _extends() {
9
+ _extends = Object.assign || function(target) {
10
+ for(var i = 1; i < arguments.length; i++){
11
+ var source = arguments[i];
12
+ for(var key in source){
13
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
14
+ target[key] = source[key];
15
+ }
16
+ }
17
+ }
18
+ return target;
19
+ };
20
+ return _extends.apply(this, arguments);
21
+ }
22
+ /**
23
+ * NavigationInterceptor intercepts user-initiated link clicks and routes them
24
+ * through soft navigation instead of hard page reloads.
25
+ *
26
+ * Uses the Navigation API on Chromium browsers, falls back to click capture
27
+ * on Firefox/Safari until they implement the Navigation API.
28
+ */ // Check if the Navigation API is available (Chromium browsers)
29
+ const hasNavigationApi = !!(window.navigation && typeof window.navigation.navigate === "function");
30
+ class NavigationInterceptor {
31
+ get initialized() {
32
+ return this._initialized;
33
+ }
34
+ /**
35
+ * Initialize navigation interception to handle user-initiated link clicks.
36
+ * Should be called when entering voice/video mode.
37
+ */ init() {
38
+ if (this._initialized) return;
39
+ if (hasNavigationApi) {
40
+ // Primary: Navigation API (Chromium)
41
+ window.navigation.addEventListener("navigate", this.onNavigate);
42
+ } else {
43
+ // Fallback to capturing same-origin <a> clicks + History API until:
44
+ // - Firefox: scheduled for 2025-10 https://bugzilla.mozilla.org/show_bug.cgi?id=1777171
45
+ // - Safari: expected 2025/2026 based on https://webkit.org/blog/16458/announcing-interop-2025/
46
+ __nativeDocumentAddEventListener("click", this.onDocumentClickCapture, {
47
+ capture: true
48
+ });
49
+ __nativeWindowAddEventListener("popstate", this.onPopState, {
50
+ passive: true
51
+ });
52
+ }
53
+ this._initialized = true;
54
+ }
55
+ /**
56
+ * Remove navigation intercepts and clean up event listeners.
57
+ * Should be called when leaving voice/video mode.
58
+ */ dispose() {
59
+ if (!this._initialized) return;
60
+ if (hasNavigationApi) {
61
+ window.navigation.removeEventListener("navigate", this.onNavigate);
62
+ } else {
63
+ __nativeDocumentRemoveEventListener("click", this.onDocumentClickCapture, {
64
+ capture: true
65
+ });
66
+ __nativeWindowRemoveEventListener("popstate", this.onPopState);
67
+ }
68
+ this._initialized = false;
69
+ }
70
+ /**
71
+ * Determines if a link element should be handled for soft navigation.
72
+ * Returns false for links that should open in new tabs, external links, or downloads.
73
+ */ shouldHandleForElement(element) {
74
+ const t = (element.getAttribute("target") || "").toLowerCase();
75
+ if (t && t !== "_self") return false;
76
+ if ((element.getAttribute("rel") || "").split(/\s+/).includes("external")) return false;
77
+ if (element.hasAttribute("download")) return false;
78
+ return true;
79
+ }
80
+ /**
81
+ * Determines if a Navigation API event should be intercepted for soft navigation.
82
+ */ shouldInterceptNavigateEvent(event) {
83
+ if (!event.canIntercept) return false; // e.g., cross-document traversals
84
+ const dest = new URL(event.destination.url);
85
+ if (dest.origin !== window.location.origin) return false; // Leave external links alone
86
+ if (event.hashChange) return false; // let the browser scroll to fragments
87
+ if (event.downloadRequest) return false; // let downloads proceed
88
+ if (event.formData) return false; // form submissions out of scope for now
89
+ // If the click had target=_blank or rel=external, let it through.
90
+ const src = event.sourceElement;
91
+ if (src && src instanceof HTMLAnchorElement) {
92
+ return this.shouldHandleForElement(src);
93
+ }
94
+ return true;
95
+ }
96
+ /**
97
+ * Creates a new NavigationInterceptor.
98
+ * @param navigateSoftly - Callback function to perform soft navigation
99
+ */ // eslint-disable-next-line no-useless-constructor
100
+ constructor(navigateSoftly){
101
+ this.navigateSoftly = navigateSoftly;
102
+ this._initialized = false;
103
+ this.isHandlingNavigate = false;
104
+ /**
105
+ * Handle click events on anchor elements (fallback for browsers without Navigation API).
106
+ * Arrow function to preserve `this` binding when used as event handler.
107
+ */ this.onDocumentClickCapture = (event)=>{
108
+ if (event.button !== 0) return; // left click only
109
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
110
+ // Find nearest <a href>
111
+ const a = event.target && (event.target instanceof Element ? event.target.closest("a[href]") : null);
112
+ if (!a) return;
113
+ // Respect <a> tag target/download/external attributes
114
+ if (!this.shouldHandleForElement(a)) return;
115
+ const url = new URL(a.href, window.location.href);
116
+ if (url.origin !== window.location.origin) return; // only same-origin
117
+ // Hash-only navigation -> let browser scroll
118
+ if (url.hash && url.pathname === window.location.pathname && url.search === window.location.search) {
119
+ return;
120
+ }
121
+ // Prevent the browser's default link behavior
122
+ event.preventDefault();
123
+ // Stop propagation to prevent other handlers from triggering hard navigations programmatically
124
+ event.stopPropagation();
125
+ event.stopImmediatePropagation();
126
+ // Persist scroll position into current history entry
127
+ const cur = window.history.state || {};
128
+ const withScroll = _extends({}, cur, {
129
+ scroll: {
130
+ x: window.scrollX,
131
+ y: window.scrollY
132
+ }
133
+ });
134
+ window.history.replaceState(withScroll, "", window.location.href);
135
+ // Perform soft navigation
136
+ this.navigateSoftly(url.href, {
137
+ history: "push",
138
+ scroll: "top"
139
+ }).catch(()=>{});
140
+ };
141
+ /**
142
+ * Handle popstate events for back/forward navigation (fallback mode).
143
+ * Arrow function to preserve `this` binding when used as event handler.
144
+ */ this.onPopState = async ()=>{
145
+ var _window_history_state;
146
+ const restore = (_window_history_state = window.history.state) == null ? void 0 : _window_history_state.scroll;
147
+ await this.navigateSoftly(window.location.href, {
148
+ history: "none",
149
+ scroll: "manual"
150
+ });
151
+ if (restore) {
152
+ window.scrollTo(restore.x || 0, restore.y || 0);
153
+ }
154
+ };
155
+ /**
156
+ * Handle Navigation API events (Chromium browsers).
157
+ * Arrow function to preserve `this` binding when used as event handler.
158
+ */ this.onNavigate = (event)=>{
159
+ if (!this.shouldInterceptNavigateEvent(event)) return;
160
+ const navType = event.navigationType;
161
+ // Handle back/forward navigation
162
+ if (navType === "traverse") {
163
+ event.intercept({
164
+ handler: async ()=>{
165
+ await this.navigateSoftly(event.destination.url, {
166
+ history: "none",
167
+ scroll: "manual"
168
+ });
169
+ }
170
+ });
171
+ return;
172
+ }
173
+ // Intercept new navigations (link clicks, programmatic navigation)
174
+ if (navType === "push" && !this.isHandlingNavigate) {
175
+ event.intercept({
176
+ handler: async ()=>{
177
+ this.isHandlingNavigate = true;
178
+ try {
179
+ var _navigation_currentEntry;
180
+ // Update current entry's state with scroll position via Navigation API
181
+ const { navigation } = window;
182
+ const existingState = (_navigation_currentEntry = navigation.currentEntry) == null ? void 0 : _navigation_currentEntry.getState();
183
+ navigation.updateCurrentEntry({
184
+ state: _extends({}, existingState, {
185
+ scroll: {
186
+ x: window.scrollX,
187
+ y: window.scrollY
188
+ }
189
+ })
190
+ });
191
+ await this.navigateSoftly(event.destination.url, {
192
+ history: "none",
193
+ scroll: "top"
194
+ });
195
+ } finally{
196
+ this.isHandlingNavigate = false;
197
+ }
198
+ }
199
+ });
200
+ }
201
+ };
202
+ }
203
+ }
204
+
205
+ export { NavigationInterceptor };