@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.
- package/41842993ec71d6628e4949e9a22b146b.svg +3 -0
- package/7271f3433ed82fc7f56adcd9e30275f4.svg +17 -0
- package/LICENSE.txt +82 -0
- package/components/helpers/entriesStringValidations.js +69 -0
- package/components/helpers/languages.js +32 -0
- package/components/shared/assertUnreachable.js +5 -0
- package/components/shared/controls/imageCropperHelpers.js +43 -0
- package/components/shared/meetingLoadingProgressSpec.js +116 -0
- package/constants.generated.js +9883 -0
- package/css/widget/multimodal_v2/host.split-css.css +162 -0
- package/css/widget/multimodal_v2/index.split-css.panda.css +5240 -0
- package/css/widget/widget.split-css.css +100 -0
- package/fonts/inter/Inter-Black.woff +0 -0
- package/fonts/inter/Inter-Black.woff2 +0 -0
- package/fonts/inter/Inter-BlackItalic.woff +0 -0
- package/fonts/inter/Inter-BlackItalic.woff2 +0 -0
- package/fonts/inter/Inter-Bold.woff +0 -0
- package/fonts/inter/Inter-Bold.woff2 +0 -0
- package/fonts/inter/Inter-BoldItalic.woff +0 -0
- package/fonts/inter/Inter-BoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-ExtraBold.woff +0 -0
- package/fonts/inter/Inter-ExtraBold.woff2 +0 -0
- package/fonts/inter/Inter-ExtraBoldItalic.woff +0 -0
- package/fonts/inter/Inter-ExtraBoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-ExtraLight.woff +0 -0
- package/fonts/inter/Inter-ExtraLight.woff2 +0 -0
- package/fonts/inter/Inter-ExtraLightItalic.woff +0 -0
- package/fonts/inter/Inter-ExtraLightItalic.woff2 +0 -0
- package/fonts/inter/Inter-Italic.woff +0 -0
- package/fonts/inter/Inter-Italic.woff2 +0 -0
- package/fonts/inter/Inter-Light.woff +0 -0
- package/fonts/inter/Inter-Light.woff2 +0 -0
- package/fonts/inter/Inter-LightItalic.woff +0 -0
- package/fonts/inter/Inter-LightItalic.woff2 +0 -0
- package/fonts/inter/Inter-Medium.woff +0 -0
- package/fonts/inter/Inter-Medium.woff2 +0 -0
- package/fonts/inter/Inter-MediumItalic.woff +0 -0
- package/fonts/inter/Inter-MediumItalic.woff2 +0 -0
- package/fonts/inter/Inter-Regular.woff +0 -0
- package/fonts/inter/Inter-Regular.woff2 +0 -0
- package/fonts/inter/Inter-SemiBold.woff +0 -0
- package/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/fonts/inter/Inter-SemiBoldItalic.woff +0 -0
- package/fonts/inter/Inter-SemiBoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-Thin.woff +0 -0
- package/fonts/inter/Inter-Thin.woff2 +0 -0
- package/fonts/inter/Inter-ThinItalic.woff +0 -0
- package/fonts/inter/Inter-ThinItalic.woff2 +0 -0
- package/fonts/inter/Inter-italic.var.woff2 +0 -0
- package/fonts/inter/Inter-roman.var.woff2 +0 -0
- package/images/close.js +63 -0
- package/images/logo.js +22 -0
- package/js/4101.js +19721 -0
- package/js/daily-esm.js +9948 -0
- package/js/date-fns.js +427 -0
- package/js/multimodal_v2.js +1653 -0
- package/js/runtime.js +109 -0
- package/media/Inter-Black.796be8d8bf.woff2 +0 -0
- package/media/Inter-Black.b254104c56.woff +0 -0
- package/media/Inter-BlackItalic.70306b0eae.woff +0 -0
- package/media/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
- package/media/Inter-Bold.579e0f95ca.woff2 +0 -0
- package/media/Inter-Bold.b1234477a5.woff +0 -0
- package/media/Inter-BoldItalic.3d0d804323.woff +0 -0
- package/media/Inter-BoldItalic.828a494e04.woff2 +0 -0
- package/media/Inter-ExtraBold.208a9e6c99.woff +0 -0
- package/media/Inter-ExtraBold.d65f028165.woff2 +0 -0
- package/media/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
- package/media/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
- package/media/Inter-ExtraLight.15c082a57d.woff +0 -0
- package/media/Inter-ExtraLight.6824177d1e.woff2 +0 -0
- package/media/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
- package/media/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
- package/media/Inter-Italic.9beab78452.woff +0 -0
- package/media/Inter-Italic.d593a8df79.woff2 +0 -0
- package/media/Inter-Light.27083fa637.woff2 +0 -0
- package/media/Inter-Light.91dfddd842.woff +0 -0
- package/media/Inter-LightItalic.0a783b89b3.woff2 +0 -0
- package/media/Inter-LightItalic.f8ccf2813f.woff +0 -0
- package/media/Inter-Medium.dc792b508e.woff2 +0 -0
- package/media/Inter-Medium.ec7dd2d9d8.woff +0 -0
- package/media/Inter-MediumItalic.17301e5b40.woff +0 -0
- package/media/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
- package/media/Inter-Regular.f1f0c35b32.woff2 +0 -0
- package/media/Inter-Regular.f356e84aa0.woff +0 -0
- package/media/Inter-SemiBold.55027e4724.woff +0 -0
- package/media/Inter-SemiBold.fcb100c760.woff2 +0 -0
- package/media/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
- package/media/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
- package/media/Inter-Thin.16325d9b0f.woff +0 -0
- package/media/Inter-Thin.dafaa44d99.woff2 +0 -0
- package/media/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
- package/media/Inter-ThinItalic.d3d8994788.woff +0 -0
- package/media/Inter-italic.var.958a0b9742.woff2 +0 -0
- package/media/Inter-roman.var.b2129c009c.woff2 +0 -0
- package/package.json +20 -0
- package/packs/widget/api/docking/docking_host.js +97 -0
- package/packs/widget/api/docking/index.js +294 -0
- package/packs/widget/api/docking/shared.js +164 -0
- package/packs/widget/api/docking/viewport_lock.js +488 -0
- package/packs/widget/api/docking/viewport_resize.js +1203 -0
- package/packs/widget/esm/fonts/Inter-Black.796be8d8bf.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Black.b254104c56.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BlackItalic.70306b0eae.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Bold.579e0f95ca.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Bold.b1234477a5.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BoldItalic.3d0d804323.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BoldItalic.828a494e04.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBold.208a9e6c99.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBold.d65f028165.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLight.15c082a57d.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLight.6824177d1e.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Italic.9beab78452.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Italic.d593a8df79.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Light.27083fa637.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Light.91dfddd842.woff +0 -0
- package/packs/widget/esm/fonts/Inter-LightItalic.0a783b89b3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-LightItalic.f8ccf2813f.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Medium.dc792b508e.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Medium.ec7dd2d9d8.woff +0 -0
- package/packs/widget/esm/fonts/Inter-MediumItalic.17301e5b40.woff +0 -0
- package/packs/widget/esm/fonts/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Regular.f1f0c35b32.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Regular.f356e84aa0.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBold.55027e4724.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBold.fcb100c760.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Thin.16325d9b0f.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Thin.dafaa44d99.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ThinItalic.d3d8994788.woff +0 -0
- package/packs/widget/esm/fonts/Inter-italic.var.958a0b9742.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-roman.var.b2129c009c.woff2 +0 -0
- package/packs/widget/esm/index.js +183 -0
- package/packs/widget/esm/qualified.css +5502 -0
- package/routes/app/offers/scripts/OfferMainScript.js +154 -0
- package/routes/app/offers/scripts/constants.js +71 -0
- package/routes/app/offers/scripts/main/ButtonManager.js +65 -0
- package/routes/app/offers/scripts/main/FormManager.js +325 -0
- package/routes/app/offers/scripts/main/MainContext.js +19 -0
- package/routes/app/offers/scripts/main/OfferManager.js +91 -0
- package/routes/app/offers/scripts/main/TriggerManager.js +125 -0
- package/routes/app/offers/scripts/rendering/ContentManager.js +53 -0
- package/routes/app/offers/scripts/rendering/LocationManager.js +83 -0
- package/routes/app/offers/scripts/rendering/RenderedOffer.js +188 -0
- package/routes/app/offers/scripts/rendering/Renderer.js +69 -0
- package/routes/app/offers/scripts/rendering/RenderingInitializer.js +62 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManager.js +31 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerFooter.js +81 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerHeader.js +81 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerModal.js +117 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerSidebar.js +75 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationResult.js +43 -0
- package/routes/app/offers/scripts/rendering/animations/Animator.js +78 -0
- package/routes/app/offers/scripts/rendering/animations/BaseAnimationManager.js +25 -0
- package/routes/app/offers/scripts/rendering/lib/BaseComponent.js +106 -0
- package/routes/app/offers/scripts/rendering/lib/FormComponent.js +134 -0
- package/routes/app/offers/scripts/rendering/lib/OfferComponent.js +144 -0
- package/routes/app/offers/scripts/rendering/lib/ScrollbarWidth.js +27 -0
- package/routes/app/offers/scripts/rendering/lib/decorators.js +20 -0
- package/routes/app/offers/scripts/rendering/locations/CSSVarsManager.js +66 -0
- package/routes/app/offers/scripts/rendering/locations/ElementResizeObserver.js +49 -0
- package/routes/app/offers/scripts/rendering/locations/footer.js +53 -0
- package/routes/app/offers/scripts/rendering/locations/header/AsyncBatchProcessor.js +70 -0
- package/routes/app/offers/scripts/rendering/locations/header/CSSTransitionObserver.js +182 -0
- package/routes/app/offers/scripts/rendering/locations/header/ElementStyleChangeObserver.js +138 -0
- package/routes/app/offers/scripts/rendering/locations/header/ExternalStyleManager.js +110 -0
- package/routes/app/offers/scripts/rendering/locations/header/Header.js +353 -0
- package/routes/app/offers/scripts/rendering/locations/header/InlineStyleManager.js +105 -0
- package/routes/app/offers/scripts/rendering/locations/header/MatchingElementsObserver.js +107 -0
- package/routes/app/offers/scripts/rendering/locations/header/NewElementsObserver.js +129 -0
- package/routes/app/offers/scripts/rendering/locations/header/RuleWrapper.js +46 -0
- package/routes/app/offers/scripts/rendering/locations/header/SelectorObservable.js +23 -0
- package/routes/app/offers/scripts/rendering/locations/header/SelectorObserver.js +61 -0
- package/routes/app/offers/scripts/rendering/locations/header/ShiftedElementsManager.js +45 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleElementManager.js +37 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleElementWrapper.js +62 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectorValue.js +45 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectors.js +62 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/StyleSelectorObserver.js +294 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/constants.js +21 -0
- package/routes/app/offers/scripts/rendering/locations/header/WindowResizeObserver.js +43 -0
- package/routes/app/offers/scripts/rendering/locations/header/utils.js +25 -0
- package/routes/app/offers/scripts/rendering/locations/popup.js +66 -0
- package/routes/app/offers/scripts/rendering/locations/sidebar.js +21 -0
- package/routes/app/offers/scripts/rendering/variations/ButtonBanner.js +105 -0
- package/routes/app/offers/scripts/rendering/variations/ButtonModal.js +114 -0
- package/routes/app/offers/scripts/rendering/variations/FormBanner.js +214 -0
- package/routes/app/offers/scripts/rendering/variations/FormModal.js +325 -0
- package/routes/app/offers/scripts/rendering/variations/LinkBanner.js +105 -0
- package/routes/app/offers/scripts/rendering/variations/components/Body.js +29 -0
- package/routes/app/offers/scripts/rendering/variations/components/Button.js +128 -0
- package/routes/app/offers/scripts/rendering/variations/components/DismissButton.js +39 -0
- package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageBanner.js +110 -0
- package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageModal.js +128 -0
- package/routes/app/offers/scripts/rendering/variations/components/Headline.js +94 -0
- package/routes/app/offers/scripts/rendering/variations/components/MultiFieldForm.js +302 -0
- package/routes/app/offers/scripts/rendering/variations/components/Tooltip.js +74 -0
- package/routes/app/offers/scripts/rendering/variations/icons.js +15 -0
- package/routes/app/offers/scripts/utils.js +115 -0
- package/routes/app/offers/utils/HTMLUtils.js +10 -0
- package/routes/app/offers/utils/createTypeGuard.js +32 -0
- package/routes/app/offers/utils/promise-utils.js +22 -0
- package/routes/app/websiteBuilder/stores/storeHelpers.js +18 -0
- package/sounds/message-initial.mp3 +0 -0
- package/sounds/message-received.mp3 +0 -0
- package/sounds/message-sent.mp3 +0 -0
- package/src/arrays.js +15 -0
- package/src/audio.js +106 -0
- package/src/bounded-set.js +16 -0
- package/src/bounding_box_observer.js +129 -0
- package/src/decorators.js +29 -0
- package/src/dom.js +128 -0
- package/src/dom_roots.js +26 -0
- package/src/embedded_forms/EmbeddedForm.js +638 -0
- package/src/embedded_forms/QualifiedEmbeddedForm.js +51 -0
- package/src/embedded_forms/QualifiedFormField.js +137 -0
- package/src/embedded_forms/utils.js +17 -0
- package/src/graphql-types.js +1686 -0
- package/src/iframes.js +86 -0
- package/src/localstorage.js +43 -0
- package/src/mirror/Shipper.js +133 -0
- package/src/mirror/constants.generated.js +13 -0
- package/src/mirror/constants.js +238 -0
- package/src/mirror/shipper/ChangeQueue.js +155 -0
- package/src/mirror/shipper/DOMSerializer.js +392 -0
- package/src/mirror/shipper/observers.js +441 -0
- package/src/mirror/shipper/utils.js +98 -0
- package/src/mixins/disposable.js +125 -0
- package/src/mixins/injectable.js +37 -0
- package/src/personalizations/personalization-manager.js +110 -0
- package/src/personalizations/strategies/node-freezing-strategy.js +174 -0
- package/src/personalizations/utils.js +187 -0
- package/src/promises.js +107 -0
- package/src/proxy.js +144 -0
- package/src/qualified_root.js +35 -0
- package/src/query_params.js +55 -0
- package/src/shadow-dom-helper.js +63 -0
- package/src/singleton_host.js +39 -0
- package/src/smart_website/trigger.js +49 -0
- package/src/smart_website/utils.js +149 -0
- package/src/string.js +53 -0
- package/src/timezone.js +57 -0
- package/src/timing.js +49 -0
- package/src/type-utils.js +76 -0
- package/src/url-utils.js +102 -0
- package/src/url.js +50 -0
- package/src/utils.js +72 -0
- package/src/validation.js.js +29 -0
- package/src/validation_ts.js +6 -0
- package/vendor/actioncable/adapters.js +6 -0
- package/vendor/actioncable/connection.js +204 -0
- package/vendor/actioncable/connection_monitor.js +129 -0
- package/vendor/actioncable/consumer.js +91 -0
- package/vendor/actioncable/index.js +34 -0
- package/vendor/actioncable/internal.js +22 -0
- package/vendor/actioncable/logger.js +28 -0
- package/vendor/actioncable/subscription.js +93 -0
- package/vendor/actioncable/subscriptions.js +89 -0
- package/vendor/open-telemetry-idgenerator.js +43 -0
- package/widget/analytics/facebook_tracker.js +8 -0
- package/widget/analytics/google_analytics_tracker.js +83 -0
- package/widget/analytics/google_tag_manager_tracker.js +22 -0
- package/widget/analytics.js +58 -0
- package/widget/api_handler/api_handler.js +730 -0
- package/widget/api_handler/base_api_handler.js +249 -0
- package/widget/booker_intent_tracker.js +391 -0
- package/widget/booker_outcome_tracker.js +329 -0
- package/widget/capture_widget_exceptions.js +150 -0
- package/widget/channel.js +282 -0
- package/widget/composite_experience_adapter.js +101 -0
- package/widget/constants.generated.js +350 -0
- package/widget/constants.js +21 -0
- package/widget/container.js +193 -0
- package/widget/content_activity_emitter.js +36 -0
- package/widget/data360_visitor.js +67 -0
- package/widget/date_provider.js +11 -0
- package/widget/debug_mode_state.js +175 -0
- package/widget/dummy_module.js +9 -0
- package/widget/eloqua_visitor.js +17 -0
- package/widget/form_cta_booker_intent.js +246 -0
- package/widget/hubspot_visitor.js +39 -0
- package/widget/inline_meeting_booker_page.js +90 -0
- package/widget/local_state/abstract_local_state.js +38 -0
- package/widget/local_state/debug_state/abstract_debug_flow.js +29 -0
- package/widget/local_state/debug_state/custom_form_flow.js +14 -0
- package/widget/local_state/debug_state/hubspot_form_flow.js +19 -0
- package/widget/local_state/debug_state/hubspot_v4_form_flow.js +19 -0
- package/widget/local_state/debug_state/marketo_form_flow.js +20 -0
- package/widget/local_state/debug_state/pardot_form_flow.js +18 -0
- package/widget/local_state/debug_state.js +362 -0
- package/widget/local_state/trace_state.js +20 -0
- package/widget/location_provider.js +9 -0
- package/widget/marketo_visitor.js +39 -0
- package/widget/meetings/tracing/buttons_forms_triggering_tracer.js +124 -0
- package/widget/meetings/tracing/spans/button_spans.js +18 -0
- package/widget/meetings/tracing/spans/form_spans.js +11 -0
- package/widget/multimodal_v2/assets_preloader.js +97 -0
- package/widget/multimodal_v2/components/AppLayout.js +93 -0
- package/widget/multimodal_v2/components/CursorOverlay.js +93 -0
- package/widget/multimodal_v2/components/PointerRectOverlay.js +74 -0
- package/widget/multimodal_v2/components/app/Artifact.js +109 -0
- package/widget/multimodal_v2/components/app/Background.js +27 -0
- package/widget/multimodal_v2/components/app/CalendarLoadingContent.js +255 -0
- package/widget/multimodal_v2/components/app/Chat.js +39 -0
- package/widget/multimodal_v2/components/app/CookieConsentModal.js +149 -0
- package/widget/multimodal_v2/components/app/Foreground.js +48 -0
- package/widget/multimodal_v2/components/app/HiddenInput.js +41 -0
- package/widget/multimodal_v2/components/app/Input.js +72 -0
- package/widget/multimodal_v2/components/app/LightboxExperience.js +769 -0
- package/widget/multimodal_v2/components/app/LoadingOverlay.js +97 -0
- package/widget/multimodal_v2/components/app/Main.js +985 -0
- package/widget/multimodal_v2/components/app/MessengerButton.js +160 -0
- package/widget/multimodal_v2/components/app/Multimodal.js +17 -0
- package/widget/multimodal_v2/components/app/OverlayControls.js +79 -0
- package/widget/multimodal_v2/components/app/Preview.js +32 -0
- package/widget/multimodal_v2/components/app/PrivacyDisclosure.js +57 -0
- package/widget/multimodal_v2/components/app/RotateDeviceOverlay.js +70 -0
- package/widget/multimodal_v2/components/app/Toolbar.js +156 -0
- package/widget/multimodal_v2/components/chat/ChatComposer.js +129 -0
- package/widget/multimodal_v2/components/chat/ChatInputForm.js +398 -0
- package/widget/multimodal_v2/components/chat/ColdStartQuestions.js +354 -0
- package/widget/multimodal_v2/components/chat/ComposerErrorBanner.js +62 -0
- package/widget/multimodal_v2/components/chat/PostCallSurvey.js +359 -0
- package/widget/multimodal_v2/components/chat/preview/FieldRequestRenderer.js +41 -0
- package/widget/multimodal_v2/components/chat/preview/PreviewMessageRenderer.js +60 -0
- package/widget/multimodal_v2/components/chat/preview/SharedOfferRenderer.js +143 -0
- package/widget/multimodal_v2/components/chat/preview/TextRenderer.js +27 -0
- package/widget/multimodal_v2/components/chat/preview/TimelinePreview.js +254 -0
- package/widget/multimodal_v2/components/chat/timeline/CalendarEventOfferRenderer.js +103 -0
- package/widget/multimodal_v2/components/chat/timeline/CalendarEventPickRenderer.js +148 -0
- package/widget/multimodal_v2/components/chat/timeline/FieldEntryRenderer.js +84 -0
- package/widget/multimodal_v2/components/chat/timeline/FieldRequestRenderer.js +56 -0
- package/widget/multimodal_v2/components/chat/timeline/InlinePrivacyDisclosure.js +66 -0
- package/widget/multimodal_v2/components/chat/timeline/LinkPreviewCard.js +70 -0
- package/widget/multimodal_v2/components/chat/timeline/MessageEntry.js +88 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentContentRenderer.js +30 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentDeckRenderer.js +279 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentVideoRenderer.js +131 -0
- package/widget/multimodal_v2/components/chat/timeline/ShareContentRenderer.js +59 -0
- package/widget/multimodal_v2/components/chat/timeline/SharedOfferRenderer.js +131 -0
- package/widget/multimodal_v2/components/chat/timeline/SystemRenderer.js +82 -0
- package/widget/multimodal_v2/components/chat/timeline/TextRenderer.js +66 -0
- package/widget/multimodal_v2/components/chat/timeline/Timeline.js +158 -0
- package/widget/multimodal_v2/components/debug/DebugMultimodalPanel.js +327 -0
- package/widget/multimodal_v2/components/decks/index.js +160 -0
- package/widget/multimodal_v2/components/field_request/BooleanField.js +77 -0
- package/widget/multimodal_v2/components/field_request/FieldComponents.js +69 -0
- package/widget/multimodal_v2/components/field_request/Form.js +87 -0
- package/widget/multimodal_v2/components/field_request/MultiPicklistField.js +240 -0
- package/widget/multimodal_v2/components/field_request/PicklistField.js +166 -0
- package/widget/multimodal_v2/components/field_request/SingleLineInputField.js +69 -0
- package/widget/multimodal_v2/components/field_request/TextField.js +37 -0
- package/widget/multimodal_v2/components/field_request/index.js +170 -0
- package/widget/multimodal_v2/components/helpers/AutoScroll.js +37 -0
- package/widget/multimodal_v2/components/helpers/ErrorBoundary.js +53 -0
- package/widget/multimodal_v2/components/helpers/FocusTrapDialog.js +26 -0
- package/widget/multimodal_v2/components/helpers/ImpressionTracker.js +94 -0
- package/widget/multimodal_v2/components/helpers/ListRenderer.js +37 -0
- package/widget/multimodal_v2/components/helpers/Localization.js +76 -0
- package/widget/multimodal_v2/components/helpers/Persisted.js +166 -0
- package/widget/multimodal_v2/components/helpers/RichText.js +358 -0
- package/widget/multimodal_v2/components/helpers/ScreenReaderHeading.js +17 -0
- package/widget/multimodal_v2/components/helpers/Thumbnail.js +190 -0
- package/widget/multimodal_v2/components/helpers/VisuallyHidden.js +41 -0
- package/widget/multimodal_v2/components/helpers/content_click_payloads.js +58 -0
- package/widget/multimodal_v2/components/helpers/useDraggable.js +103 -0
- package/widget/multimodal_v2/components/helpers/useTextOverflow.js +44 -0
- package/widget/multimodal_v2/components/lightbox_gather/index.js +741 -0
- package/widget/multimodal_v2/components/meetings/ArtifactEntryPoint.js +252 -0
- package/widget/multimodal_v2/components/meetings/MeetingAdditionalAttendees.js +325 -0
- package/widget/multimodal_v2/components/meetings/MeetingBookerEntry.js +100 -0
- package/widget/multimodal_v2/components/meetings/MeetingDetailsCard.js +99 -0
- package/widget/multimodal_v2/components/meetings/MeetingErrorBanner.js +62 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferEmailStep.js +239 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferFooter.js +104 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferSelectionStep.js +60 -0
- package/widget/multimodal_v2/components/meetings/MeetingRepHeader.js +222 -0
- package/widget/multimodal_v2/components/meetings/MeetingStepShell.js +92 -0
- package/widget/multimodal_v2/components/meetings/MeetingSummaryRail.js +515 -0
- package/widget/multimodal_v2/components/meetings/MeetingTimeSelector.js +603 -0
- package/widget/multimodal_v2/components/meetings/MonthDatePicker.js +422 -0
- package/widget/multimodal_v2/components/meetings/NavigationButtons.js +76 -0
- package/widget/multimodal_v2/components/meetings/TimeSlotHeader.js +357 -0
- package/widget/multimodal_v2/components/meetings/WeekViewHeader.js +20 -0
- package/widget/multimodal_v2/components/meetings/constants.js +7 -0
- package/widget/multimodal_v2/components/meetings/index.js +47 -0
- package/widget/multimodal_v2/components/meetings/utils.js +328 -0
- package/widget/multimodal_v2/components/multimodal/Audio.js +28 -0
- package/widget/multimodal_v2/components/multimodal/Controls.js +188 -0
- package/widget/multimodal_v2/components/multimodal/LiveVideo.js +63 -0
- package/widget/multimodal_v2/components/multimodal/MultiModalComponent.js +424 -0
- package/widget/multimodal_v2/components/multimodal/MultimodalAvatar.js +36 -0
- package/widget/multimodal_v2/components/multimodal/OrbAvatar.js +326 -0
- package/widget/multimodal_v2/components/multimodal/Status.js +220 -0
- package/widget/multimodal_v2/components/multimodal/VideoAvatar.js +24 -0
- package/widget/multimodal_v2/components/multimodal/VideoPreview.js +114 -0
- package/widget/multimodal_v2/components/multimodal/useAudioLevelMonitoring.js +96 -0
- package/widget/multimodal_v2/components/multimodal/useMultimodal.js +434 -0
- package/widget/multimodal_v2/components/presentations/index.js +372 -0
- package/widget/multimodal_v2/components/shared/Avatar.js +92 -0
- package/widget/multimodal_v2/components/shared/AvatarGroup.js +135 -0
- package/widget/multimodal_v2/components/shared/Button.js +245 -0
- package/widget/multimodal_v2/components/shared/ButtonGroup.js +133 -0
- package/widget/multimodal_v2/components/shared/ComposerForm.js +98 -0
- package/widget/multimodal_v2/components/shared/SpeakingIndicator.js +239 -0
- package/widget/multimodal_v2/components/shared/ThinkingAnimation.js +165 -0
- package/widget/multimodal_v2/components/shared/Tooltip.js +266 -0
- package/widget/multimodal_v2/components/shared/controls/Dropdown.js +79 -0
- package/widget/multimodal_v2/components/shared/controls/PillToggle.js +142 -0
- package/widget/multimodal_v2/components/shared/controls/TextArea.js +114 -0
- package/widget/multimodal_v2/components/shared/toolCallLabels.js +12 -0
- package/widget/multimodal_v2/components/slides/SlidesThumbnail.js +47 -0
- package/widget/multimodal_v2/components/slides/index.js +61 -0
- package/widget/multimodal_v2/constants.js +88 -0
- package/widget/multimodal_v2/host.split-css.js +2 -0
- package/widget/multimodal_v2/host.string.js +96 -0
- package/widget/multimodal_v2/images/icons.js +582 -0
- package/widget/multimodal_v2/images/posters/piper_low_res.jpg +0 -0
- package/widget/multimodal_v2/index.js +23 -0
- package/widget/multimodal_v2/index.panda.js +28 -0
- package/widget/multimodal_v2/index.split-css.panda.js +2 -0
- package/widget/multimodal_v2/inline_meeting_booker.js +182 -0
- package/widget/multimodal_v2/locales/cs.js +196 -0
- package/widget/multimodal_v2/locales/da.js +196 -0
- package/widget/multimodal_v2/locales/de.js +196 -0
- package/widget/multimodal_v2/locales/en.js +196 -0
- package/widget/multimodal_v2/locales/en_AU.js +197 -0
- package/widget/multimodal_v2/locales/en_GB.js +197 -0
- package/widget/multimodal_v2/locales/es.js +197 -0
- package/widget/multimodal_v2/locales/es_LA.js +196 -0
- package/widget/multimodal_v2/locales/fi.js +196 -0
- package/widget/multimodal_v2/locales/fr.js +197 -0
- package/widget/multimodal_v2/locales/fr_CA.js +196 -0
- package/widget/multimodal_v2/locales/id.js +196 -0
- package/widget/multimodal_v2/locales/index.js +48 -0
- package/widget/multimodal_v2/locales/it.js +196 -0
- package/widget/multimodal_v2/locales/ja.js +196 -0
- package/widget/multimodal_v2/locales/ko.js +196 -0
- package/widget/multimodal_v2/locales/nb.js +196 -0
- package/widget/multimodal_v2/locales/nl.js +196 -0
- package/widget/multimodal_v2/locales/pl.js +196 -0
- package/widget/multimodal_v2/locales/pt_BR.js +196 -0
- package/widget/multimodal_v2/locales/ru.js +196 -0
- package/widget/multimodal_v2/locales/sv.js +196 -0
- package/widget/multimodal_v2/locales/th.js +196 -0
- package/widget/multimodal_v2/locales/tr.js +196 -0
- package/widget/multimodal_v2/locales/vi.js +196 -0
- package/widget/multimodal_v2/locales/zh_CN.js +196 -0
- package/widget/multimodal_v2/locales/zh_TW.js +196 -0
- package/widget/multimodal_v2/multimodal.js +633 -0
- package/widget/multimodal_v2/multimodal_channel.js +195 -0
- package/widget/multimodal_v2/signals/active_conversation_signal.js +33 -0
- package/widget/multimodal_v2/signals/allowed_conversation_mode_signal.js +38 -0
- package/widget/multimodal_v2/signals/artifact_signal.js +22 -0
- package/widget/multimodal_v2/signals/layout_signal.js +98 -0
- package/widget/multimodal_v2/signals/messages_signal.js +207 -0
- package/widget/multimodal_v2/signals/ui_state_signal.js +128 -0
- package/widget/multimodal_v2/stable_bundle_src.js +44 -0
- package/widget/multimodal_v2/stores/ai_conversation_store.js +221 -0
- package/widget/multimodal_v2/stores/artifact_store.js +205 -0
- package/widget/multimodal_v2/stores/base_store.js +16 -0
- package/widget/multimodal_v2/stores/call_store.js +770 -0
- package/widget/multimodal_v2/stores/call_ui_adapter.js +225 -0
- package/widget/multimodal_v2/stores/debug_multimodal_scenario_store.js +471 -0
- package/widget/multimodal_v2/stores/decks_store.js +285 -0
- package/widget/multimodal_v2/stores/device_store.js +63 -0
- package/widget/multimodal_v2/stores/docking_store.js +62 -0
- package/widget/multimodal_v2/stores/field_request_store.js +326 -0
- package/widget/multimodal_v2/stores/meeting_store.js +477 -0
- package/widget/multimodal_v2/stores/participant_store.js +73 -0
- package/widget/multimodal_v2/stores/post_call_survey_store.js +160 -0
- package/widget/multimodal_v2/stores/pounce_tracking_store.js +163 -0
- package/widget/multimodal_v2/stores/pounce_tracking_store_v2.js +511 -0
- package/widget/multimodal_v2/stores/presentations_store.js +111 -0
- package/widget/multimodal_v2/stores/root_store.js +1919 -0
- package/widget/multimodal_v2/stores/screen_share_store.js +217 -0
- package/widget/multimodal_v2/stores/slides_store.js +21 -0
- package/widget/multimodal_v2/stores/translation_store.js +185 -0
- package/widget/multimodal_v2/stores/ui_store.js +496 -0
- package/widget/multimodal_v2/stores/waiting_store.js +159 -0
- package/widget/multimodal_v2/stores/website_navigation_store.js +767 -0
- package/widget/multimodal_v2/styled-system/css/conditions.js +34 -0
- package/widget/multimodal_v2/styled-system/css/css.js +48 -0
- package/widget/multimodal_v2/styled-system/css/cva.js +96 -0
- package/widget/multimodal_v2/styled-system/css/cx.js +13 -0
- package/widget/multimodal_v2/styled-system/css/index.js +15 -0
- package/widget/multimodal_v2/styled-system/css/sva.js +69 -0
- package/widget/multimodal_v2/styled-system/helpers.js +384 -0
- package/widget/multimodal_v2/styled-system/jsx/create-style-context.js +96 -0
- package/widget/multimodal_v2/styled-system/jsx/factory-helper.js +19 -0
- package/widget/multimodal_v2/styled-system/jsx/factory.js +111 -0
- package/widget/multimodal_v2/styled-system/jsx/index.js +12 -0
- package/widget/multimodal_v2/styled-system/jsx/is-valid-prop.js +22 -0
- package/widget/multimodal_v2/types.js +105 -0
- package/widget/multimodal_v2/utils/auto_scroller.js +157 -0
- package/widget/multimodal_v2/utils/flip_animation.js +124 -0
- package/widget/multimodal_v2/utils/focus_gate.js +237 -0
- package/widget/multimodal_v2/utils/locale.js +16 -0
- package/widget/multimodal_v2/utils/media_queries.js +30 -0
- package/widget/multimodal_v2/utils/multimodal_cache.js +19 -0
- package/widget/multimodal_v2/utils/mutation_effect.js +14 -0
- package/widget/multimodal_v2/utils/navigation_interceptor.js +205 -0
- package/widget/multimodal_v2/utils/navigation_strategies/dom_swap.js +393 -0
- package/widget/multimodal_v2/utils/navigation_strategies/index.js +12 -0
- package/widget/multimodal_v2/utils/navigation_strategies/lwr.js +61 -0
- package/widget/multimodal_v2/utils/navigation_strategies/navigation_utils.js +46 -0
- package/widget/multimodal_v2/utils/navigation_strategies/next_js.js +24 -0
- package/widget/multimodal_v2/utils/navigation_strategies/wouter_v3.js +15 -0
- package/widget/multimodal_v2/utils/objects_map.js +38 -0
- package/widget/multimodal_v2/utils/perceived_voice_turn_tracker.js +345 -0
- package/widget/multimodal_v2/utils/sanitize_html.js +132 -0
- package/widget/multimodal_v2/utils/signals.js +97 -0
- package/widget/multimodal_v2/utils/slide_zoom.js +114 -0
- package/widget/multimodal_v2/utils/theme_styles.js +137 -0
- package/widget/multimodal_v2/utils/url_observer.js +52 -0
- package/widget/multimodal_v2/utils/voice_onset_detector.js +127 -0
- package/widget/page_mirror.js +89 -0
- package/widget/page_view_activity_emitter.js +71 -0
- package/widget/pardot_visitor.js +137 -0
- package/widget/personalization_observer.js +96 -0
- package/widget/personalizations_config.js +160 -0
- package/widget/qualified_form/constants.js +23 -0
- package/widget/qualified_form/phone_utils.js +38 -0
- package/widget/qualified_form/qualified_form_action.js +91 -0
- package/widget/qualified_form/qualified_form_action_orchestrator.js +21 -0
- package/widget/qualified_form/qualified_form_api.js +471 -0
- package/widget/scroll_disabler.js +109 -0
- package/widget/server-logger.js +156 -0
- package/widget/smart_website_config.js +112 -0
- package/widget/telemetry/context.js +75 -0
- package/widget/telemetry/index.js +16 -0
- package/widget/telemetry/messenger_uptime.js +80 -0
- package/widget/telemetry/metrics.js +120 -0
- package/widget/telemetry/span.js +82 -0
- package/widget/telemetry/telemetry.js +180 -0
- package/widget/telemetry/tracer.js +41 -0
- package/widget/telemetry/tracing_store.js +310 -0
- package/widget/tracker.js +916 -0
- package/widget/utils/native_globals.js +129 -0
- package/widget/v1_adapter.js +50 -0
- package/widget/v2_adapter.js +368 -0
- package/widget/visitor/base_visitor_state.js +11 -0
- package/widget/visitor/cookie_visitor_state.js +128 -0
- package/widget/visitor/in_memory_visitor_state.js +29 -0
- package/widget/visitor/visitor_state.js +384 -0
- package/widget/visitor.js +356 -0
- package/widget/widget/linked_widget_v2.js +227 -0
- package/widget/widget/page_mirror_factory.js +22 -0
- package/widget/widget/sentry.js +130 -0
- package/widget/widget/widget.js +1698 -0
- package/widget/widget.split-css.js +2 -0
- package/widget/widget_bootstrap.js +97 -0
- 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 };
|