@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,328 @@
|
|
|
1
|
+
import { toIntlLocale } from "../../utils/locale.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
function getDefaultTimeZone() {
|
|
5
|
+
return new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Format time according to locale conventions.
|
|
9
|
+
* Uses Intl.DateTimeFormat to respect each locale's native time format:
|
|
10
|
+
* - en-US: 12-hour with AM/PM (e.g., "3:00 PM")
|
|
11
|
+
* - fr-FR: 24-hour (e.g., "15:00")
|
|
12
|
+
* - fr-CA: 24-hour with "h" (e.g., "15 h 00")
|
|
13
|
+
* - zh-CN: 12-hour with Chinese AM/PM (e.g., "下午3:00")
|
|
14
|
+
* - ja-JP: 24-hour (e.g., "15:00")
|
|
15
|
+
* - etc.
|
|
16
|
+
*/ function formatTime(iso, tz, locale) {
|
|
17
|
+
const date = new Date(iso);
|
|
18
|
+
const intlLocale = toIntlLocale(locale);
|
|
19
|
+
try {
|
|
20
|
+
return new Intl.DateTimeFormat(intlLocale, {
|
|
21
|
+
timeZone: tz || undefined,
|
|
22
|
+
hour: "numeric",
|
|
23
|
+
minute: "2-digit",
|
|
24
|
+
timeZoneName: "short"
|
|
25
|
+
}).format(date);
|
|
26
|
+
} catch (unused) {
|
|
27
|
+
return date.toLocaleString();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format time without timezone name.
|
|
32
|
+
* Uses Intl.DateTimeFormat to respect each locale's native time format.
|
|
33
|
+
*/ function formatTimeShort(iso, tz, locale) {
|
|
34
|
+
const d = new Date(iso);
|
|
35
|
+
const intlLocale = toIntlLocale(locale);
|
|
36
|
+
try {
|
|
37
|
+
return d.toLocaleTimeString(intlLocale, {
|
|
38
|
+
hour: "numeric",
|
|
39
|
+
minute: "2-digit",
|
|
40
|
+
timeZone: tz || undefined
|
|
41
|
+
});
|
|
42
|
+
} catch (unused) {
|
|
43
|
+
return d.toLocaleTimeString();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function formatMonthTitle(dateKey, locale) {
|
|
47
|
+
const [y, m, d] = dateKey.split("-").map((n)=>parseInt(n, 10));
|
|
48
|
+
const date = new Date(y, m - 1, d);
|
|
49
|
+
const intlLocale = toIntlLocale(locale);
|
|
50
|
+
return new Intl.DateTimeFormat(intlLocale, {
|
|
51
|
+
month: "long",
|
|
52
|
+
year: "numeric"
|
|
53
|
+
}).format(date);
|
|
54
|
+
}
|
|
55
|
+
function formatDate(iso, tz, locale) {
|
|
56
|
+
var _parts_find;
|
|
57
|
+
const d = new Date(iso);
|
|
58
|
+
const intlLocale = toIntlLocale(locale);
|
|
59
|
+
const opts = {
|
|
60
|
+
weekday: "long",
|
|
61
|
+
month: "long",
|
|
62
|
+
day: "numeric",
|
|
63
|
+
year: "numeric",
|
|
64
|
+
timeZone: tz || undefined
|
|
65
|
+
};
|
|
66
|
+
const parts = new Intl.DateTimeFormat(intlLocale, opts).formatToParts(d);
|
|
67
|
+
const dayNum = Number(((_parts_find = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find.value) || d.getDate());
|
|
68
|
+
// Only add ordinal suffix for English locales
|
|
69
|
+
const isEnglish = intlLocale.startsWith("en");
|
|
70
|
+
const withOrdinal = parts.map((p)=>p.type === "day" && isEnglish ? "" + dayNum + ordinal(dayNum) : p.value).join("");
|
|
71
|
+
return withOrdinal;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* "Thu, Jul 30" — the summary rail's restatement of the chosen day, which sits in a
|
|
75
|
+
* 264px column and has to stay on one line beside its icon. `formatDate` above spells
|
|
76
|
+
* the weekday, month and year out in full for the details card, which has the width.
|
|
77
|
+
*/ function formatDateCompact(iso, tz, locale) {
|
|
78
|
+
const date = new Date(iso);
|
|
79
|
+
const intlLocale = toIntlLocale(locale);
|
|
80
|
+
try {
|
|
81
|
+
return new Intl.DateTimeFormat(intlLocale, {
|
|
82
|
+
timeZone: tz || undefined,
|
|
83
|
+
weekday: "short",
|
|
84
|
+
month: "short",
|
|
85
|
+
day: "numeric"
|
|
86
|
+
}).format(date);
|
|
87
|
+
} catch (unused) {
|
|
88
|
+
return date.toLocaleDateString();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function formatDayShort(date, locale) {
|
|
92
|
+
const intlLocale = toIntlLocale(locale);
|
|
93
|
+
return date.toLocaleDateString(intlLocale, {
|
|
94
|
+
weekday: "short"
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function ordinal(n) {
|
|
98
|
+
const s = [
|
|
99
|
+
"th",
|
|
100
|
+
"st",
|
|
101
|
+
"nd",
|
|
102
|
+
"rd"
|
|
103
|
+
];
|
|
104
|
+
const v = n % 100;
|
|
105
|
+
return s[(v - 20) % 10] || s[v] || s[0];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Returns the first Sunday of the week containing the given date
|
|
109
|
+
* @param isoTimestamp - ISO 8601 timestamp string
|
|
110
|
+
* @param timeZone - IANA timeZone identifier (e.g., 'America/New_York')
|
|
111
|
+
* @returns The Date object for the first Sunday of that week
|
|
112
|
+
*/ function getFirstSundayOfWeek(isoTimestamp, timeZone) {
|
|
113
|
+
var _parts_find, _parts_find1, _parts_find2;
|
|
114
|
+
// Create a date in the target timeZone
|
|
115
|
+
const date = new Date(isoTimestamp);
|
|
116
|
+
// Get the date components in the target timeZone (en-US format for consistency)
|
|
117
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
118
|
+
timeZone,
|
|
119
|
+
year: "numeric",
|
|
120
|
+
month: "2-digit",
|
|
121
|
+
day: "2-digit"
|
|
122
|
+
});
|
|
123
|
+
const parts = formatter.formatToParts(date);
|
|
124
|
+
const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
|
|
125
|
+
const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
|
|
126
|
+
const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
|
|
127
|
+
// Create a date object for the day in the target timeZone at midnight
|
|
128
|
+
const localDate = new Date(year + "-" + month + "-" + day + "T00:00:00");
|
|
129
|
+
// Get the day of the week (0 = Sunday)
|
|
130
|
+
const dayOfWeek = localDate.getDay();
|
|
131
|
+
// Calculate the Sunday of that week
|
|
132
|
+
const sunday = new Date(localDate);
|
|
133
|
+
sunday.setDate(localDate.getDate() - dayOfWeek);
|
|
134
|
+
return sunday;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Binary search to find the first slot on or after the target date
|
|
138
|
+
* @param slots - Sorted array of slots
|
|
139
|
+
* @param targetDate - Target date to search for
|
|
140
|
+
* @returns Index of the first slot >= targetDate, or slots.length if none found
|
|
141
|
+
*/ function findFirstSlotIndexFrom(slots, targetDate) {
|
|
142
|
+
let left = 0;
|
|
143
|
+
let right = slots.length;
|
|
144
|
+
while(left < right){
|
|
145
|
+
const mid = Math.floor((left + right) / 2);
|
|
146
|
+
const slotDate = new Date(slots[mid].startsAt);
|
|
147
|
+
if (slotDate >= targetDate) {
|
|
148
|
+
right = mid;
|
|
149
|
+
} else {
|
|
150
|
+
left = mid + 1;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return left;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Builds an array of calendar days for the week containing the given time slot
|
|
157
|
+
* @param slot - Calendar event time slot with startsAt ISO timestamp
|
|
158
|
+
* @param timeZone - IANA timeZone identifier
|
|
159
|
+
* @param slots - SORTED array of all calendar event time slots
|
|
160
|
+
* @param locale - Optional locale for day name formatting
|
|
161
|
+
* @returns Array of calendar days with abbreviated day names, date values, and slots for each day
|
|
162
|
+
*/ function buildCalendarDays(slot, timeZone, slots, locale) {
|
|
163
|
+
const firstSunday = getFirstSundayOfWeek(slot.startsAt, timeZone);
|
|
164
|
+
// First, create calendar days with empty slots
|
|
165
|
+
const days = [];
|
|
166
|
+
for(let i = 0; i < 7; i++){
|
|
167
|
+
const currentDate = new Date(firstSunday);
|
|
168
|
+
currentDate.setDate(firstSunday.getDate() + i);
|
|
169
|
+
days.push({
|
|
170
|
+
day: formatDayShort(currentDate, locale),
|
|
171
|
+
value: currentDate.getDate(),
|
|
172
|
+
slots: [],
|
|
173
|
+
isSelected: false,
|
|
174
|
+
isDisabled: false
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
// Use binary search to find the first slot in this week
|
|
178
|
+
const startIndex = findFirstSlotIndexFrom(slots, firstSunday);
|
|
179
|
+
if (startIndex >= slots.length) {
|
|
180
|
+
return days;
|
|
181
|
+
}
|
|
182
|
+
const weekEnd = new Date(firstSunday);
|
|
183
|
+
weekEnd.setDate(firstSunday.getDate() + 7); // Start of next week
|
|
184
|
+
// Now iterate through slots starting from startIndex until we go past the week
|
|
185
|
+
let currentDayIndex = 0;
|
|
186
|
+
const nextDayStart = new Date(firstSunday);
|
|
187
|
+
nextDayStart.setDate(firstSunday.getDate() + 1); // Monday
|
|
188
|
+
for(let slotIndex = startIndex; slotIndex < slots.length; slotIndex++){
|
|
189
|
+
const slotDate = new Date(slots[slotIndex].startsAt);
|
|
190
|
+
// Stop if we've gone past this week
|
|
191
|
+
if (slotDate >= weekEnd) {
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
// Move to next day if current slot is on or after the next day
|
|
195
|
+
while(currentDayIndex < 6 && slotDate >= nextDayStart){
|
|
196
|
+
currentDayIndex++;
|
|
197
|
+
nextDayStart.setDate(nextDayStart.getDate() + 1);
|
|
198
|
+
}
|
|
199
|
+
// Add slot to the current day
|
|
200
|
+
days[currentDayIndex].slots.push(slots[slotIndex]);
|
|
201
|
+
}
|
|
202
|
+
for (const day of days){
|
|
203
|
+
day.isDisabled = day.slots.length === 0;
|
|
204
|
+
day.isSelected = new Date(slot.startsAt).getDate() === day.value;
|
|
205
|
+
}
|
|
206
|
+
return days;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Finds all timeslots on the same day as the given timeslot
|
|
210
|
+
* @param targetSlot - The reference timeslot
|
|
211
|
+
* @param sortedSlots - SORTED array of all timeslots
|
|
212
|
+
* @param timeZone - IANA timeZone identifier for day comparison
|
|
213
|
+
* @returns Array of all slots that fall on the same day as targetSlot
|
|
214
|
+
*/ function getSameDaySlots(targetSlot, sortedSlots, timeZone) {
|
|
215
|
+
var _parts_find, _parts_find1, _parts_find2;
|
|
216
|
+
const targetDate = new Date(targetSlot.startsAt);
|
|
217
|
+
// Get the start of the day in the target timeZone (YYYY-MM-DD format)
|
|
218
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
219
|
+
timeZone,
|
|
220
|
+
year: "numeric",
|
|
221
|
+
month: "2-digit",
|
|
222
|
+
day: "2-digit"
|
|
223
|
+
});
|
|
224
|
+
const parts = formatter.formatToParts(targetDate);
|
|
225
|
+
const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
|
|
226
|
+
const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
|
|
227
|
+
const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
|
|
228
|
+
const dayStart = new Date(year + "-" + month + "-" + day + "T00:00:00");
|
|
229
|
+
// Get the start of the next day
|
|
230
|
+
const nextDayStart = new Date(dayStart);
|
|
231
|
+
nextDayStart.setDate(dayStart.getDate() + 1);
|
|
232
|
+
// Find the first slot on this day
|
|
233
|
+
const startIndex = findFirstSlotIndexFrom(sortedSlots, dayStart);
|
|
234
|
+
if (startIndex >= sortedSlots.length) {
|
|
235
|
+
return []; // No slots found on or after this day
|
|
236
|
+
}
|
|
237
|
+
// Collect all slots on this day
|
|
238
|
+
const sameDaySlots = [];
|
|
239
|
+
for(let i = startIndex; i < sortedSlots.length; i++){
|
|
240
|
+
const slotDate = new Date(sortedSlots[i].startsAt);
|
|
241
|
+
// Stop when we reach the next day
|
|
242
|
+
if (slotDate >= nextDayStart) {
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
sameDaySlots.push(sortedSlots[i]);
|
|
246
|
+
}
|
|
247
|
+
return sameDaySlots;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Returns a Set of all unique days (as Date objects) that contain slots
|
|
251
|
+
* @param slots - Array of timeslots
|
|
252
|
+
* @param timezone - IANA timezone identifier
|
|
253
|
+
* @returns Set of Date objects representing days with slots (each date is set to midnight in the timezone)
|
|
254
|
+
*/ function getDaysWithSlots(slots, timeZone) {
|
|
255
|
+
const daysSet = new Set();
|
|
256
|
+
let lastDateString = "";
|
|
257
|
+
for (const slot of slots){
|
|
258
|
+
var _parts_find, _parts_find1, _parts_find2;
|
|
259
|
+
const slotDate = new Date(slot.startsAt);
|
|
260
|
+
// Get the date string in the target timezone (YYYY-MM-DD format)
|
|
261
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
262
|
+
timeZone,
|
|
263
|
+
year: "numeric",
|
|
264
|
+
month: "2-digit",
|
|
265
|
+
day: "2-digit"
|
|
266
|
+
});
|
|
267
|
+
const parts = formatter.formatToParts(slotDate);
|
|
268
|
+
const year = (_parts_find = parts.find((p)=>p.type === "year")) == null ? void 0 : _parts_find.value;
|
|
269
|
+
const month = (_parts_find1 = parts.find((p)=>p.type === "month")) == null ? void 0 : _parts_find1.value;
|
|
270
|
+
const day = (_parts_find2 = parts.find((p)=>p.type === "day")) == null ? void 0 : _parts_find2.value;
|
|
271
|
+
const dateString = year + "-" + month + "-" + day;
|
|
272
|
+
// Only create a new Date object if this is a different day than the last one
|
|
273
|
+
if (dateString !== lastDateString) {
|
|
274
|
+
// Create a Date object for midnight of this day
|
|
275
|
+
daysSet.add(new Date("" + dateString + "T00:00:00"));
|
|
276
|
+
lastDateString = dateString;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return daysSet;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Finds the first slot in the week AFTER the week containing the given slot
|
|
283
|
+
* @param targetSlot - The reference slot
|
|
284
|
+
* @param sortedSlots - SORTED array of all slots
|
|
285
|
+
* @param timeZone - IANA timeZone identifier used to compute week boundaries
|
|
286
|
+
* @returns The first slot in the next week, or null if none found
|
|
287
|
+
*/ function getNextSlotAfterWeek(targetSlot, sortedSlots, timeZone) {
|
|
288
|
+
// Start of the current week (Sunday) in the target timeZone
|
|
289
|
+
const currentWeekSunday = getFirstSundayOfWeek(targetSlot.startsAt, timeZone);
|
|
290
|
+
// Start of the next week and its end
|
|
291
|
+
const nextWeekStart = new Date(currentWeekSunday);
|
|
292
|
+
nextWeekStart.setDate(currentWeekSunday.getDate() + 7);
|
|
293
|
+
const nextWeekEnd = new Date(nextWeekStart);
|
|
294
|
+
nextWeekEnd.setDate(nextWeekStart.getDate() + 7);
|
|
295
|
+
// Find first slot on or after the start of next week
|
|
296
|
+
const index = findFirstSlotIndexFrom(sortedSlots, nextWeekStart);
|
|
297
|
+
if (index >= sortedSlots.length) return null;
|
|
298
|
+
const candidate = sortedSlots[index];
|
|
299
|
+
const candidateDate = new Date(candidate.startsAt);
|
|
300
|
+
// Ensure the candidate lies within the next week
|
|
301
|
+
return candidateDate < nextWeekEnd ? candidate : null;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Finds the first slot in the week BEFORE the week containing the given slot
|
|
305
|
+
* @param targetSlot - The reference slot
|
|
306
|
+
* @param sortedSlots - SORTED array of all slots
|
|
307
|
+
* @param timeZone - IANA timeZone identifier used to compute week boundaries
|
|
308
|
+
* @returns The first slot in the previous week, or null if none found
|
|
309
|
+
*/ function getPrevSlotBeforeWeek(targetSlot, sortedSlots, timeZone) {
|
|
310
|
+
// Start of the current week (Sunday) in the target timeZone
|
|
311
|
+
const currentWeekSunday = getFirstSundayOfWeek(targetSlot.startsAt, timeZone);
|
|
312
|
+
// Previous week boundaries
|
|
313
|
+
const prevWeekStart = new Date(currentWeekSunday);
|
|
314
|
+
prevWeekStart.setDate(currentWeekSunday.getDate() - 7);
|
|
315
|
+
const prevWeekEnd = new Date(currentWeekSunday);
|
|
316
|
+
// Find first slot on or after the start of previous week
|
|
317
|
+
const index = findFirstSlotIndexFrom(sortedSlots, prevWeekStart);
|
|
318
|
+
if (index >= sortedSlots.length) return null;
|
|
319
|
+
const candidate = sortedSlots[index];
|
|
320
|
+
const candidateDate = new Date(candidate.startsAt);
|
|
321
|
+
// Ensure the candidate lies before the start of current week (i.e., within the previous week)
|
|
322
|
+
return candidateDate < prevWeekEnd ? candidate : null;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
var utils_formatDayShort = /* unused export */ undefined;
|
|
326
|
+
var utils_getDaysWithSlots = /* unused export */ undefined;
|
|
327
|
+
var utils_getFirstSundayOfWeek = /* unused export */ undefined;
|
|
328
|
+
export { buildCalendarDays, findFirstSlotIndexFrom, formatDate, formatDateCompact, formatMonthTitle, formatTime, formatTimeShort, getDefaultTimeZone, getNextSlotAfterWeek, getPrevSlotBeforeWeek, getSameDaySlots, utils_formatDayShort as formatDayShort, utils_getDaysWithSlots as getDaysWithSlots, utils_getFirstSundayOfWeek as getFirstSundayOfWeek };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsxRuntime_module_u, utils_module_o, useSignalEffect } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const Audio = (param)=>{
|
|
7
|
+
let { audioTrack } = param;
|
|
8
|
+
const audioRef = utils_module_o(null);
|
|
9
|
+
useSignalEffect(()=>{
|
|
10
|
+
const audioElement = audioRef.value;
|
|
11
|
+
if (!audioElement) return;
|
|
12
|
+
if (!audioTrack.value) return;
|
|
13
|
+
audioElement.srcObject = new MediaStream([
|
|
14
|
+
audioTrack.value
|
|
15
|
+
]);
|
|
16
|
+
return ()=>{
|
|
17
|
+
if (audioElement) {
|
|
18
|
+
audioElement.srcObject = null;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
return /*#__PURE__*/ jsxRuntime_module_u("audio", {
|
|
23
|
+
ref: audioRef,
|
|
24
|
+
autoPlay: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { Audio };
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsxRuntime_module_u, preact_module_k, utils_module_u } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import { WarningIcon, ExpandIcon, PipIcon, MinimizeIcon, MicOffIcon, UpCaretIcon, SpinnerIcon, PinnedIcon, MicIcon } from "../../images/icons.js";
|
|
3
|
+
import "../../styled-system/jsx/index.js";
|
|
4
|
+
import { Text, t } from "../helpers/Localization.js";
|
|
5
|
+
import { Button } from "../shared/Button.js";
|
|
6
|
+
import { Dropdown } from "../shared/controls/Dropdown.js";
|
|
7
|
+
import { PillToggle } from "../shared/controls/PillToggle.js";
|
|
8
|
+
import { default as shared_Tooltip } from "../shared/Tooltip.js";
|
|
9
|
+
import { ConversationMode as types_ConversationMode } from "../../types.js";
|
|
10
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const Controls = (param)=>{
|
|
23
|
+
let { connectingStatus, conversationMode, mic, maximize, minimizeToCorner, endCall } = param;
|
|
24
|
+
return /*#__PURE__*/ jsxRuntime_module_u(Container, {
|
|
25
|
+
"data-component-name": "Controls.Container",
|
|
26
|
+
children: [
|
|
27
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
28
|
+
when: conversationMode.visible,
|
|
29
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(PillToggle, {
|
|
30
|
+
options: VIDEO_MODE_OPTIONS,
|
|
31
|
+
value: conversationMode.currentMode.value,
|
|
32
|
+
onChange: conversationMode.onChange
|
|
33
|
+
})
|
|
34
|
+
}),
|
|
35
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
36
|
+
when: connectingStatus.visible,
|
|
37
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(ConnectingMessage, {
|
|
38
|
+
"data-component-name": "Controls.ConnectingMessage",
|
|
39
|
+
children: [
|
|
40
|
+
/*#__PURE__*/ jsxRuntime_module_u(SpinnerIcon, {}),
|
|
41
|
+
/*#__PURE__*/ jsxRuntime_module_u(ConnectingText, {
|
|
42
|
+
"data-component-name": "Controls.ConnectingText",
|
|
43
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Text, {
|
|
44
|
+
id: "video.connectingToAudio"
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
51
|
+
when: mic.visible,
|
|
52
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(preact_module_k, {
|
|
53
|
+
children: [
|
|
54
|
+
/*#__PURE__*/ jsxRuntime_module_u(Button, {
|
|
55
|
+
variant: "minimal",
|
|
56
|
+
size: "sm",
|
|
57
|
+
iconOnly: true,
|
|
58
|
+
onClick: mic.onToggle,
|
|
59
|
+
disabled: !mic.hasDevicesAvailable.value,
|
|
60
|
+
title: t(()=>mic.isOn.value ? "video.mute" : "video.unmute"),
|
|
61
|
+
ariaLabel: t(()=>mic.isOn.value ? "video.muteMicrophone" : "video.unmuteMicrophone"),
|
|
62
|
+
css: {
|
|
63
|
+
marginRight: "-$sm"
|
|
64
|
+
},
|
|
65
|
+
children: !mic.hasDevicesAvailable.value || !mic.isOn.value ? /*#__PURE__*/ jsxRuntime_module_u(MicOffIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(MicIcon, {})
|
|
66
|
+
}),
|
|
67
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
68
|
+
when: mic.hasDevicesAvailable,
|
|
69
|
+
fallback: /*#__PURE__*/ jsxRuntime_module_u(shared_Tooltip, {
|
|
70
|
+
position: "top",
|
|
71
|
+
content: t("video.grantMicAccess"),
|
|
72
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(WarningIcon, {})
|
|
73
|
+
}),
|
|
74
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Dropdown, {
|
|
75
|
+
options: mic.devices.value,
|
|
76
|
+
value: mic.selectedDeviceId.value,
|
|
77
|
+
onChange: mic.onDeviceChange,
|
|
78
|
+
ariaLabel: t("video.openMicrophoneMenu"),
|
|
79
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
|
|
80
|
+
variant: "minimal",
|
|
81
|
+
size: "xs",
|
|
82
|
+
ariaLabel: t("video.selectMicrophone"),
|
|
83
|
+
iconOnly: true,
|
|
84
|
+
tabIndex: -1,
|
|
85
|
+
css: {
|
|
86
|
+
transform: "rotate(180deg)"
|
|
87
|
+
},
|
|
88
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(UpCaretIcon, {})
|
|
89
|
+
})
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
]
|
|
93
|
+
})
|
|
94
|
+
}),
|
|
95
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
96
|
+
when: maximize.visible,
|
|
97
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
|
|
98
|
+
variant: "minimal",
|
|
99
|
+
size: "sm",
|
|
100
|
+
iconOnly: true,
|
|
101
|
+
onClick: maximize.onToggle,
|
|
102
|
+
ariaLabel: t(()=>maximize.isMaximized.value ? "toolbar.minimize" : "toolbar.expand"),
|
|
103
|
+
title: t(()=>maximize.isMaximized.value ? "toolbar.minimize" : "toolbar.expand"),
|
|
104
|
+
children: maximize.isMaximized.value ? /*#__PURE__*/ jsxRuntime_module_u(MinimizeIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(ExpandIcon, {})
|
|
105
|
+
})
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
108
|
+
when: minimizeToCorner.visible,
|
|
109
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
|
|
110
|
+
variant: "minimal",
|
|
111
|
+
size: "sm",
|
|
112
|
+
iconOnly: true,
|
|
113
|
+
onClick: minimizeToCorner.onToggle,
|
|
114
|
+
ariaLabel: t(()=>minimizeToCorner.isClosed.value ? "toolbar.expand" : "toolbar.minimize"),
|
|
115
|
+
title: t(()=>minimizeToCorner.isClosed.value ? "toolbar.expand" : "toolbar.minimize"),
|
|
116
|
+
children: minimizeToCorner.isClosed.value ? /*#__PURE__*/ jsxRuntime_module_u(PinnedIcon, {}) : /*#__PURE__*/ jsxRuntime_module_u(PipIcon, {})
|
|
117
|
+
})
|
|
118
|
+
}),
|
|
119
|
+
/*#__PURE__*/ jsxRuntime_module_u(utils_module_u, {
|
|
120
|
+
when: endCall.visible,
|
|
121
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Button, {
|
|
122
|
+
variant: "minimal",
|
|
123
|
+
size: "sm",
|
|
124
|
+
onClick: endCall.onClick,
|
|
125
|
+
ariaLabel: t("video.endCall"),
|
|
126
|
+
"data-component-name": "Controls.EndCallButton",
|
|
127
|
+
css: {
|
|
128
|
+
color: "[#E4251B]",
|
|
129
|
+
fontWeight: "$semibold"
|
|
130
|
+
},
|
|
131
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Text, {
|
|
132
|
+
id: "video.end"
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
const VIDEO_MODE_OPTIONS = [
|
|
140
|
+
{
|
|
141
|
+
value: types_ConversationMode.VIDEO,
|
|
142
|
+
label: t("video.videoMode"),
|
|
143
|
+
ariaLabel: t("video.videoModeAriaLabel")
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
value: types_ConversationMode.VOICE,
|
|
147
|
+
label: t("video.voiceMode"),
|
|
148
|
+
ariaLabel: t("video.voiceModeAriaLabel")
|
|
149
|
+
}
|
|
150
|
+
];
|
|
151
|
+
const Container = styled("div", {
|
|
152
|
+
base: {
|
|
153
|
+
display: "flex",
|
|
154
|
+
alignItems: "center",
|
|
155
|
+
gap: "[8px]",
|
|
156
|
+
zIndex: 1000
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
Container.displayName = "ControlsInner";
|
|
160
|
+
const ConnectingMessage = styled("div", {
|
|
161
|
+
base: {
|
|
162
|
+
display: "flex",
|
|
163
|
+
padding: "[4px 8px 4px 4px]",
|
|
164
|
+
alignItems: "center",
|
|
165
|
+
gap: "[4px]",
|
|
166
|
+
borderRadius: "[100px]",
|
|
167
|
+
border: "1px solid #D0D5DD",
|
|
168
|
+
background: "$white",
|
|
169
|
+
opacity: 0.7,
|
|
170
|
+
"& svg path": {
|
|
171
|
+
fill: "[#8A9394]"
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
ConnectingMessage.displayName = "ConnectingMessage";
|
|
176
|
+
const ConnectingText = styled("span", {
|
|
177
|
+
base: {
|
|
178
|
+
fontSize: "12px",
|
|
179
|
+
fontStyle: "normal",
|
|
180
|
+
fontWeight: "$normal",
|
|
181
|
+
lineHeight: "22px",
|
|
182
|
+
color: "[#152229]",
|
|
183
|
+
whiteSpace: "nowrap"
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
ConnectingText.displayName = "ConnectingText";
|
|
187
|
+
|
|
188
|
+
export { Controls };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useComputed, jsxRuntime_module_u, utils_module_o, useSignalEffect } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { Persisted } from "../helpers/Persisted.js";
|
|
4
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
5
|
+
|
|
6
|
+
/** @jsxImportSource preact */
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
const LiveVideo = (props)=>{
|
|
12
|
+
var _props_id;
|
|
13
|
+
const { hidden, liveVideoRef } = useLiveVideo(props);
|
|
14
|
+
return /*#__PURE__*/ jsxRuntime_module_u(VideoElement, {
|
|
15
|
+
"data-component-name": "LiveVideo.VideoElement",
|
|
16
|
+
id: (_props_id = props.id) != null ? _props_id : "live-video",
|
|
17
|
+
elementType: "video",
|
|
18
|
+
innerRef: liveVideoRef,
|
|
19
|
+
autoplay: true,
|
|
20
|
+
muted: true,
|
|
21
|
+
playsInline: true,
|
|
22
|
+
hidden: hidden
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
function useLiveVideo(props) {
|
|
26
|
+
const { config } = props;
|
|
27
|
+
const hidden = useComputed(()=>!config.value);
|
|
28
|
+
const liveVideoRef = utils_module_o(null);
|
|
29
|
+
// Handle live video track
|
|
30
|
+
useSignalEffect(()=>{
|
|
31
|
+
if (!liveVideoRef.value || !config.value) return;
|
|
32
|
+
if (config.value.type === "track") {
|
|
33
|
+
liveVideoRef.value.srcObject = new MediaStream([
|
|
34
|
+
config.value.track
|
|
35
|
+
]);
|
|
36
|
+
} else {
|
|
37
|
+
liveVideoRef.value.src = config.value.src;
|
|
38
|
+
liveVideoRef.value.loop = true;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
hidden,
|
|
43
|
+
liveVideoRef
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const VideoElement = styled(Persisted, {
|
|
47
|
+
base: {
|
|
48
|
+
width: "[100%]",
|
|
49
|
+
height: "[100%]",
|
|
50
|
+
gridArea: "1 / 1",
|
|
51
|
+
objectFit: "contain"
|
|
52
|
+
},
|
|
53
|
+
variants: {
|
|
54
|
+
hidden: {
|
|
55
|
+
true: {
|
|
56
|
+
display: "none"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
VideoElement.displayName = "VideoElement";
|
|
62
|
+
|
|
63
|
+
export { LiveVideo };
|