@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,164 @@
1
+ import { __webpack_require__ } from "../../../../js/runtime.js";
2
+ import "../../../../widget/utils/native_globals.js";
3
+
4
+ /* provided dependency */ var requestAnimationFrame = __webpack_require__(68034).gj;
5
+ /* eslint-disable rulesdir/css-units */ // ============================================================================
6
+ // Concern Interface
7
+ // ============================================================================
8
+ /**
9
+ * Common interface every docking concern (viewport_resize, viewport_lock, ...)
10
+ * implements. The orchestrator drives concerns uniformly through these three
11
+ * methods, so adding a new concern only requires implementing the same shape.
12
+ *
13
+ * Concerns must be self-contained: their CSS must not reference variables
14
+ * defined by another concern, and their JS must not import another concern's
15
+ * exports. This way each can be enabled / disabled / unit-tested in isolation.
16
+ *
17
+ * - `init` runs exactly once during {@link DockingAPI.init}. Use it for one-
18
+ * shot setup like installing prototype proxies, registering CSS custom
19
+ * properties, or measuring the host page.
20
+ * - `reEvaluate` runs at the end of `init` and on every subsequent
21
+ * {@link DockingAPI.reEvaluate} call. Must be idempotent — typical work is
22
+ * rescanning newly added DOM and re-stamping marker attributes.
23
+ * - `getStyles` returns the concern-specific CSS that the orchestrator
24
+ * concatenates into the base stylesheet. Called from the first
25
+ * `reEvaluate`, so any values measured in `init` (e.g. scrollbar width)
26
+ * are already available.
27
+ */ // ============================================================================
28
+ // Shared Constants
29
+ // ============================================================================
30
+ /**
31
+ * Attribute set on `<html>` to signal docked mode. Owned by the orchestrator
32
+ * (which adds/removes it) and read by viewport_resize's CSS to switch the
33
+ * docked-width variable between 0 and the panel width.
34
+ */ const DOCKED_DOCUMENT_ATTRIBUTE = "q-docked";
35
+ // Value of the `q-docked` attribute, describing which docking layout is active.
36
+ // `regular` is the default right-side dock; `under-header` parks the panel flush
37
+ // below a full-width host header (hairline left border instead of a drop shadow).
38
+ // The (shadow-DOM) widget can't select the host page's `<html>` across the shadow
39
+ // boundary, so multimodal mirrors this value onto its own host for `:host()` CSS.
40
+ const DOCKED_MODE = {
41
+ regular: "regular",
42
+ underHeader: "under-header"
43
+ };
44
+ // Stamped on the element(s) that shrink to make room for the docked panel:
45
+ // `<html>` in default docking, the host's `<main>`/`<footer>` under-header.
46
+ const DOCKED_TARGET_ATTRIBUTE = "q-docked-target";
47
+ // Breakpoint at/below which docking collapses to full width. 767px keeps 768px
48
+ // (iPad mini portrait) on desktop while treating phones as mobile.
49
+ const MOBILE_BREAKPOINT = "max-width: 767px";
50
+ // Top offset (px) the docked widget starts below in `dockUnderHeader` mode,
51
+ // tracking the sticky header's bottom edge. Defaults to `0px` when consumed.
52
+ const DOCKED_TOP_OFFSET_CSS_VARIABLE = "--q-docked-top-offset";
53
+ /**
54
+ * Custom property holding the inline-size of the visible content area
55
+ * (`100dvw - docked offset`). Declared by viewport_resize's stylesheet, which
56
+ * also uses it as the target for `vw → calc(... * var(--qdvw))` rewrites; it
57
+ * lives here because the `<q-docking>` host sizes its probe iframe from it.
58
+ */ const DOCKED_VIEWPORT_WIDTH_CSS_VARIABLE = "--qdvw";
59
+ /**
60
+ * Prefix for `applyOnce` markers stamped on DOM nodes / prototypes by the
61
+ * various proxy installers. Each installer adds a `_<name>` suffix so the
62
+ * markers are globally unique even when the proxies live in different files.
63
+ */ const DOCKING_PROXY_MARKER = "__q_docking_proxy";
64
+ /**
65
+ * Tag name of the singleton custom element hosting every docking-owned DOM node.
66
+ * The element is in `docking_host.ts`; the name stays here because importing it
67
+ * back for `isQualifiedOwnedShadowRoot` would be circular.
68
+ */ const Q_DOCKING_TAG_NAME = "q-docking";
69
+ /**
70
+ * Shadow roots owned by Qualified (widget root or `<q-docking>` host).
71
+ * The transformer must not walk these — their stylesheets are either
72
+ * ours to manage directly or in-flight CORS clones.
73
+ */ function isQualifiedOwnedShadowRoot(root) {
74
+ if (!(root instanceof ShadowRoot)) return false;
75
+ if (root.host.id === "qualified-multimodal-host") return true;
76
+ if (root.host.tagName === Q_DOCKING_TAG_NAME.toUpperCase()) return true;
77
+ return false;
78
+ }
79
+ // ============================================================================
80
+ // Shared DOM Helpers
81
+ // ============================================================================
82
+ /**
83
+ * Measures the host page's vertical scrollbar width using a hidden element
84
+ * with `overflow:scroll`. Returns 0 in browsers/environments that don't
85
+ * paint a scrollbar (overlay scrollbars, jsdom). Each concern that needs
86
+ * the value calls this in its own `init` so concerns stay independent.
87
+ */ function measureScrollbarWidth() {
88
+ const d = document.createElement("div");
89
+ d.style.cssText = "overflow:scroll;visibility:hidden;position:absolute;width:99px";
90
+ document.documentElement.append(d);
91
+ const w = d.offsetWidth - d.clientWidth;
92
+ d.remove();
93
+ return w;
94
+ }
95
+ /**
96
+ * Executes a callback on an element exactly once per key.
97
+ * Subsequent calls with the same element+key combination are no-ops.
98
+ */ function applyOnce(el, key, fn) {
99
+ if (key in el) return;
100
+ Reflect.set(el, key, 1);
101
+ fn(el);
102
+ }
103
+ /**
104
+ * Invokes the callback with document.body once available.
105
+ * Fires synchronously if the body already exists, otherwise defers
106
+ * via MutationObserver on documentElement.
107
+ */ function whenBodyAvailable(callback) {
108
+ if (document.body) {
109
+ callback(document.body);
110
+ return;
111
+ }
112
+ const observer = new MutationObserver(()=>{
113
+ if (document.body) {
114
+ observer.disconnect();
115
+ callback(document.body);
116
+ }
117
+ });
118
+ observer.observe(document.documentElement, {
119
+ childList: true
120
+ });
121
+ }
122
+ /**
123
+ * Runs `fn` with `transition: none !important` on `element` so any synchronous
124
+ * style changes are not animated, then restores the original transition value
125
+ * on the next animation frame. The restore is scheduled even if `fn` throws,
126
+ * so the host page's transitions are never permanently overridden.
127
+ */ function withTransitionsDisabled(element, fn) {
128
+ const hadInlineTransition = element.style.getPropertyValue("transition");
129
+ const hadPriority = element.style.getPropertyPriority("transition");
130
+ element.style.setProperty("transition", "none", "important");
131
+ try {
132
+ fn();
133
+ } finally{
134
+ // Always schedule the restore, even if fn() throws — otherwise `transition: none !important`
135
+ // would be left on the host page and could break any later CSS transitions on the element.
136
+ requestAnimationFrame(()=>{
137
+ if (hadInlineTransition) {
138
+ element.style.setProperty("transition", hadInlineTransition, hadPriority);
139
+ } else {
140
+ element.style.removeProperty("transition");
141
+ }
142
+ });
143
+ }
144
+ }
145
+ function tryGet(fn, fallback) {
146
+ try {
147
+ return fn();
148
+ } catch (unused) {
149
+ return fallback;
150
+ }
151
+ }
152
+ /**
153
+ * Dispatches a resize event on the given target.
154
+ * @param target - The target to dispatch the resize event on. Defaults to window.
155
+ */ function dispatchResizeEvent(target) {
156
+ if (target === void 0) target = window;
157
+ target.dispatchEvent(new CustomEvent("resize", {
158
+ detail: {
159
+ source: "q-docking"
160
+ }
161
+ }));
162
+ }
163
+
164
+ export { DOCKED_DOCUMENT_ATTRIBUTE, DOCKED_MODE, DOCKED_TARGET_ATTRIBUTE, DOCKED_TOP_OFFSET_CSS_VARIABLE, DOCKED_VIEWPORT_WIDTH_CSS_VARIABLE, DOCKING_PROXY_MARKER, MOBILE_BREAKPOINT, Q_DOCKING_TAG_NAME, applyOnce, dispatchResizeEvent, isQualifiedOwnedShadowRoot, measureScrollbarWidth, tryGet, whenBodyAvailable, withTransitionsDisabled };
@@ -0,0 +1,488 @@
1
+ import { __webpack_require__ } from "../../../../js/runtime.js";
2
+ import { measureScrollbarWidth, whenBodyAvailable, DOCKING_PROXY_MARKER, DOCKED_DOCUMENT_ATTRIBUTE, applyOnce } from "./shared.js";
3
+ import "../../../../widget/utils/native_globals.js";
4
+ import { applyProxy } from "../../../../src/proxy.js";
5
+
6
+ /* provided dependency */ var requestAnimationFrame = __webpack_require__(68034).gj;
7
+ /* provided dependency */ var viewport_lock_setTimeout = __webpack_require__(68034).pS;
8
+ /* provided dependency */ var __nativeWindowAddEventListener = __webpack_require__(68034).zh;
9
+ /* eslint-disable rulesdir/css-units */
10
+
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ /**
15
+ * Activates the calc-based padding override on `<body>` and the
16
+ * `padding: 0` override on `<html>` (see `getStyles()`). Stamped on both
17
+ * so body content starts at the same vertical position the host page
18
+ * rendered at: html.padding-top + body.margin-top + body.padding-top are
19
+ * absorbed into body.padding-top.
20
+ */ const MARGIN_SWAP_ATTRIBUTE = "data-q-margin-swapped";
21
+ /** Activates `overflow: clip !important` on a detected scroll trap. */ const OVERFLOW_TRAP_ATTRIBUTE = "data-q-overflow-trap";
22
+ /** Activates `background: transparent !important` when body computes to plain white. */ const BACKGROUND_OVERRIDE_ATTRIBUTE = "data-q-bg-override";
23
+ function createViewportLock() {
24
+ const state = {
25
+ scrollbarWidth: 0,
26
+ pendingScroll: null,
27
+ scrollReplayScheduled: false
28
+ };
29
+ return {
30
+ init () {
31
+ state.scrollbarWidth = measureScrollbarWidth();
32
+ state.pendingScroll = capturePreDockingScroll();
33
+ installScrollProxy();
34
+ },
35
+ reEvaluate () {
36
+ initMarginSwap();
37
+ initOverflowTrap();
38
+ initBackgroundOverride();
39
+ if (state.pendingScroll) {
40
+ restoreScroll(state.pendingScroll);
41
+ state.pendingScroll = null;
42
+ }
43
+ // Docking makes <body> the scroll container and forwards its scroll to
44
+ // window/document (see installScrollProxy), but nothing fires that first
45
+ // event — so host code that only positions itself on scroll (sticky /
46
+ // hide-on-scroll bars, scroll-anchored ad slots) stays in its pre-scroll
47
+ // default. Replay an initial scroll so it settles for the current docked
48
+ // scroll position.
49
+ if (!state.scrollReplayScheduled) {
50
+ state.scrollReplayScheduled = true;
51
+ replayInitialScroll();
52
+ }
53
+ },
54
+ getStyles () {
55
+ return /* css */ "\n html {\n display: block !important;\n position: relative !important;\n contain: layout inline-size !important;\n height: 100dvh !important;\n overflow: hidden !important;\n margin-top: 0 !important;\n }\n body {\n display: block !important;\n position: relative !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n height: 100% !important;\n width: calc(100% + " + state.scrollbarWidth + "px) !important;\n max-width: calc(100% + " + state.scrollbarWidth + "px) !important;\n /* The overflow rules above make body the scroll container; inherit\n <html>'s scroll-behavior so anchor nav / scrollIntoView() keep the\n host's smooth scroll instead of body's UA-default 'auto'. */\n scroll-behavior: inherit !important;\n }\n [" + OVERFLOW_TRAP_ATTRIBUTE + "] {\n /* clip: not a scroll container (wheel passes through to body)\n while preserving the host's intentional clipping. */\n overflow: clip !important;\n /* clip does NOT establish a block formatting context, so a host\n that relied on its own 'overflow: hidden'/'auto' to contain a\n floated child (e.g. a 'float: left' main) loses that containment\n once we override to clip — the child escapes and the trap\n collapses to near-zero height, clipping the page blank.\n 'contain: layout' re-establishes an independent formatting context\n that contains the float without turning the element into a scroll\n container. */\n contain: layout !important;\n }\n html[" + MARGIN_SWAP_ATTRIBUTE + "] {\n padding: 0 !important;\n }\n body[" + MARGIN_SWAP_ATTRIBUTE + "] {\n margin-top: 0px !important;\n padding-top: calc(\n var(--q-orig-padding-top, 0px) +\n var(--q-orig-margin-top, 0px) +\n var(--q-html-orig-padding-top, 0px)\n ) !important;\n }\n [" + BACKGROUND_OVERRIDE_ATTRIBUTE + "] {\n background: transparent !important;\n }\n ";
56
+ }
57
+ };
58
+ }
59
+ // ============================================================================
60
+ // Scroll Capture / Restore
61
+ // ============================================================================
62
+ /**
63
+ * Falls through window → documentElement → body to tolerate environments
64
+ * where an earlier integration already hoisted the scroll onto body.
65
+ */ function capturePreDockingScroll() {
66
+ var _document_body, _document_body1;
67
+ const scrollTop = window.scrollY || document.documentElement.scrollTop || ((_document_body = document.body) == null ? void 0 : _document_body.scrollTop) || 0;
68
+ const scrollLeft = window.scrollX || document.documentElement.scrollLeft || ((_document_body1 = document.body) == null ? void 0 : _document_body1.scrollLeft) || 0;
69
+ return {
70
+ scrollTop,
71
+ scrollLeft
72
+ };
73
+ }
74
+ function restoreScroll(pos) {
75
+ const { body } = document;
76
+ if (!body) return;
77
+ // "instant" overrides body's inherited (possibly smooth) scroll-behavior so
78
+ // the restore jumps to the captured pre-dock offset rather than animating.
79
+ if (typeof body.scrollTo === "function") {
80
+ body.scrollTo({
81
+ top: pos.scrollTop,
82
+ left: pos.scrollLeft,
83
+ behavior: "instant"
84
+ });
85
+ } else {
86
+ // Environments without Element.scrollTo (e.g. jsdom): set offsets directly.
87
+ body.scrollTop = pos.scrollTop;
88
+ body.scrollLeft = pos.scrollLeft;
89
+ }
90
+ }
91
+ /**
92
+ * Dispatches `scroll` on `document` + `window` (the same targets the scroll
93
+ * proxy forwards body scrolls to) so scroll-driven host code recomputes its
94
+ * position against the docked scroll container. This mirrors the synthetic
95
+ * `resize` viewport_resize fires at init.
96
+ *
97
+ * Fired immediately, next frame, and on a short ramp: ad / widget scripts
98
+ * routinely attach their scroll listeners well after `load`, so a single
99
+ * dispatch at init would miss them and leave the widget parked in its
100
+ * pre-scroll default. Each dispatch is a bare event with no `scrollTo`, so
101
+ * handlers read the current scroll offset — re-firing later is harmless even
102
+ * if the user has since scrolled.
103
+ *
104
+ * The ramped re-fires are gated on docking still being active: if the widget
105
+ * is torn down (avatar-join-timeout failover, disable) before a timer elapses,
106
+ * we skip it rather than dispatch stray `scroll` events on the host page after
107
+ * we're gone. The immediate + next-frame fires run synchronously here, before
108
+ * any teardown, so they are unconditional.
109
+ */ function replayInitialScroll() {
110
+ const fire = ()=>{
111
+ document.dispatchEvent(new Event("scroll"));
112
+ window.dispatchEvent(new Event("scroll"));
113
+ };
114
+ const fireIfDocked = ()=>{
115
+ if (!document.documentElement.hasAttribute(DOCKED_DOCUMENT_ATTRIBUTE)) return;
116
+ fire();
117
+ };
118
+ fire();
119
+ requestAnimationFrame(fire);
120
+ for (const delay of [
121
+ 150,
122
+ 400,
123
+ 900,
124
+ 1600
125
+ ]){
126
+ viewport_lock_setTimeout(fireIfDocked, delay);
127
+ }
128
+ }
129
+ // ============================================================================
130
+ // DOM Write Helpers
131
+ // ============================================================================
132
+ /**
133
+ * Treats unset / `0px` as zero. getComputedStyle canonicalises zero lengths
134
+ * to `"0px"`; the empty-string branch covers jsdom / detached-element cases.
135
+ */ function isZeroLength(cssValue) {
136
+ return cssValue === "" || cssValue === "0px";
137
+ }
138
+ // ============================================================================
139
+ // Margin Swap
140
+ // ============================================================================
141
+ /**
142
+ * Captures the host's original top spacing (html.padding-top + body.margin-top
143
+ * + body.padding-top) into CSS vars on body for the calc-based swap in
144
+ * getStyles(). Runs immediately when body is available, then re-runs whenever
145
+ * host code mutates body's class or style so customer themes / runtime
146
+ * stylesheet changes flow through.
147
+ */ function initMarginSwap() {
148
+ whenBodyAvailable((body)=>{
149
+ swapMarginWithPadding(body);
150
+ observeBodyAttributes(body, "" + DOCKING_PROXY_MARKER + "_margin_swap_observer", ()=>swapMarginWithPadding(body));
151
+ // An early pass (body parsed before the host's render-blocking / async
152
+ // stylesheets have loaded) reads the UA-default body margin (e.g. 8px)
153
+ // instead of the host's real reset, baking that phantom spacing into
154
+ // padding-top. Stylesheet loads don't mutate body's class/style, so the
155
+ // observer above never fires the correction. Re-run once the document is
156
+ // fully loaded and styles have settled: swapMarginWithPadding is
157
+ // idempotent and self-clears when the settled margin is zero.
158
+ if (document.readyState !== "complete") {
159
+ __nativeWindowAddEventListener("load", ()=>swapMarginWithPadding(body), {
160
+ once: true
161
+ });
162
+ }
163
+ });
164
+ }
165
+ function swapMarginWithPadding(body) {
166
+ // Late observer callbacks can fire after the document is gone (in-flight
167
+ // microtasks during teardown). Bail rather than blow up.
168
+ if (typeof document === "undefined" || !document.documentElement) return;
169
+ const html = document.documentElement;
170
+ // Remove the gated attribute so getComputedStyle returns the host's true
171
+ // values rather than our zeroed override.
172
+ body.removeAttribute(MARGIN_SWAP_ATTRIBUTE);
173
+ html.removeAttribute(MARGIN_SWAP_ATTRIBUTE);
174
+ // Read phase — snapshot everything before any writes so a single layout
175
+ // flush (triggered by the first getComputedStyle) covers all three reads.
176
+ const bodyComputed = getComputedStyle(body);
177
+ const htmlComputed = getComputedStyle(html);
178
+ const bodyMarginTop = bodyComputed.getPropertyValue("margin-top");
179
+ const bodyPaddingTop = bodyComputed.getPropertyValue("padding-top");
180
+ const htmlPaddingTop = htmlComputed.getPropertyValue("padding-top");
181
+ // Nothing to absorb: the gated body calc would resolve to body's existing
182
+ // padding-top and the html `padding: 0` override is a no-op. Skip the
183
+ // attribute stamp and clear any vars left over from a prior non-zero pass.
184
+ if (isZeroLength(bodyMarginTop) && isZeroLength(htmlPaddingTop)) {
185
+ body.style.removeProperty("--q-orig-margin-top");
186
+ body.style.removeProperty("--q-orig-padding-top");
187
+ body.style.removeProperty("--q-html-orig-padding-top");
188
+ return;
189
+ }
190
+ body.style.setProperty("--q-orig-margin-top", bodyMarginTop);
191
+ body.style.setProperty("--q-orig-padding-top", bodyPaddingTop);
192
+ body.style.setProperty("--q-html-orig-padding-top", htmlPaddingTop);
193
+ body.setAttribute(MARGIN_SWAP_ATTRIBUTE, "");
194
+ html.setAttribute(MARGIN_SWAP_ATTRIBUTE, "");
195
+ }
196
+ // ============================================================================
197
+ // Overflow Trap
198
+ // ============================================================================
199
+ /**
200
+ * Detects full-page-shell scroll traps so the lock stylesheet can override
201
+ * their overflow to visible — in docked mode body is the scroll container
202
+ * and would see no scrollable content because the trap clips its tall
203
+ * descendants. Idempotent: each pass clears existing marks and re-scans.
204
+ */ function initOverflowTrap() {
205
+ whenBodyAvailable((body)=>{
206
+ markOverflowTraps(body);
207
+ observeBodyChildList(body);
208
+ });
209
+ }
210
+ /** Bounds the MutationObserver's lifetime so long-lived pages don't keep re-scanning. */ const OVERFLOW_TRAP_OBSERVER_LIFETIME_MS = 5000;
211
+ /**
212
+ * Re-runs {@link markOverflowTraps} when an SPA root mounts as a body child.
213
+ * `childList: true` without subtree keeps the observer narrow — SPA roots
214
+ * mount at body level, while deeper churn (carousels, focus rings) doesn't
215
+ * fire. Skipped after `load`: re-entry via reEvaluate scans synchronously.
216
+ */ function observeBodyChildList(body) {
217
+ if (document.readyState === "complete") return;
218
+ applyOnce(body, "" + DOCKING_PROXY_MARKER + "_overflow_trap_observer", (b)=>{
219
+ const observer = new MutationObserver(()=>markOverflowTraps(b));
220
+ observer.observe(b, {
221
+ childList: true
222
+ });
223
+ viewport_lock_setTimeout(()=>observer.disconnect(), OVERFLOW_TRAP_OBSERVER_LIFETIME_MS);
224
+ });
225
+ }
226
+ /**
227
+ * Walk depth cap. Covers SPA shells that nest their scroll trap a few
228
+ * levels under body (e.g. drawer containers inside a wrapper). 6 covers
229
+ * every shell seen in the visual-regression suite.
230
+ */ const OVERFLOW_TRAP_MAX_DEPTH = 6;
231
+ /**
232
+ * Height (as a multiple of the viewport) above which a full-width, in-flow
233
+ * clipper with no overflowing content is treated as a page-shell pass-through
234
+ * and opened up. Sits above 1.0× so a viewport-height hero/banner that clips
235
+ * its art keeps its clip, but low enough to catch tall content sections
236
+ * (~1.4× viewport) that would otherwise trap the wheel.
237
+ */ const SHELL_PASS_THROUGH_VIEWPORT_RATIO = 1.25;
238
+ /**
239
+ * Walks body's subtree post-order, marking each qualifying scroll trap. Post-
240
+ * order is load-bearing: marking an inner trap exposes its previously-clipped
241
+ * overflow to the ancestor (the next layout read forces the browser to flush
242
+ * the descendant's CSS override), so the ancestor's `scrollHeight` reflects
243
+ * the propagated value on the same walk. See {@link isOverflowTrap} for the
244
+ * qualifying criteria.
245
+ */ function markOverflowTraps(body) {
246
+ const viewportHeight = window.innerHeight;
247
+ const viewportWidth = window.innerWidth;
248
+ const dims = {
249
+ minH: viewportHeight * 0.95,
250
+ minW: viewportWidth * 0.95,
251
+ shellH: viewportHeight * SHELL_PASS_THROUGH_VIEWPORT_RATIO
252
+ };
253
+ // Clear stale marks so an element that no longer qualifies (e.g. its
254
+ // overflow changed) loses its attribute on this pass.
255
+ for (const el of body.querySelectorAll("[" + OVERFLOW_TRAP_ATTRIBUTE + "]")){
256
+ el.removeAttribute(OVERFLOW_TRAP_ATTRIBUTE);
257
+ }
258
+ const visit = (el, depth)=>{
259
+ if (depth < OVERFLOW_TRAP_MAX_DEPTH) {
260
+ for (const child of el.children){
261
+ if (child instanceof HTMLElement) visit(child, depth + 1);
262
+ }
263
+ }
264
+ if (isOverflowTrap(el, depth, dims)) {
265
+ el.setAttribute(OVERFLOW_TRAP_ATTRIBUTE, "");
266
+ }
267
+ };
268
+ for (const child of body.children){
269
+ if (child instanceof HTMLElement) visit(child, 1);
270
+ }
271
+ }
272
+ function isOverflowTrap(el, depth, dims) {
273
+ const { overflowY, position } = getComputedStyle(el);
274
+ // Depth=1 permissive case: opens up wrappers that are empty at init and
275
+ // only acquire scrolling content later (skips width/current-overflow
276
+ // checks since layout numbers may not be meaningful yet).
277
+ if (depth === 1 && /clip|hidden/.test(overflowY) && el.offsetHeight >= dims.minH) {
278
+ return true;
279
+ }
280
+ const isClipping = /clip|hidden|auto|scroll/.test(overflowY);
281
+ if (!isClipping) return false;
282
+ // jsdom returns "" for position where real browsers return "static" — treat
283
+ // both as in-flow. Explicit non-flow (absolute/fixed/sticky) excludes.
284
+ if (position && position !== "static" && position !== "relative") return false;
285
+ if (el.offsetWidth < dims.minW) return false;
286
+ // Active trap: full-size clipper with currently-overflowing content.
287
+ // 4px slack covers sub-pixel rounding and scrollbar-gutter reservation.
288
+ if (el.offsetHeight >= dims.minH && el.scrollHeight > el.clientHeight + 4) {
289
+ return true;
290
+ }
291
+ // Page-shell pass-through: tall clipper whose scrollHeight === clientHeight
292
+ // because its own height accommodates its content. Must still be opened up:
293
+ // Chromium's wheel pipeline stops at any `overflow != visible` even with no
294
+ // scrollable content. The viewport-ratio threshold distinguishes such a
295
+ // section from a viewport-height hero that clips its art (≤1.0×, kept
296
+ // clipped) — see SHELL_PASS_THROUGH_VIEWPORT_RATIO.
297
+ return el.offsetHeight >= dims.shellH;
298
+ }
299
+ // ============================================================================
300
+ // Background Override
301
+ // ============================================================================
302
+ /**
303
+ * Opt-in via attribute so pages with intentional body backgrounds keep their
304
+ * own. Only opts in on plain white (the typical "no background set" case).
305
+ * Re-runs on every reEvaluate and whenever host code mutates body's class or
306
+ * style, so late-loaded customer styles / runtime theming flip the attribute
307
+ * back off without waiting for the next poll.
308
+ */ function initBackgroundOverride() {
309
+ whenBodyAvailable((body)=>{
310
+ applyBackgroundOverride(body);
311
+ observeBodyAttributes(body, "" + DOCKING_PROXY_MARKER + "_bg_override_observer", ()=>applyBackgroundOverride(body));
312
+ });
313
+ }
314
+ function applyBackgroundOverride(element) {
315
+ // Remove first so getComputedStyle sees the host page's real background.
316
+ element.removeAttribute(BACKGROUND_OVERRIDE_ATTRIBUTE);
317
+ const computed = getComputedStyle(element);
318
+ const isWhite = computed.backgroundColor === "rgb(255, 255, 255)" || computed.backgroundColor === "rgba(255, 255, 255, 1)";
319
+ const hasNoImage = computed.backgroundImage === "none" || computed.backgroundImage === "";
320
+ if (isWhite && hasNoImage) {
321
+ element.setAttribute(BACKGROUND_OVERRIDE_ATTRIBUTE, "");
322
+ }
323
+ }
324
+ // ============================================================================
325
+ // Body Attribute Observer (shared)
326
+ // ============================================================================
327
+ /**
328
+ * Installs a long-lived MutationObserver on `body`'s class/style attributes
329
+ * so `callback` re-runs whenever the host mutates either. applyOnce keeps
330
+ * it one-per-marker across reEvaluate calls.
331
+ *
332
+ * Disconnects around the callback so style writes made by the callback
333
+ * itself (e.g. CSS-var writes) don't self-trigger an infinite loop —
334
+ * attributeFilter excludes our data-q-* writes but not inline-style writes.
335
+ *
336
+ * The `observe` call is in a finally so a thrown callback still leaves us
337
+ * watching for the next mutation. Otherwise an unexpected style shape on
338
+ * one cycle would permanently sideline the corrective logic for the rest
339
+ * of the session.
340
+ */ function observeBodyAttributes(body, marker, callback) {
341
+ applyOnce(body, marker, (b)=>{
342
+ const opts = {
343
+ attributes: true,
344
+ attributeFilter: [
345
+ "class",
346
+ "style"
347
+ ]
348
+ };
349
+ const observer = new MutationObserver(()=>{
350
+ observer.disconnect();
351
+ try {
352
+ callback();
353
+ } finally{
354
+ observer.observe(b, opts);
355
+ }
356
+ });
357
+ observer.observe(b, opts);
358
+ });
359
+ }
360
+ // ============================================================================
361
+ // Scroll Proxy
362
+ // ============================================================================
363
+ /**
364
+ * Redirects scroll APIs on documentElement/window to document.body (the
365
+ * docked scroll container) and forwards body scroll events to document/window
366
+ * so customer listeners fire transparently. Live getters keep the proxy
367
+ * working when installed before `<body>` exists (snippet in `<head>`).
368
+ */ function installScrollProxy() {
369
+ const { documentElement } = document;
370
+ // True while a scroll started via the proxied APIs below is awaiting its
371
+ // `scroll` event, so the listener can tell it from genuine user input. The
372
+ // generation counter lets a deferred reset clear a write that fires no event
373
+ // without clobbering a newer write, and hoisting keeps `no-loop-func` happy.
374
+ let programmaticScrollPending = false;
375
+ let programmaticScrollGeneration = 0;
376
+ const markProgrammaticScroll = ()=>{
377
+ programmaticScrollPending = true;
378
+ const generation = programmaticScrollGeneration += 1;
379
+ requestAnimationFrame(()=>{
380
+ if (generation === programmaticScrollGeneration) {
381
+ programmaticScrollPending = false;
382
+ }
383
+ });
384
+ };
385
+ for (const prop of [
386
+ "scrollHeight",
387
+ "scrollWidth"
388
+ ]){
389
+ applyProxy(documentElement, prop, {
390
+ get () {
391
+ var _ref;
392
+ var _document_body;
393
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body[prop]) != null ? _ref : 0;
394
+ }
395
+ });
396
+ }
397
+ for (const prop of [
398
+ "scrollTop",
399
+ "scrollLeft"
400
+ ]){
401
+ applyProxy(documentElement, prop, {
402
+ get () {
403
+ var _ref;
404
+ var _document_body;
405
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body[prop]) != null ? _ref : 0;
406
+ },
407
+ set (val) {
408
+ if (document.body) {
409
+ markProgrammaticScroll();
410
+ document.body[prop] = val;
411
+ }
412
+ }
413
+ });
414
+ }
415
+ const proxyMethod = (method)=>function() {
416
+ for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
417
+ args[_key] = arguments[_key];
418
+ }
419
+ var _document_body;
420
+ markProgrammaticScroll();
421
+ return (_document_body = document.body) == null ? void 0 : _document_body[method](...args);
422
+ };
423
+ window.scrollTo = proxyMethod("scrollTo");
424
+ window.scrollBy = proxyMethod("scrollBy");
425
+ window.scroll = proxyMethod("scroll");
426
+ documentElement.scrollTo = proxyMethod("scrollTo");
427
+ documentElement.scrollBy = proxyMethod("scrollBy");
428
+ documentElement.scroll = proxyMethod("scroll");
429
+ applyProxy(window, "scrollY", {
430
+ get () {
431
+ var _ref;
432
+ var _document_body;
433
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body.scrollTop) != null ? _ref : 0;
434
+ }
435
+ });
436
+ applyProxy(window, "pageYOffset", {
437
+ get () {
438
+ var _ref;
439
+ var _document_body;
440
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body.scrollTop) != null ? _ref : 0;
441
+ }
442
+ });
443
+ applyProxy(window, "scrollX", {
444
+ get () {
445
+ var _ref;
446
+ var _document_body;
447
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body.scrollLeft) != null ? _ref : 0;
448
+ }
449
+ });
450
+ applyProxy(window, "pageXOffset", {
451
+ get () {
452
+ var _ref;
453
+ var _document_body;
454
+ return (_ref = (_document_body = document.body) == null ? void 0 : _document_body.scrollLeft) != null ? _ref : 0;
455
+ }
456
+ });
457
+ applyProxy(document, "scrollingElement", {
458
+ get () {
459
+ return document.body;
460
+ }
461
+ });
462
+ whenBodyAvailable((body)=>{
463
+ applyOnce(body, "" + DOCKING_PROXY_MARKER + "_scroll", (b)=>{
464
+ b.addEventListener("scroll", (event)=>{
465
+ // Only the body container's own scroll is the docked viewport
466
+ // scroll; let descendant scroll containers pass through.
467
+ if (event.target !== b) return;
468
+ // Read and clear before re-dispatching so a forwarded listener that
469
+ // scrolls programmatically doesn't taint this decision.
470
+ const wasProgrammatic = programmaticScrollPending;
471
+ programmaticScrollPending = false;
472
+ // Mirror non-docked semantics: a viewport scroll fires on document
473
+ // and window, not on the body/html elements.
474
+ document.dispatchEvent(new Event("scroll"));
475
+ window.dispatchEvent(new Event("scroll"));
476
+ // Hide our own programmatic scroll from element-level handlers so a
477
+ // host "cancel on user scroll" guard can't abort it; real user
478
+ // scrolls still reach them.
479
+ if (wasProgrammatic) event.stopImmediatePropagation();
480
+ }, {
481
+ capture: true,
482
+ passive: true
483
+ });
484
+ });
485
+ });
486
+ }
487
+
488
+ export { createViewportLock };