@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,372 @@
|
|
|
1
|
+
import { __webpack_require__ } from "../../../../js/runtime.js";
|
|
2
|
+
import { signals_module_useSignal, jsxRuntime_module_u, utils_module_o, useSignalEffect } from "../../../../js/multimodal_v2.js";
|
|
3
|
+
import "../../styled-system/jsx/index.js";
|
|
4
|
+
import { slideZoomStyle } from "../../utils/slide_zoom.js";
|
|
5
|
+
import { Persisted } from "../helpers/Persisted.js";
|
|
6
|
+
import "../../../utils/native_globals.js";
|
|
7
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
8
|
+
|
|
9
|
+
/* provided dependency */ var presentations_setInterval = __webpack_require__(68034).LK;
|
|
10
|
+
/* provided dependency */ var presentations_clearInterval = __webpack_require__(68034).wm;
|
|
11
|
+
|
|
12
|
+
/** @jsxImportSource preact */
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Video-frame perception (piper_perception_demos): while a demo plays on a call we stream the
|
|
18
|
+
// current frame to the agent so it can see — and point at — what's on screen, mirroring the slide
|
|
19
|
+
// perception path (ScreenShareStore). Frames ride the "video" perception kind. Cap the longest side
|
|
20
|
+
// so the JPEG stays small through ActionCable -> Redis -> the realtime socket; re-push on a steady
|
|
21
|
+
// cadence (well under coffee's 30s slot staleness) so the agent always has the current frame.
|
|
22
|
+
const VIDEO_PERCEPTION_MAX_DIMENSION = 1280;
|
|
23
|
+
const VIDEO_PERCEPTION_JPEG_QUALITY = 0.7;
|
|
24
|
+
// Re-capture the current frame periodically so the agent keeps seeing what's on screen. Kept
|
|
25
|
+
// modest: the frame the model reasons about is already accurate, so extra frequency doesn't help
|
|
26
|
+
// pointing precision, and pushing large frames faster just adds realtime-context/event-loop load.
|
|
27
|
+
const VIDEO_PERCEPTION_INTERVAL_MS = 2500;
|
|
28
|
+
// Draw the video's current frame to a scaled canvas and encode a JPEG data URL. Returns null if the
|
|
29
|
+
// frame isn't decodable yet (no metadata) or the canvas is tainted (CORS) — caller just skips it.
|
|
30
|
+
function encodeVideoFrame(video) {
|
|
31
|
+
const vw = video.videoWidth;
|
|
32
|
+
const vh = video.videoHeight;
|
|
33
|
+
if (!vw || !vh) return null;
|
|
34
|
+
const scale = Math.min(VIDEO_PERCEPTION_MAX_DIMENSION / vw, VIDEO_PERCEPTION_MAX_DIMENSION / vh, 1);
|
|
35
|
+
const canvas = document.createElement("canvas");
|
|
36
|
+
canvas.width = Math.max(1, Math.round(vw * scale));
|
|
37
|
+
canvas.height = Math.max(1, Math.round(vh * scale));
|
|
38
|
+
const ctx = canvas.getContext("2d");
|
|
39
|
+
if (!ctx || typeof canvas.toDataURL !== "function") return null;
|
|
40
|
+
try {
|
|
41
|
+
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
|
|
42
|
+
return canvas.toDataURL("image/jpeg", VIDEO_PERCEPTION_JPEG_QUALITY);
|
|
43
|
+
} catch (unused) {
|
|
44
|
+
// Tainted canvas (video CORS not allowed) or a transient draw failure — skip this frame.
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Presentation is the entrypoint for the `present_video` artifact.
|
|
50
|
+
*
|
|
51
|
+
* Wraps the demo in a screen-share frame and plays the chosen segments back-to-back:
|
|
52
|
+
* the agent picks one or more spans of the video and they play as one continuous
|
|
53
|
+
* demo, seeking from each segment's end straight to the next segment's start with no
|
|
54
|
+
* pause (the skipped stretches are cut out). There are no title/transition slides or
|
|
55
|
+
* chapters. The <video> element is rendered through <Persisted> so it survives clip
|
|
56
|
+
* changes without remount; playback is driven via the JS API (currentTime + seek/
|
|
57
|
+
* pause/timeupdate listeners) instead of #t=start,end media fragments.
|
|
58
|
+
*/ const Presentation = (param)=>{
|
|
59
|
+
let { rootStore } = param;
|
|
60
|
+
var _state_aiProfileName;
|
|
61
|
+
const { state, videoRef } = usePresentation({
|
|
62
|
+
rootStore
|
|
63
|
+
});
|
|
64
|
+
if (!state.currentPresentation) return null;
|
|
65
|
+
return /*#__PURE__*/ jsxRuntime_module_u(ScreenShareFrame, {
|
|
66
|
+
children: [
|
|
67
|
+
/*#__PURE__*/ jsxRuntime_module_u(ScreenSharePill, {
|
|
68
|
+
children: [
|
|
69
|
+
/*#__PURE__*/ jsxRuntime_module_u(ScreenShareDot, {}),
|
|
70
|
+
"Viewing ",
|
|
71
|
+
(_state_aiProfileName = state.aiProfileName) != null ? _state_aiProfileName : "AI SDR",
|
|
72
|
+
"'s screen"
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/*#__PURE__*/ jsxRuntime_module_u(MediaArea, {
|
|
76
|
+
children: [
|
|
77
|
+
/*#__PURE__*/ jsxRuntime_module_u(VideoElement, {
|
|
78
|
+
id: "presentation-video",
|
|
79
|
+
elementType: "video",
|
|
80
|
+
innerRef: videoRef,
|
|
81
|
+
"data-component-name": "Presentation.Video",
|
|
82
|
+
muted: true,
|
|
83
|
+
playsInline: true
|
|
84
|
+
}),
|
|
85
|
+
!state.videoReady && /*#__PURE__*/ jsxRuntime_module_u(LoadingOverlay, {
|
|
86
|
+
"data-component-name": "Presentation.Loading",
|
|
87
|
+
"aria-hidden": "true",
|
|
88
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(LoadingDots, {
|
|
89
|
+
children: [
|
|
90
|
+
/*#__PURE__*/ jsxRuntime_module_u(LoadingDot, {
|
|
91
|
+
style: {
|
|
92
|
+
animationDelay: "0ms"
|
|
93
|
+
}
|
|
94
|
+
}),
|
|
95
|
+
/*#__PURE__*/ jsxRuntime_module_u(LoadingDot, {
|
|
96
|
+
style: {
|
|
97
|
+
animationDelay: "160ms"
|
|
98
|
+
}
|
|
99
|
+
}),
|
|
100
|
+
/*#__PURE__*/ jsxRuntime_module_u(LoadingDot, {
|
|
101
|
+
style: {
|
|
102
|
+
animationDelay: "320ms"
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
]
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
]
|
|
109
|
+
})
|
|
110
|
+
]
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
/* export default */ const presentations = (Presentation);
|
|
114
|
+
function usePresentation(param) {
|
|
115
|
+
let { rootStore } = param;
|
|
116
|
+
var _rootStore_presentationsStore_value, _ref, _ref1;
|
|
117
|
+
var _rootStore_activeConversation_aiSdr_value;
|
|
118
|
+
const presentationsStore = (_rootStore_presentationsStore_value = rootStore.presentationsStore.value) != null ? _rootStore_presentationsStore_value : null;
|
|
119
|
+
const currentPresentation = (_ref = presentationsStore == null ? void 0 : presentationsStore.currentPresentation.value) != null ? _ref : null;
|
|
120
|
+
const aiProfileName = (_ref1 = (_rootStore_activeConversation_aiSdr_value = rootStore.activeConversation.aiSdr.value) == null ? void 0 : _rootStore_activeConversation_aiSdr_value.name) != null ? _ref1 : null;
|
|
121
|
+
const videoRef = utils_module_o(null);
|
|
122
|
+
// False until the clip has a frame ready to show, so we can cover the blank/
|
|
123
|
+
// black media area with a translucent placeholder instead of raw <video> chrome.
|
|
124
|
+
const videoReady = signals_module_useSignal(false);
|
|
125
|
+
// Zoom the video in place toward wherever Piper is pointing (see pointAtSlide + utils/slide_zoom).
|
|
126
|
+
// The zoom is done here, on the media itself, so it's clipped to the video's own footprint and
|
|
127
|
+
// never grows past its frame. Only touches the style during a call (when the nav store exists).
|
|
128
|
+
useSignalEffect(()=>{
|
|
129
|
+
const video = videoRef.value;
|
|
130
|
+
const navStore = rootStore.websiteNavigationStore.value;
|
|
131
|
+
if (!video || !navStore) return;
|
|
132
|
+
const style = slideZoomStyle(navStore.slideZoom.value);
|
|
133
|
+
video.style.transform = style.transform;
|
|
134
|
+
video.style.transformOrigin = style.transformOrigin;
|
|
135
|
+
video.style.clipPath = style.clipPath;
|
|
136
|
+
video.style.transition = style.transition;
|
|
137
|
+
});
|
|
138
|
+
// Drive playback via the JS API on a Persisted <video> element rather than
|
|
139
|
+
// re-rendering with #t=start,end fragments. This preserves loaded media
|
|
140
|
+
// data, decoded frames, and playback continuity across clip changes.
|
|
141
|
+
useSignalEffect(()=>{
|
|
142
|
+
var _ref, _rootStore_featureFlags_piperPerceptionDemos;
|
|
143
|
+
const video = videoRef.value;
|
|
144
|
+
const pres = presentationsStore == null ? void 0 : presentationsStore.currentPresentation.value;
|
|
145
|
+
const stopped = (_ref = presentationsStore == null ? void 0 : presentationsStore.stopped.value) != null ? _ref : false;
|
|
146
|
+
// Stream video frames to the agent only on a call with the demos-perception flag on.
|
|
147
|
+
const perceptionOn = ((_rootStore_featureFlags_piperPerceptionDemos = rootStore.featureFlags.piperPerceptionDemos) != null ? _rootStore_featureFlags_piperPerceptionDemos : false) && rootStore.callInProgress.value;
|
|
148
|
+
if (!video) return;
|
|
149
|
+
if (!pres) {
|
|
150
|
+
if (!video.paused) video.pause();
|
|
151
|
+
// Demo closed: free the perception slot so the agent stops "seeing" a stale frame.
|
|
152
|
+
if (perceptionOn) {
|
|
153
|
+
rootStore.channel.perform("update_perception", {
|
|
154
|
+
image_data: "",
|
|
155
|
+
kind: "video"
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const { segments } = pres;
|
|
161
|
+
// Detect clip changes via a marker on the persisted element so we re-seek only on real clip
|
|
162
|
+
// boundaries. Keyed by the artifact message id (so re-sharing the same clip — e.g. "replay
|
|
163
|
+
// that" — counts as new and replays) plus all segment bounds.
|
|
164
|
+
const clipKey = pres.messageId + "::" + pres.presentationId + "::" + segments.map((segment)=>segment.start + "-" + segment.end).join(",");
|
|
165
|
+
const isNewClip = video.dataset.clipKey !== clipKey;
|
|
166
|
+
if (isNewClip) {
|
|
167
|
+
video.dataset.clipKey = clipKey;
|
|
168
|
+
// Start at the first segment. segIndex tracks which segment is playing so timeupdate can chain
|
|
169
|
+
// to the next one at each segment's end.
|
|
170
|
+
video.dataset.segIndex = "0";
|
|
171
|
+
// New clip: show the loading placeholder until a frame at the first segment's start is ready.
|
|
172
|
+
videoReady.value = false;
|
|
173
|
+
// Enable cross-origin reads so we can grab frames into a canvas for perception. Must be set
|
|
174
|
+
// before src for the fetch to use CORS mode; only when perception is on so we never change
|
|
175
|
+
// the media request for teams without the feature.
|
|
176
|
+
if (perceptionOn && video.crossOrigin !== "anonymous") {
|
|
177
|
+
video.crossOrigin = "anonymous";
|
|
178
|
+
}
|
|
179
|
+
if (video.src !== pres.videoUrl) {
|
|
180
|
+
video.src = pres.videoUrl;
|
|
181
|
+
}
|
|
182
|
+
// Modern browsers queue the seek if metadata isn't loaded yet.
|
|
183
|
+
video.currentTime = segments[0].start;
|
|
184
|
+
}
|
|
185
|
+
// Grab the current frame and ship it to the agent's perception loop.
|
|
186
|
+
const pushFrame = ()=>{
|
|
187
|
+
if (!perceptionOn) return;
|
|
188
|
+
const imageData = encodeVideoFrame(video);
|
|
189
|
+
if (imageData) {
|
|
190
|
+
rootStore.channel.perform("update_perception", {
|
|
191
|
+
image_data: imageData,
|
|
192
|
+
kind: "video"
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
// A frame is ready to show once the seek to the segment start lands (or, absent a seek, once the
|
|
197
|
+
// first frame loads / playback begins) — hide the placeholder. Also push it to perception so a
|
|
198
|
+
// jump/replay updates what the agent sees at once.
|
|
199
|
+
const handleReady = ()=>{
|
|
200
|
+
videoReady.value = true;
|
|
201
|
+
pushFrame();
|
|
202
|
+
};
|
|
203
|
+
video.addEventListener("seeked", handleReady);
|
|
204
|
+
video.addEventListener("loadeddata", handleReady);
|
|
205
|
+
video.addEventListener("playing", handleReady);
|
|
206
|
+
const handleTimeUpdate = ()=>{
|
|
207
|
+
var _video_dataset_segIndex;
|
|
208
|
+
// Publish the position so an interruption can tell the agent where it paused.
|
|
209
|
+
if (presentationsStore) presentationsStore.currentTimeSeconds.value = video.currentTime;
|
|
210
|
+
const segmentIndex = Number((_video_dataset_segIndex = video.dataset.segIndex) != null ? _video_dataset_segIndex : "0");
|
|
211
|
+
const segment = segments[segmentIndex];
|
|
212
|
+
if (!segment) return;
|
|
213
|
+
// At a segment's end, chain straight to the next segment (seek, keep playing) so the chosen
|
|
214
|
+
// spans play back-to-back with no pause. On the last segment, pause and hold the final frame.
|
|
215
|
+
if (video.currentTime >= segment.end) {
|
|
216
|
+
const nextSegment = segments[segmentIndex + 1];
|
|
217
|
+
if (nextSegment) {
|
|
218
|
+
video.dataset.segIndex = String(segmentIndex + 1);
|
|
219
|
+
video.currentTime = nextSegment.start;
|
|
220
|
+
} else if (!video.paused) {
|
|
221
|
+
video.pause();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
video.addEventListener("timeupdate", handleTimeUpdate);
|
|
226
|
+
// The visitor barged in — pause and freeze the frame. Otherwise keep playing.
|
|
227
|
+
if (stopped) {
|
|
228
|
+
if (!video.paused) video.pause();
|
|
229
|
+
} else if (video.paused) {
|
|
230
|
+
void video.play().catch(()=>{});
|
|
231
|
+
}
|
|
232
|
+
// Re-push the current frame on a steady cadence so the agent keeps seeing what's on screen as
|
|
233
|
+
// the video plays (and the frozen frame after a barge-in). One immediate push covers the case
|
|
234
|
+
// where the frame is already decodable before any event fires.
|
|
235
|
+
let captureTimer = null;
|
|
236
|
+
if (perceptionOn) {
|
|
237
|
+
pushFrame();
|
|
238
|
+
captureTimer = presentations_setInterval(pushFrame, VIDEO_PERCEPTION_INTERVAL_MS);
|
|
239
|
+
}
|
|
240
|
+
return ()=>{
|
|
241
|
+
video.removeEventListener("timeupdate", handleTimeUpdate);
|
|
242
|
+
video.removeEventListener("seeked", handleReady);
|
|
243
|
+
video.removeEventListener("loadeddata", handleReady);
|
|
244
|
+
video.removeEventListener("playing", handleReady);
|
|
245
|
+
if (captureTimer !== null) presentations_clearInterval(captureTimer);
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
state: {
|
|
250
|
+
currentPresentation,
|
|
251
|
+
aiProfileName,
|
|
252
|
+
videoReady: videoReady.value
|
|
253
|
+
},
|
|
254
|
+
videoRef
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// Holds the video and the loading overlay in the same box so the placeholder
|
|
258
|
+
// can sit directly on top of the media until the first frame is ready.
|
|
259
|
+
const MediaArea = styled("div", {
|
|
260
|
+
base: {
|
|
261
|
+
position: "relative",
|
|
262
|
+
display: "grid",
|
|
263
|
+
placeItems: "center",
|
|
264
|
+
width: "[100%]",
|
|
265
|
+
// Reserve the 16:9 box from the width (which is now a concrete 100%) so the loading
|
|
266
|
+
// placeholder has the right HEIGHT before the <video> reports its intrinsic size.
|
|
267
|
+
// Without this the media row is content-height and collapses vertically while loading —
|
|
268
|
+
// the vertical counterpart of the width collapse fixed on ScreenShareFrame.
|
|
269
|
+
aspectRatio: "[16 / 9]",
|
|
270
|
+
maxWidth: "[100%]",
|
|
271
|
+
maxHeight: "[100%]",
|
|
272
|
+
minHeight: "[0]"
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
MediaArea.displayName = "MediaArea";
|
|
276
|
+
const VideoElement = styled(Persisted, {
|
|
277
|
+
base: {
|
|
278
|
+
width: "[100%]",
|
|
279
|
+
height: "[100%]",
|
|
280
|
+
maxWidth: "[100%]",
|
|
281
|
+
maxHeight: "[100%]",
|
|
282
|
+
minHeight: "[0]",
|
|
283
|
+
objectFit: "contain",
|
|
284
|
+
borderRadius: "[8px]",
|
|
285
|
+
boxShadow: "[0 8px 32px rgba(0, 0, 0, 0.3)]",
|
|
286
|
+
animation: "[q-videoFadeIn 0.4s ease-out]"
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
VideoElement.displayName = "VideoElement";
|
|
290
|
+
// Translucent, frosted placeholder shown over the media area while the clip
|
|
291
|
+
// loads, so the visitor never sees raw black/blank video chrome. Fades itself in.
|
|
292
|
+
const LoadingOverlay = styled("div", {
|
|
293
|
+
base: {
|
|
294
|
+
position: "absolute",
|
|
295
|
+
inset: "[0]",
|
|
296
|
+
display: "grid",
|
|
297
|
+
placeItems: "center",
|
|
298
|
+
borderRadius: "[8px]",
|
|
299
|
+
backgroundColor: "[rgba(30, 42, 47, 0.55)]",
|
|
300
|
+
backdropFilter: "[blur(10px)]",
|
|
301
|
+
boxShadow: "[0 8px 32px rgba(0, 0, 0, 0.3)]",
|
|
302
|
+
animation: "[q-videoFadeIn 0.3s ease-out]"
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
LoadingOverlay.displayName = "LoadingOverlay";
|
|
306
|
+
const LoadingDots = styled("div", {
|
|
307
|
+
base: {
|
|
308
|
+
display: "inline-flex",
|
|
309
|
+
alignItems: "center",
|
|
310
|
+
gap: "[8px]"
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
LoadingDots.displayName = "LoadingDots";
|
|
314
|
+
const LoadingDot = styled("span", {
|
|
315
|
+
base: {
|
|
316
|
+
display: "inline-block",
|
|
317
|
+
width: "[10px]",
|
|
318
|
+
height: "[10px]",
|
|
319
|
+
borderRadius: "full",
|
|
320
|
+
backgroundColor: "[rgba(255, 255, 255, 0.85)]",
|
|
321
|
+
animation: "[q-pulse 1.2s ease-in-out infinite]"
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
LoadingDot.displayName = "LoadingDot";
|
|
325
|
+
const ScreenShareFrame = styled("div", {
|
|
326
|
+
base: {
|
|
327
|
+
display: "grid",
|
|
328
|
+
// Pill sits in an auto row; the media fills the remaining space. minmax(0, 1fr)
|
|
329
|
+
// (rather than 1fr) lets the media row shrink to the frame instead of overflowing.
|
|
330
|
+
gridTemplateRows: "auto minmax(0, 1fr)",
|
|
331
|
+
justifyItems: "center",
|
|
332
|
+
alignItems: "center",
|
|
333
|
+
gap: "$sm",
|
|
334
|
+
// Fill the available width so MediaArea's `width: 100%` has a concrete basis.
|
|
335
|
+
// Without this the frame is shrink-to-fit and, before the <video> reports its
|
|
336
|
+
// intrinsic size, MediaArea collapses — making the loading placeholder render
|
|
337
|
+
// far smaller than the video that eventually fills the reserved 16:9 box.
|
|
338
|
+
width: "[100%]",
|
|
339
|
+
maxWidth: "[100%]",
|
|
340
|
+
maxHeight: "[min(90vh, 100%)]"
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
ScreenShareFrame.displayName = "ScreenShareFrame";
|
|
344
|
+
const ScreenSharePill = styled("div", {
|
|
345
|
+
base: {
|
|
346
|
+
display: "inline-flex",
|
|
347
|
+
alignItems: "center",
|
|
348
|
+
gap: "[6px]",
|
|
349
|
+
padding: "[8px 12px]",
|
|
350
|
+
backgroundColor: "[#1e2a2f]",
|
|
351
|
+
color: "$white",
|
|
352
|
+
fontSize: "[12px]",
|
|
353
|
+
fontWeight: "$bold",
|
|
354
|
+
borderRadius: "full",
|
|
355
|
+
letterSpacing: "[0.01em]"
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
ScreenSharePill.displayName = "ScreenSharePill";
|
|
359
|
+
const ScreenShareDot = styled("span", {
|
|
360
|
+
base: {
|
|
361
|
+
display: "inline-block",
|
|
362
|
+
width: "[8px]",
|
|
363
|
+
height: "[8px]",
|
|
364
|
+
minWidth: "[8px]",
|
|
365
|
+
borderRadius: "full",
|
|
366
|
+
backgroundColor: "[#2dd272]",
|
|
367
|
+
animation: "[q-pulse 2s ease-in-out infinite]"
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
ScreenShareDot.displayName = "ScreenShareDot";
|
|
371
|
+
|
|
372
|
+
export default presentations;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { isSignalike } from "../../utils/signals.js";
|
|
4
|
+
import { Persisted } from "../helpers/Persisted.js";
|
|
5
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
const Avatar = (param)=>{
|
|
12
|
+
let { id, src, alt, whenEmpty = "hide", size = "md", align = "end", noSpacing = false } = param;
|
|
13
|
+
const srcValue = isSignalike(src) ? src == null ? void 0 : src.value : src;
|
|
14
|
+
const altValue = isSignalike(alt) ? alt == null ? void 0 : alt.value : alt;
|
|
15
|
+
const whenEmptyValue = isSignalike(whenEmpty) ? whenEmpty == null ? void 0 : whenEmpty.value : whenEmpty;
|
|
16
|
+
const alignValue = isSignalike(align) ? align == null ? void 0 : align.value : align;
|
|
17
|
+
return /*#__PURE__*/ jsxRuntime_module_u(AvatarOuter, {
|
|
18
|
+
"data-component-name": "Avatar.AvatarOuter",
|
|
19
|
+
id: "avatar-" + id,
|
|
20
|
+
elementType: "img",
|
|
21
|
+
src: srcValue != null ? srcValue : undefined,
|
|
22
|
+
alt: altValue != null ? altValue : undefined,
|
|
23
|
+
whenEmpty: whenEmptyValue,
|
|
24
|
+
size: size,
|
|
25
|
+
align: alignValue,
|
|
26
|
+
noSpacing: noSpacing
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const AvatarOuter = styled(Persisted, {
|
|
30
|
+
base: {
|
|
31
|
+
width: "[32px]",
|
|
32
|
+
height: "[32px]",
|
|
33
|
+
borderRadius: "[50%]",
|
|
34
|
+
flexShrink: 0,
|
|
35
|
+
marginRight: "$sm",
|
|
36
|
+
objectFit: "cover"
|
|
37
|
+
},
|
|
38
|
+
variants: {
|
|
39
|
+
whenEmpty: {
|
|
40
|
+
show: {},
|
|
41
|
+
hidePreserveSpace: {
|
|
42
|
+
opacity: 0,
|
|
43
|
+
"&[src]:not([src=''])": {
|
|
44
|
+
opacity: 1
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
hide: {
|
|
48
|
+
display: "none",
|
|
49
|
+
"&[src]:not([src=''])": {
|
|
50
|
+
display: "block"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
size: {
|
|
55
|
+
xs: {
|
|
56
|
+
width: "[20px]",
|
|
57
|
+
height: "[20px]"
|
|
58
|
+
},
|
|
59
|
+
sm: {
|
|
60
|
+
width: "[28px]",
|
|
61
|
+
height: "[28px]"
|
|
62
|
+
},
|
|
63
|
+
md: {
|
|
64
|
+
width: "[32px]",
|
|
65
|
+
height: "[32px]"
|
|
66
|
+
},
|
|
67
|
+
lg: {
|
|
68
|
+
width: "[40px]",
|
|
69
|
+
height: "[40px]"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
align: {
|
|
73
|
+
start: {
|
|
74
|
+
alignSelf: "flex-start"
|
|
75
|
+
},
|
|
76
|
+
center: {
|
|
77
|
+
alignSelf: "center"
|
|
78
|
+
},
|
|
79
|
+
end: {
|
|
80
|
+
alignSelf: "flex-end"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
noSpacing: {
|
|
84
|
+
true: {
|
|
85
|
+
marginRight: "$none"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
AvatarOuter.displayName = "AvatarOuter";
|
|
91
|
+
|
|
92
|
+
export { Avatar };
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { Avatar } from "./Avatar.js";
|
|
4
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
5
|
+
|
|
6
|
+
/** @jsxImportSource preact */
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
const DEFAULT_MAX_AVATARS = 4;
|
|
10
|
+
const SIZE_CONFIG = {
|
|
11
|
+
xs: {
|
|
12
|
+
wrapper: 24,
|
|
13
|
+
overlap: 8
|
|
14
|
+
},
|
|
15
|
+
sm: {
|
|
16
|
+
wrapper: 32,
|
|
17
|
+
overlap: 12
|
|
18
|
+
},
|
|
19
|
+
md: {
|
|
20
|
+
wrapper: 36,
|
|
21
|
+
overlap: 14
|
|
22
|
+
},
|
|
23
|
+
lg: {
|
|
24
|
+
wrapper: 44,
|
|
25
|
+
overlap: 16
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const AvatarGroup = (param)=>{
|
|
29
|
+
let { id, urls, size = "sm", maxAvatars = DEFAULT_MAX_AVATARS, t } = param;
|
|
30
|
+
if (!urls || urls.length === 0) return null;
|
|
31
|
+
const displayedAvatars = urls.slice(0, maxAvatars);
|
|
32
|
+
const remainingCount = urls.length - maxAvatars;
|
|
33
|
+
const showOverflow = remainingCount > 0;
|
|
34
|
+
const { wrapper, overlap } = SIZE_CONFIG[size];
|
|
35
|
+
// Single avatar - render without overlap
|
|
36
|
+
if (displayedAvatars.length === 1) {
|
|
37
|
+
return /*#__PURE__*/ jsxRuntime_module_u(SingleAvatarWrapper, {
|
|
38
|
+
"data-component-name": "AvatarGroup.SingleAvatarWrapper",
|
|
39
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Avatar, {
|
|
40
|
+
id: id + "-" + displayedAvatars[0],
|
|
41
|
+
src: displayedAvatars[0],
|
|
42
|
+
size: size
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const moreLabel = t ? t("shared.moreAvatars", {
|
|
47
|
+
count: remainingCount
|
|
48
|
+
}) : "+" + remainingCount + " more";
|
|
49
|
+
// Multiple avatars - render with overlap using negative margins
|
|
50
|
+
return /*#__PURE__*/ jsxRuntime_module_u(Container, {
|
|
51
|
+
"data-component-name": "AvatarGroup.Container",
|
|
52
|
+
style: {
|
|
53
|
+
height: wrapper
|
|
54
|
+
},
|
|
55
|
+
children: [
|
|
56
|
+
displayedAvatars.map((url, index)=>/*#__PURE__*/ jsxRuntime_module_u(AvatarWrapper, {
|
|
57
|
+
"data-component-name": "AvatarGroup.AvatarWrapper",
|
|
58
|
+
style: {
|
|
59
|
+
width: wrapper,
|
|
60
|
+
height: wrapper,
|
|
61
|
+
marginLeft: index === 0 ? 0 : -overlap,
|
|
62
|
+
zIndex: displayedAvatars.length - index
|
|
63
|
+
},
|
|
64
|
+
children: /*#__PURE__*/ jsxRuntime_module_u(Avatar, {
|
|
65
|
+
id: id + "-" + index + "-" + url,
|
|
66
|
+
src: url,
|
|
67
|
+
size: size
|
|
68
|
+
})
|
|
69
|
+
}, url)),
|
|
70
|
+
showOverflow && /*#__PURE__*/ jsxRuntime_module_u(OverflowBadge, {
|
|
71
|
+
"data-component-name": "AvatarGroup.OverflowBadge",
|
|
72
|
+
style: {
|
|
73
|
+
width: wrapper,
|
|
74
|
+
height: wrapper,
|
|
75
|
+
marginLeft: -overlap
|
|
76
|
+
},
|
|
77
|
+
"aria-label": moreLabel,
|
|
78
|
+
children: [
|
|
79
|
+
"+",
|
|
80
|
+
remainingCount
|
|
81
|
+
]
|
|
82
|
+
})
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
const Container = styled("div", {
|
|
87
|
+
base: {
|
|
88
|
+
display: "flex",
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
flexShrink: 0
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
Container.displayName = "Container";
|
|
94
|
+
const SingleAvatarWrapper = styled("div", {
|
|
95
|
+
base: {
|
|
96
|
+
flexShrink: 0,
|
|
97
|
+
"& img": {
|
|
98
|
+
marginRight: "[0]",
|
|
99
|
+
alignSelf: "center"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
SingleAvatarWrapper.displayName = "SingleAvatarWrapper";
|
|
104
|
+
const AvatarWrapper = styled("div", {
|
|
105
|
+
base: {
|
|
106
|
+
position: "relative",
|
|
107
|
+
borderRadius: "[50%]",
|
|
108
|
+
border: "[2px solid white]",
|
|
109
|
+
boxSizing: "border-box",
|
|
110
|
+
overflow: "hidden",
|
|
111
|
+
"& img": {
|
|
112
|
+
marginRight: "[0]",
|
|
113
|
+
alignSelf: "center"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
AvatarWrapper.displayName = "AvatarWrapper";
|
|
118
|
+
const OverflowBadge = styled("div", {
|
|
119
|
+
base: {
|
|
120
|
+
position: "relative",
|
|
121
|
+
display: "flex",
|
|
122
|
+
alignItems: "center",
|
|
123
|
+
justifyContent: "center",
|
|
124
|
+
fontSize: "11px",
|
|
125
|
+
borderRadius: "[50%]",
|
|
126
|
+
backgroundColor: "$gray",
|
|
127
|
+
color: "$text.secondary",
|
|
128
|
+
fontWeight: "$semibold",
|
|
129
|
+
border: "[2px solid white]",
|
|
130
|
+
boxSizing: "border-box"
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
OverflowBadge.displayName = "OverflowBadge";
|
|
134
|
+
|
|
135
|
+
export { AvatarGroup };
|