@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,225 @@
|
|
|
1
|
+
import { signals_core_module_w } from "../../../js/multimodal_v2.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates a real call UI adapter that uses CallStore/DeviceStore/TavusStore.
|
|
6
|
+
*
|
|
7
|
+
* All state is derived via computed signals that react to store changes.
|
|
8
|
+
* The callStore is lazily loaded, so computeds handle the null case with defaults.
|
|
9
|
+
*/ function createRealCallUiAdapter(rootStore) {
|
|
10
|
+
// Computed signals for stores - these automatically update when callStore loads
|
|
11
|
+
const callStore = signals_core_module_w(()=>rootStore.callStore.value);
|
|
12
|
+
const deviceStore = signals_core_module_w(()=>{
|
|
13
|
+
var _ref;
|
|
14
|
+
var _callStore_value;
|
|
15
|
+
return (_ref = (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.deviceStore) != null ? _ref : null;
|
|
16
|
+
});
|
|
17
|
+
// State signals derived from stores (with safe defaults when stores aren't loaded)
|
|
18
|
+
const isInCall = signals_core_module_w(()=>{
|
|
19
|
+
var _callStore_value;
|
|
20
|
+
return ((_callStore_value = callStore.value) == null ? void 0 : _callStore_value.dailyCall.value) != null;
|
|
21
|
+
});
|
|
22
|
+
const isVideoLoading = signals_core_module_w(()=>rootStore.isVideoLoading.value);
|
|
23
|
+
const isBlurredVideoActive = signals_core_module_w(()=>rootStore.isBlurredVideoActive.value);
|
|
24
|
+
const isReconnecting = signals_core_module_w(()=>{
|
|
25
|
+
var _ref;
|
|
26
|
+
var _callStore_value;
|
|
27
|
+
return (_ref = (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.isReconnecting.value) != null ? _ref : false;
|
|
28
|
+
});
|
|
29
|
+
const isSilentRestart = signals_core_module_w(()=>{
|
|
30
|
+
var _ref;
|
|
31
|
+
var _callStore_value;
|
|
32
|
+
return (_ref = (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.isSilentRestart.value) != null ? _ref : false;
|
|
33
|
+
});
|
|
34
|
+
const isAudioConnected = signals_core_module_w(()=>{
|
|
35
|
+
var _ref;
|
|
36
|
+
var _callStore_value;
|
|
37
|
+
return (_ref = (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.isCoffeeAudioReady.value) != null ? _ref : false;
|
|
38
|
+
});
|
|
39
|
+
const showConnecting = signals_core_module_w(()=>isInCall.value && !isAudioConnected.value);
|
|
40
|
+
const showMicControls = signals_core_module_w(()=>isInCall.value ? isAudioConnected.value : true);
|
|
41
|
+
const isMicMuted = signals_core_module_w(()=>{
|
|
42
|
+
var _ref;
|
|
43
|
+
var _deviceStore_value;
|
|
44
|
+
return (_ref = (_deviceStore_value = deviceStore.value) == null ? void 0 : _deviceStore_value.isMicMuted.value) != null ? _ref : false;
|
|
45
|
+
});
|
|
46
|
+
const microphoneDevices = signals_core_module_w(()=>{
|
|
47
|
+
var _deviceStore_value;
|
|
48
|
+
const devices = (_deviceStore_value = deviceStore.value) == null ? void 0 : _deviceStore_value.microphoneDevices.value;
|
|
49
|
+
return devices != null ? devices : [];
|
|
50
|
+
});
|
|
51
|
+
const noMicrophonesAvailable = signals_core_module_w(()=>microphoneDevices.value.length === 0);
|
|
52
|
+
const selectedMicId = signals_core_module_w(()=>{
|
|
53
|
+
var _deviceStore_value;
|
|
54
|
+
const selected = (_deviceStore_value = deviceStore.value) == null ? void 0 : _deviceStore_value.selectedMicrophoneDevice.value;
|
|
55
|
+
return selected && "deviceId" in selected ? selected.deviceId : null;
|
|
56
|
+
});
|
|
57
|
+
const conversationMode = signals_core_module_w(()=>rootStore.conversationMode.value);
|
|
58
|
+
const displayMode = signals_core_module_w(()=>rootStore.displayMode.value);
|
|
59
|
+
const alreadyInCall = signals_core_module_w(()=>{
|
|
60
|
+
var _ref;
|
|
61
|
+
var _callStore_value;
|
|
62
|
+
return (_ref = (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.aiConversationStore.alreadyInCall.value) != null ? _ref : false;
|
|
63
|
+
});
|
|
64
|
+
const state = {
|
|
65
|
+
isInCall,
|
|
66
|
+
isVideoLoading,
|
|
67
|
+
isBlurredVideoActive,
|
|
68
|
+
isReconnecting,
|
|
69
|
+
isSilentRestart,
|
|
70
|
+
isAudioConnected,
|
|
71
|
+
showConnecting,
|
|
72
|
+
showMicControls,
|
|
73
|
+
isMicMuted,
|
|
74
|
+
noMicrophonesAvailable,
|
|
75
|
+
microphoneDevices,
|
|
76
|
+
selectedMicId,
|
|
77
|
+
conversationMode,
|
|
78
|
+
displayMode,
|
|
79
|
+
alreadyInCall
|
|
80
|
+
};
|
|
81
|
+
// Actions delegate to the appropriate store (no-ops if store not loaded)
|
|
82
|
+
const actions = {
|
|
83
|
+
toggleMic: ()=>{
|
|
84
|
+
var _deviceStore_value;
|
|
85
|
+
return (_deviceStore_value = deviceStore.value) == null ? void 0 : _deviceStore_value.toggleMic();
|
|
86
|
+
},
|
|
87
|
+
endCall: ()=>{
|
|
88
|
+
var _callStore_value;
|
|
89
|
+
return (_callStore_value = callStore.value) == null ? void 0 : _callStore_value.aiConversationStore.endConversation();
|
|
90
|
+
},
|
|
91
|
+
selectMic: (deviceId)=>{
|
|
92
|
+
var _deviceStore_value;
|
|
93
|
+
return (_deviceStore_value = deviceStore.value) == null ? void 0 : _deviceStore_value.updateSelectedMic(deviceId);
|
|
94
|
+
},
|
|
95
|
+
toggleVideoMode: (mode)=>rootStore.toggleVideoMode(mode),
|
|
96
|
+
startCall: (startCallContext, displayState)=>{
|
|
97
|
+
var _rootStore_postCallSurveyStore_value;
|
|
98
|
+
const currentlyInCall = state.isInCall.value;
|
|
99
|
+
const currentlyConnecting = state.isVideoLoading.value;
|
|
100
|
+
if (currentlyInCall || currentlyConnecting) return;
|
|
101
|
+
(_rootStore_postCallSurveyStore_value = rootStore.postCallSurveyStore.value) == null ? void 0 : _rootStore_postCallSurveyStore_value.dismiss();
|
|
102
|
+
rootStore.startCall(startCallContext, displayState);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
state,
|
|
107
|
+
actions,
|
|
108
|
+
isDebugMode: false
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Creates a debug call UI adapter that uses DebugMultimodalScenarioStore.
|
|
113
|
+
* All state comes from the scenario store - no real call/device stores involved.
|
|
114
|
+
*/ function createDebugCallUiAdapter(rootStore, scenarioStore) {
|
|
115
|
+
// State signals from scenario store (already computed signals)
|
|
116
|
+
const isInCall = signals_core_module_w(()=>scenarioStore.inCall.value);
|
|
117
|
+
const isVideoLoading = signals_core_module_w(()=>scenarioStore.videoLoading.value);
|
|
118
|
+
const isBlurredVideoActive = signals_core_module_w(()=>scenarioStore.inCall.value && !scenarioStore.preloadedVideoReady.value);
|
|
119
|
+
const isReconnecting = signals_core_module_w(()=>scenarioStore.isReconnecting.value);
|
|
120
|
+
const isSilentRestart = signals_core_module_w(()=>scenarioStore.isSilentRestart.value);
|
|
121
|
+
const isAudioConnected = signals_core_module_w(()=>scenarioStore.audioConnected.value);
|
|
122
|
+
const isMicMuted = signals_core_module_w(()=>scenarioStore.micMuted.value);
|
|
123
|
+
const microphoneDevices = signals_core_module_w(()=>scenarioStore.microphoneDevices.value);
|
|
124
|
+
const selectedMicId = signals_core_module_w(()=>scenarioStore.selectedMicId.value);
|
|
125
|
+
const conversationMode = signals_core_module_w(()=>scenarioStore.conversationMode.value);
|
|
126
|
+
const displayMode = signals_core_module_w(()=>rootStore.displayMode.value);
|
|
127
|
+
const state = {
|
|
128
|
+
isInCall,
|
|
129
|
+
isVideoLoading,
|
|
130
|
+
isBlurredVideoActive,
|
|
131
|
+
isReconnecting,
|
|
132
|
+
isSilentRestart,
|
|
133
|
+
isAudioConnected,
|
|
134
|
+
showConnecting: scenarioStore.showConnecting,
|
|
135
|
+
showMicControls: scenarioStore.showMicControls,
|
|
136
|
+
isMicMuted,
|
|
137
|
+
noMicrophonesAvailable: scenarioStore.noMicrophonesAvailable,
|
|
138
|
+
microphoneDevices,
|
|
139
|
+
selectedMicId,
|
|
140
|
+
conversationMode,
|
|
141
|
+
displayMode,
|
|
142
|
+
alreadyInCall: signals_core_module_w(()=>false)
|
|
143
|
+
};
|
|
144
|
+
const actions = {
|
|
145
|
+
toggleMic: ()=>scenarioStore.toggleMic(),
|
|
146
|
+
endCall: ()=>scenarioStore.endCall(),
|
|
147
|
+
selectMic: (deviceId)=>scenarioStore.selectMic(deviceId),
|
|
148
|
+
// Update both scenario store (for override) and rootStore (for actual state)
|
|
149
|
+
toggleVideoMode: (mode)=>{
|
|
150
|
+
scenarioStore.setConversationMode(mode);
|
|
151
|
+
rootStore.toggleVideoMode(mode);
|
|
152
|
+
},
|
|
153
|
+
startCall: ()=>scenarioStore.startCall()
|
|
154
|
+
};
|
|
155
|
+
return {
|
|
156
|
+
state,
|
|
157
|
+
actions,
|
|
158
|
+
isDebugMode: true
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get the appropriate CallUiAdapter for the current context.
|
|
163
|
+
*
|
|
164
|
+
* Debug mode is determined once at bootstrap by the `q_debug_multimodal` URL param.
|
|
165
|
+
* In debug mode, returns an adapter backed by DebugMultimodalScenarioStore.
|
|
166
|
+
* In normal mode, returns an adapter backed by the real CallStore/DeviceStore.
|
|
167
|
+
*/ function getCallUiAdapter(rootStore) {
|
|
168
|
+
const isDebug = rootStore.isDebugMultimodal.value;
|
|
169
|
+
const scenarioStore = rootStore.debugScenarioStore.value;
|
|
170
|
+
if (isDebug) {
|
|
171
|
+
if (scenarioStore) {
|
|
172
|
+
return createDebugCallUiAdapter(rootStore, scenarioStore);
|
|
173
|
+
}
|
|
174
|
+
// Debug mode is enabled but scenario store hasn't loaded yet.
|
|
175
|
+
// Trigger the load and return a "pending" adapter that won't start real calls.
|
|
176
|
+
rootStore.debugScenarioStore.load();
|
|
177
|
+
return createPendingDebugAdapter(rootStore);
|
|
178
|
+
}
|
|
179
|
+
return createRealCallUiAdapter(rootStore);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Creates a "pending" debug adapter used while the scenario store is loading.
|
|
183
|
+
* All actions are no-ops to prevent starting real calls before debug mode is fully initialized.
|
|
184
|
+
*/ function createPendingDebugAdapter(rootStore) {
|
|
185
|
+
const falseSignal = signals_core_module_w(()=>false);
|
|
186
|
+
const trueSignal = signals_core_module_w(()=>true);
|
|
187
|
+
const emptyArraySignal = signals_core_module_w(()=>[]);
|
|
188
|
+
const nullStringSignal = signals_core_module_w(()=>null);
|
|
189
|
+
const state = {
|
|
190
|
+
isInCall: falseSignal,
|
|
191
|
+
isVideoLoading: falseSignal,
|
|
192
|
+
isBlurredVideoActive: falseSignal,
|
|
193
|
+
isReconnecting: falseSignal,
|
|
194
|
+
isSilentRestart: falseSignal,
|
|
195
|
+
isAudioConnected: trueSignal,
|
|
196
|
+
showConnecting: falseSignal,
|
|
197
|
+
showMicControls: trueSignal,
|
|
198
|
+
isMicMuted: falseSignal,
|
|
199
|
+
noMicrophonesAvailable: falseSignal,
|
|
200
|
+
microphoneDevices: emptyArraySignal,
|
|
201
|
+
selectedMicId: nullStringSignal,
|
|
202
|
+
conversationMode: signals_core_module_w(()=>rootStore.conversationMode.value),
|
|
203
|
+
displayMode: signals_core_module_w(()=>rootStore.displayMode.value),
|
|
204
|
+
alreadyInCall: falseSignal
|
|
205
|
+
};
|
|
206
|
+
// No-op actions - prevent any real calls while loading
|
|
207
|
+
const noop = ()=>{};
|
|
208
|
+
const noopSelect = (_deviceId)=>{};
|
|
209
|
+
const actions = {
|
|
210
|
+
toggleMic: noop,
|
|
211
|
+
endCall: noop,
|
|
212
|
+
selectMic: noopSelect,
|
|
213
|
+
toggleVideoMode: noop,
|
|
214
|
+
startCall: noop
|
|
215
|
+
};
|
|
216
|
+
return {
|
|
217
|
+
state,
|
|
218
|
+
actions,
|
|
219
|
+
isDebugMode: true
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
var call_ui_adapter_createDebugCallUiAdapter = /* unused export */ undefined;
|
|
224
|
+
var call_ui_adapter_createRealCallUiAdapter = /* unused export */ undefined;
|
|
225
|
+
export { call_ui_adapter_createDebugCallUiAdapter as createDebugCallUiAdapter, call_ui_adapter_createRealCallUiAdapter as createRealCallUiAdapter, getCallUiAdapter };
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { signals_core_module_r, signals_core_module_d, signals_core_module_w } from "../../../js/multimodal_v2.js";
|
|
2
|
+
import { ConversationMode as types_ConversationMode } from "../types.js";
|
|
3
|
+
|
|
4
|
+
function _extends() {
|
|
5
|
+
_extends = Object.assign || function(target) {
|
|
6
|
+
for(var i = 1; i < arguments.length; i++){
|
|
7
|
+
var source = arguments[i];
|
|
8
|
+
for(var key in source){
|
|
9
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
10
|
+
target[key] = source[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
return _extends.apply(this, arguments);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const STORAGE_KEY = "q_debug_multimodal_scenario";
|
|
21
|
+
const DEFAULT_MIC_DEVICES = [
|
|
22
|
+
{
|
|
23
|
+
deviceId: "mic-1",
|
|
24
|
+
kind: "audioinput",
|
|
25
|
+
label: "Built-in Microphone",
|
|
26
|
+
groupId: "default",
|
|
27
|
+
toJSON: ()=>({
|
|
28
|
+
deviceId: "mic-1",
|
|
29
|
+
label: "Built-in Microphone",
|
|
30
|
+
groupId: "default"
|
|
31
|
+
})
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
deviceId: "mic-2",
|
|
35
|
+
kind: "audioinput",
|
|
36
|
+
label: "External USB Microphone",
|
|
37
|
+
groupId: "default",
|
|
38
|
+
toJSON: ()=>({
|
|
39
|
+
deviceId: "mic-2",
|
|
40
|
+
label: "External USB Microphone",
|
|
41
|
+
groupId: "default"
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
const DEFAULT_CAMERA_DEVICES = [
|
|
46
|
+
{
|
|
47
|
+
deviceId: "cam-1",
|
|
48
|
+
kind: "videoinput",
|
|
49
|
+
label: "Built-in Camera",
|
|
50
|
+
groupId: "default",
|
|
51
|
+
toJSON: ()=>({
|
|
52
|
+
deviceId: "cam-1",
|
|
53
|
+
label: "Built-in Camera",
|
|
54
|
+
groupId: "default"
|
|
55
|
+
})
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
deviceId: "cam-2",
|
|
59
|
+
kind: "videoinput",
|
|
60
|
+
label: "External Webcam",
|
|
61
|
+
groupId: "default",
|
|
62
|
+
toJSON: ()=>({
|
|
63
|
+
deviceId: "cam-2",
|
|
64
|
+
label: "External Webcam",
|
|
65
|
+
groupId: "default"
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Returns default (idle) scenario state.
|
|
71
|
+
* Note: conversationMode is NOT included to preserve query param settings.
|
|
72
|
+
* Note: videoOff defaults to true (camera off) to match real mode behavior
|
|
73
|
+
* where DeviceStore.isVideoOff starts as true.
|
|
74
|
+
*/ function getDefaultState() {
|
|
75
|
+
return {
|
|
76
|
+
inCall: false,
|
|
77
|
+
videoLoading: false,
|
|
78
|
+
preloadedVideoReady: true,
|
|
79
|
+
isReconnecting: false,
|
|
80
|
+
isSilentRestart: false,
|
|
81
|
+
audioConnected: true,
|
|
82
|
+
micMuted: false,
|
|
83
|
+
videoOff: true,
|
|
84
|
+
microphoneDevices: DEFAULT_MIC_DEVICES,
|
|
85
|
+
cameraDevices: DEFAULT_CAMERA_DEVICES,
|
|
86
|
+
selectedMicId: "mic-1",
|
|
87
|
+
selectedCameraId: "cam-1",
|
|
88
|
+
displayMode: null
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Preset configurations for common scenarios.
|
|
93
|
+
*/ const PRESETS = {
|
|
94
|
+
idle: getDefaultState(),
|
|
95
|
+
loading: {
|
|
96
|
+
inCall: false,
|
|
97
|
+
videoLoading: true,
|
|
98
|
+
preloadedVideoReady: false,
|
|
99
|
+
isReconnecting: false,
|
|
100
|
+
audioConnected: false
|
|
101
|
+
},
|
|
102
|
+
connectingAudio: {
|
|
103
|
+
inCall: true,
|
|
104
|
+
videoLoading: false,
|
|
105
|
+
preloadedVideoReady: true,
|
|
106
|
+
isReconnecting: false,
|
|
107
|
+
audioConnected: false
|
|
108
|
+
},
|
|
109
|
+
reconnecting: {
|
|
110
|
+
inCall: true,
|
|
111
|
+
videoLoading: false,
|
|
112
|
+
preloadedVideoReady: true,
|
|
113
|
+
isReconnecting: true,
|
|
114
|
+
audioConnected: true
|
|
115
|
+
},
|
|
116
|
+
inCall: {
|
|
117
|
+
inCall: true,
|
|
118
|
+
videoLoading: false,
|
|
119
|
+
preloadedVideoReady: true,
|
|
120
|
+
isReconnecting: false,
|
|
121
|
+
audioConnected: true,
|
|
122
|
+
micMuted: false
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
class DebugMultimodalScenarioStore {
|
|
126
|
+
/**
|
|
127
|
+
* Get current state as a serializable object.
|
|
128
|
+
*/ getState() {
|
|
129
|
+
return {
|
|
130
|
+
inCall: this.inCall.value,
|
|
131
|
+
videoLoading: this.videoLoading.value,
|
|
132
|
+
preloadedVideoReady: this.preloadedVideoReady.value,
|
|
133
|
+
isReconnecting: this.isReconnecting.value,
|
|
134
|
+
isSilentRestart: this.isSilentRestart.value,
|
|
135
|
+
audioConnected: this.audioConnected.value,
|
|
136
|
+
micMuted: this.micMuted.value,
|
|
137
|
+
videoOff: this.videoOff.value,
|
|
138
|
+
microphoneDevices: this.microphoneDevices.value,
|
|
139
|
+
cameraDevices: this.cameraDevices.value,
|
|
140
|
+
selectedMicId: this.selectedMicId.value,
|
|
141
|
+
selectedCameraId: this.selectedCameraId.value,
|
|
142
|
+
conversationMode: this.conversationMode.value,
|
|
143
|
+
displayMode: this.displayModeOverride.value
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Set state from a partial object.
|
|
148
|
+
*/ setState(state) {
|
|
149
|
+
signals_core_module_r(()=>{
|
|
150
|
+
if (state.inCall !== undefined) this.inCall.value = state.inCall;
|
|
151
|
+
if (state.videoLoading !== undefined) this.videoLoading.value = state.videoLoading;
|
|
152
|
+
if (state.preloadedVideoReady !== undefined) this.preloadedVideoReady.value = state.preloadedVideoReady;
|
|
153
|
+
if (state.isReconnecting !== undefined) this.isReconnecting.value = state.isReconnecting;
|
|
154
|
+
if (state.isSilentRestart !== undefined) this.isSilentRestart.value = state.isSilentRestart;
|
|
155
|
+
if (state.audioConnected !== undefined) this.audioConnected.value = state.audioConnected;
|
|
156
|
+
if (state.micMuted !== undefined) this.micMuted.value = state.micMuted;
|
|
157
|
+
if (state.videoOff !== undefined) this.videoOff.value = state.videoOff;
|
|
158
|
+
if (state.microphoneDevices !== undefined) this.microphoneDevices.value = state.microphoneDevices;
|
|
159
|
+
if (state.cameraDevices !== undefined) this.cameraDevices.value = state.cameraDevices;
|
|
160
|
+
if (state.selectedMicId !== undefined) this.selectedMicId.value = state.selectedMicId;
|
|
161
|
+
if (state.selectedCameraId !== undefined) this.selectedCameraId.value = state.selectedCameraId;
|
|
162
|
+
if (state.conversationMode !== undefined) this.conversationModeOverride.value = state.conversationMode;
|
|
163
|
+
if (state.displayMode !== undefined) this.displayModeOverride.value = state.displayMode;
|
|
164
|
+
this.syncToRootStore();
|
|
165
|
+
this.saveToStorage();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Apply a preset scenario.
|
|
170
|
+
* Sets camera state based on conversation mode (matches real mode behavior).
|
|
171
|
+
*/ applyPreset(preset) {
|
|
172
|
+
const presetState = PRESETS[preset];
|
|
173
|
+
signals_core_module_r(()=>{
|
|
174
|
+
// Reset to default first, then apply preset overrides
|
|
175
|
+
this.setState(_extends({}, getDefaultState(), presetState));
|
|
176
|
+
this.currentPreset.value = preset;
|
|
177
|
+
// Set camera state based on conversation mode (matches real mode behavior)
|
|
178
|
+
// In VOICE mode, camera should always be off
|
|
179
|
+
// In VIDEO mode, camera should be on when entering a call
|
|
180
|
+
const isVoiceMode = this.conversationMode.value === types_ConversationMode.VOICE;
|
|
181
|
+
if (preset === "inCall") {
|
|
182
|
+
this.videoOff.value = isVoiceMode;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Reset to idle state.
|
|
188
|
+
*/ reset() {
|
|
189
|
+
this.applyPreset("idle");
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Toggle microphone muted state.
|
|
193
|
+
*/ toggleMic() {
|
|
194
|
+
this.setState({
|
|
195
|
+
micMuted: !this.micMuted.value
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Toggle video off state.
|
|
200
|
+
*/ toggleVideo() {
|
|
201
|
+
this.setState({
|
|
202
|
+
videoOff: !this.videoOff.value
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Set audio connected state.
|
|
207
|
+
*/ setAudioConnected(connected) {
|
|
208
|
+
this.setState({
|
|
209
|
+
audioConnected: connected
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set in-call state.
|
|
214
|
+
*/ setInCall(inCall) {
|
|
215
|
+
this.setState({
|
|
216
|
+
inCall
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Set video loading state.
|
|
221
|
+
*/ setVideoLoading(loading) {
|
|
222
|
+
this.setState({
|
|
223
|
+
videoLoading: loading
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Set reconnecting state.
|
|
228
|
+
*/ setReconnecting(reconnecting) {
|
|
229
|
+
this.setState({
|
|
230
|
+
isReconnecting: reconnecting
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Set conversation mode.
|
|
235
|
+
* Handles camera state toggle to match real mode behavior (rootStore.toggleVideoMode).
|
|
236
|
+
*/ setConversationMode(mode) {
|
|
237
|
+
const previousMode = this.conversationMode.value;
|
|
238
|
+
const isVideoOff = this.videoOff.value;
|
|
239
|
+
signals_core_module_r(()=>{
|
|
240
|
+
this.setState({
|
|
241
|
+
conversationMode: mode
|
|
242
|
+
});
|
|
243
|
+
// Toggle camera based on mode (matches rootStore.toggleVideoMode behavior)
|
|
244
|
+
// When switching to VOICE and camera is on, turn it off
|
|
245
|
+
// When switching to VIDEO and camera is off, turn it on
|
|
246
|
+
if (mode !== previousMode) {
|
|
247
|
+
if (mode === types_ConversationMode.VOICE && !isVideoOff) {
|
|
248
|
+
this.videoOff.value = true;
|
|
249
|
+
} else if (mode === types_ConversationMode.VIDEO && isVideoOff) {
|
|
250
|
+
this.videoOff.value = false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Set display mode override.
|
|
257
|
+
*/ setDisplayMode(mode) {
|
|
258
|
+
this.setState({
|
|
259
|
+
displayMode: mode
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Select a microphone by device ID.
|
|
264
|
+
*/ selectMic(deviceId) {
|
|
265
|
+
this.setState({
|
|
266
|
+
selectedMicId: deviceId
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Select a camera by device ID.
|
|
271
|
+
*/ selectCamera(deviceId) {
|
|
272
|
+
this.setState({
|
|
273
|
+
selectedCameraId: deviceId
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* End the simulated call.
|
|
278
|
+
*/ endCall() {
|
|
279
|
+
signals_core_module_r(()=>{
|
|
280
|
+
// Reset call state without triggering applyPreset's display mode constraints
|
|
281
|
+
this.setState({
|
|
282
|
+
inCall: false,
|
|
283
|
+
videoLoading: false,
|
|
284
|
+
isReconnecting: false,
|
|
285
|
+
audioConnected: true
|
|
286
|
+
});
|
|
287
|
+
this.currentPreset.value = "idle";
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Start a simulated call (for "Speak now" button).
|
|
292
|
+
* Camera state will be set based on conversation mode when transitioning to inCall.
|
|
293
|
+
* Expands to opened display mode if currently minimized.
|
|
294
|
+
*/ startCall() {
|
|
295
|
+
signals_core_module_r(()=>{
|
|
296
|
+
this.applyPreset("loading");
|
|
297
|
+
// Expand to opened display mode if minimized
|
|
298
|
+
if (this.rootStore.displayMode.minimized.value) {
|
|
299
|
+
this.rootStore.setOpenedDisplayMode();
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Sync scenario state to rootStore signals where applicable.
|
|
305
|
+
* This ensures the UI components read the debug values.
|
|
306
|
+
*
|
|
307
|
+
* Note: conversationMode is NOT synced here because:
|
|
308
|
+
* 1. The debug adapter reads directly from the debug store's conversationMode
|
|
309
|
+
* 2. Syncing would override query params like ?conversation_mode=voice
|
|
310
|
+
*/ syncToRootStore() {
|
|
311
|
+
// Sync videoLoading and preloadedVideoReady to rootStore
|
|
312
|
+
this.rootStore.isVideoLoading.value = this.videoLoading.value;
|
|
313
|
+
// Sync display mode override if set
|
|
314
|
+
if (this.displayModeOverride.value !== null && this.displayModeOverride.value !== this.rootStore.displayMode.value) {
|
|
315
|
+
this.rootStore.setDisplayMode(this.displayModeOverride.value);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Persist current state to localStorage.
|
|
320
|
+
*/ saveToStorage() {
|
|
321
|
+
try {
|
|
322
|
+
const state = this.getState();
|
|
323
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
|
|
324
|
+
} catch (unused) {
|
|
325
|
+
// Silently fail if localStorage is not available
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Load persisted state from localStorage.
|
|
330
|
+
* Note: conversationMode is only restored if there's no query param specifying it.
|
|
331
|
+
*/ loadFromStorage() {
|
|
332
|
+
try {
|
|
333
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
334
|
+
if (stored) {
|
|
335
|
+
const state = JSON.parse(stored);
|
|
336
|
+
// Only skip restoring conversationMode if there's a query param specifying it
|
|
337
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
338
|
+
const hasConversationModeParam = urlParams.has("conversation_mode");
|
|
339
|
+
if (hasConversationModeParam) {
|
|
340
|
+
// Query param takes precedence - don't restore from localStorage
|
|
341
|
+
delete state.conversationMode;
|
|
342
|
+
}
|
|
343
|
+
this.setState(state);
|
|
344
|
+
// Detect which preset matches the restored state
|
|
345
|
+
this.currentPreset.value = this.detectCurrentPreset();
|
|
346
|
+
}
|
|
347
|
+
} catch (unused) {
|
|
348
|
+
// Silently fail if localStorage is not available or data is corrupt
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Detect which preset matches the current state (if any).
|
|
353
|
+
*/ detectCurrentPreset() {
|
|
354
|
+
const currentState = {
|
|
355
|
+
inCall: this.inCall.value,
|
|
356
|
+
videoLoading: this.videoLoading.value,
|
|
357
|
+
preloadedVideoReady: this.preloadedVideoReady.value,
|
|
358
|
+
isReconnecting: this.isReconnecting.value,
|
|
359
|
+
audioConnected: this.audioConnected.value
|
|
360
|
+
};
|
|
361
|
+
// Check each preset to see if it matches the current state
|
|
362
|
+
// Order matters - check more specific presets first
|
|
363
|
+
if (currentState.inCall && !currentState.videoLoading && currentState.isReconnecting) {
|
|
364
|
+
return "reconnecting";
|
|
365
|
+
}
|
|
366
|
+
if (currentState.inCall && !currentState.videoLoading && !currentState.audioConnected) {
|
|
367
|
+
return "connectingAudio";
|
|
368
|
+
}
|
|
369
|
+
if (currentState.inCall && !currentState.videoLoading && currentState.preloadedVideoReady && currentState.audioConnected && !currentState.isReconnecting) {
|
|
370
|
+
return "inCall";
|
|
371
|
+
}
|
|
372
|
+
if (!currentState.inCall && currentState.videoLoading && !currentState.preloadedVideoReady) {
|
|
373
|
+
return "loading";
|
|
374
|
+
}
|
|
375
|
+
if (!currentState.inCall && !currentState.videoLoading && currentState.preloadedVideoReady && !currentState.isReconnecting) {
|
|
376
|
+
return "idle";
|
|
377
|
+
}
|
|
378
|
+
// No matching preset
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Clear persisted state from localStorage.
|
|
383
|
+
*/ clearStorage() {
|
|
384
|
+
try {
|
|
385
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
386
|
+
} catch (unused) {
|
|
387
|
+
// Silently fail
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
constructor(rootStore){
|
|
391
|
+
this.rootStore = rootStore;
|
|
392
|
+
// Individual signals for each piece of scenario state
|
|
393
|
+
this.inCall = signals_core_module_d(false);
|
|
394
|
+
this.videoLoading = signals_core_module_d(false);
|
|
395
|
+
this.preloadedVideoReady = signals_core_module_d(true);
|
|
396
|
+
this.isReconnecting = signals_core_module_d(false);
|
|
397
|
+
this.isSilentRestart = signals_core_module_d(false);
|
|
398
|
+
this.audioConnected = signals_core_module_d(true);
|
|
399
|
+
this.micMuted = signals_core_module_d(false);
|
|
400
|
+
this.videoOff = signals_core_module_d(true); // Camera off by default, matches real mode (DeviceStore.isVideoOff = true)
|
|
401
|
+
this.microphoneDevices = signals_core_module_d(DEFAULT_MIC_DEVICES);
|
|
402
|
+
this.cameraDevices = signals_core_module_d(DEFAULT_CAMERA_DEVICES);
|
|
403
|
+
this.selectedMicId = signals_core_module_d("mic-1");
|
|
404
|
+
this.selectedCameraId = signals_core_module_d("cam-1");
|
|
405
|
+
// Optional override for conversation mode - when null, reads from rootStore
|
|
406
|
+
this.conversationModeOverride = signals_core_module_d(null);
|
|
407
|
+
this.displayModeOverride = signals_core_module_d(null);
|
|
408
|
+
/**
|
|
409
|
+
* Conversation mode - reads from rootStore by default, uses override if explicitly set.
|
|
410
|
+
* This ensures query params like ?conversation_mode=voice are respected.
|
|
411
|
+
*/ this.conversationMode = signals_core_module_w(()=>{
|
|
412
|
+
const override = this.conversationModeOverride.value;
|
|
413
|
+
if (override !== null) {
|
|
414
|
+
return override;
|
|
415
|
+
}
|
|
416
|
+
return this.rootStore.conversationMode.value;
|
|
417
|
+
});
|
|
418
|
+
/**
|
|
419
|
+
* Current preset name (if any). Computed from state.
|
|
420
|
+
*/ this.currentPreset = signals_core_module_d(null);
|
|
421
|
+
/**
|
|
422
|
+
* Whether debug mode is enabled (derived from rootStore).
|
|
423
|
+
*/ this.enabled = signals_core_module_w(()=>this.rootStore.isDebugMultimodal.value);
|
|
424
|
+
/**
|
|
425
|
+
* Derived: whether there are no microphones available.
|
|
426
|
+
*/ this.noMicrophonesAvailable = signals_core_module_w(()=>this.microphoneDevices.value.length === 0);
|
|
427
|
+
/**
|
|
428
|
+
* Derived: whether there are no cameras available.
|
|
429
|
+
*/ this.noCamerasAvailable = signals_core_module_w(()=>this.cameraDevices.value.length === 0);
|
|
430
|
+
/**
|
|
431
|
+
* Derived: show "Connecting audio..." message.
|
|
432
|
+
*/ this.showConnecting = signals_core_module_w(()=>this.inCall.value && !this.audioConnected.value);
|
|
433
|
+
/**
|
|
434
|
+
* Derived: show mic controls (hide while connecting audio).
|
|
435
|
+
*/ this.showMicControls = signals_core_module_w(()=>this.inCall.value ? this.audioConnected.value : true);
|
|
436
|
+
// Load persisted state on construction
|
|
437
|
+
this.loadFromStorage();
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Store for managing debug multimodal scenario state.
|
|
442
|
+
* Only active when `?q_debug_multimodal=1` is in the URL.
|
|
443
|
+
* Persists state to localStorage so you can refresh while iterating.
|
|
444
|
+
*/
|
|
445
|
+
/**
|
|
446
|
+
* List of available presets for UI dropdown.
|
|
447
|
+
*/ const SCENARIO_PRESET_OPTIONS = [
|
|
448
|
+
{
|
|
449
|
+
value: "idle",
|
|
450
|
+
label: "Idle (not in call)"
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
value: "loading",
|
|
454
|
+
label: "Loading / Connecting"
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
value: "connectingAudio",
|
|
458
|
+
label: "Connecting audio"
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
value: "reconnecting",
|
|
462
|
+
label: "Weak connection / Reconnecting"
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
value: "inCall",
|
|
466
|
+
label: "In Call"
|
|
467
|
+
}
|
|
468
|
+
];
|
|
469
|
+
|
|
470
|
+
export { SCENARIO_PRESET_OPTIONS };
|
|
471
|
+
export default DebugMultimodalScenarioStore;
|