@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,358 @@
|
|
|
1
|
+
import { hooks_module_, hooks_module_A, jsxRuntime_module_u, hooks_module_T } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { sanitizeHtml } from "../../utils/sanitize_html.js";
|
|
4
|
+
import { styled as factory_styled } from "../../styled-system/jsx/factory.js";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
/** @jsxImportSource preact */
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const DEFAULT_TRANSFORMERS = {};
|
|
11
|
+
/**
|
|
12
|
+
* The widget renders into a shadow root on the customer's page, so an anchor here navigates the
|
|
13
|
+
* top-level page. Cross-origin links would take the visitor off the site entirely and tear the
|
|
14
|
+
* widget down mid-conversation, so they open in a new tab instead.
|
|
15
|
+
*
|
|
16
|
+
* Same-origin links are deliberately left bare so the navigation interceptor can still soft-navigate
|
|
17
|
+
* them in place for co-browsing.
|
|
18
|
+
*/ const EXTERNAL_LINK_TRANSFORMERS = {
|
|
19
|
+
a: (node)=>{
|
|
20
|
+
if (node.hasAttribute("target")) return;
|
|
21
|
+
if (!isCrossOriginHttpUrl(node.getAttribute("href"))) return;
|
|
22
|
+
node.setAttribute("target", "_blank");
|
|
23
|
+
node.setAttribute("rel", withRelTokens(node.getAttribute("rel")));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Renders sanitized HTML content with optional word-by-word animation.
|
|
28
|
+
*
|
|
29
|
+
* Note: This component uses useMemo instead of useComputed because it receives
|
|
30
|
+
* plain props (not signals) from parent components that iterate over message lists.
|
|
31
|
+
* The useEffect for animation handling is acceptable per DEVELOPMENT.md guidelines.
|
|
32
|
+
*/ const RichText = (props)=>{
|
|
33
|
+
const { wrapperRef, processedHtml, animated, styled, paragraphSpacing } = useRichText(props);
|
|
34
|
+
return /*#__PURE__*/ jsxRuntime_module_u(Wrapper, {
|
|
35
|
+
ref: wrapperRef,
|
|
36
|
+
animated: animated,
|
|
37
|
+
styled: styled,
|
|
38
|
+
paragraphSpacing: paragraphSpacing,
|
|
39
|
+
dangerouslySetInnerHTML: {
|
|
40
|
+
__html: processedHtml
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
function useRichText(param) {
|
|
45
|
+
let { text, animated = false, styled = true, paragraphSpacing = false, elementTransformers = DEFAULT_TRANSFORMERS, onAnimationEnd } = param;
|
|
46
|
+
const wrapperRef = hooks_module_A(null);
|
|
47
|
+
// useMemo is acceptable here since props are plain values, not signals.
|
|
48
|
+
// The expensive DOM processing (sanitization + animation wrapping) benefits from memoization.
|
|
49
|
+
const processedHtml = hooks_module_T(()=>{
|
|
50
|
+
const sanitizeConfig = {
|
|
51
|
+
ADD_ATTR: [
|
|
52
|
+
"target",
|
|
53
|
+
"rel"
|
|
54
|
+
],
|
|
55
|
+
AFTER_SANITIZE_ATTRIBUTES: (node)=>{
|
|
56
|
+
const tag = node.tagName.toLowerCase();
|
|
57
|
+
// Built-ins run first so a caller-supplied transformer can still override them.
|
|
58
|
+
const builtIn = EXTERNAL_LINK_TRANSFORMERS[tag];
|
|
59
|
+
builtIn == null ? void 0 : builtIn(node);
|
|
60
|
+
const fn = elementTransformers[tag];
|
|
61
|
+
fn == null ? void 0 : fn(node);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const sanitizedFragment = sanitizeHtml(text, sanitizeConfig);
|
|
65
|
+
if (animated) {
|
|
66
|
+
return processFragmentForAnimation(sanitizedFragment);
|
|
67
|
+
}
|
|
68
|
+
return processFragmentForSerialization(sanitizedFragment);
|
|
69
|
+
}, [
|
|
70
|
+
text,
|
|
71
|
+
animated,
|
|
72
|
+
elementTransformers
|
|
73
|
+
]);
|
|
74
|
+
// useLayoutEffect ensures the animationend listener is attached before paint,
|
|
75
|
+
// preventing short animations (e.g. 5-10ms) from completing before the listener exists.
|
|
76
|
+
hooks_module_(()=>{
|
|
77
|
+
if (!onAnimationEnd || !wrapperRef.current) return;
|
|
78
|
+
if (!animated) {
|
|
79
|
+
onAnimationEnd();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const elements = wrapperRef.current.querySelectorAll("[data-animated-word], [data-animated-element]");
|
|
83
|
+
if (elements.length === 0) {
|
|
84
|
+
onAnimationEnd();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const lastElement = elements[elements.length - 1];
|
|
88
|
+
lastElement.addEventListener("animationend", onAnimationEnd);
|
|
89
|
+
return ()=>lastElement.removeEventListener("animationend", onAnimationEnd);
|
|
90
|
+
}, [
|
|
91
|
+
animated,
|
|
92
|
+
onAnimationEnd,
|
|
93
|
+
processedHtml
|
|
94
|
+
]);
|
|
95
|
+
return {
|
|
96
|
+
wrapperRef,
|
|
97
|
+
processedHtml,
|
|
98
|
+
animated,
|
|
99
|
+
styled,
|
|
100
|
+
paragraphSpacing
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const VOID_ELEMENTS = new Set([
|
|
104
|
+
"area",
|
|
105
|
+
"base",
|
|
106
|
+
"br",
|
|
107
|
+
"col",
|
|
108
|
+
"embed",
|
|
109
|
+
"hr",
|
|
110
|
+
"img",
|
|
111
|
+
"input",
|
|
112
|
+
"link",
|
|
113
|
+
"meta",
|
|
114
|
+
"param",
|
|
115
|
+
"source",
|
|
116
|
+
"track",
|
|
117
|
+
"wbr"
|
|
118
|
+
]);
|
|
119
|
+
/**
|
|
120
|
+
* Serialize a DOM fragment to HTML string.
|
|
121
|
+
* Consumes the fragment (moves children out) - caller should not reuse it after this.
|
|
122
|
+
*/ function processFragmentForSerialization(fragment) {
|
|
123
|
+
const div = document.createElement("div");
|
|
124
|
+
div.appendChild(fragment.cloneNode(true));
|
|
125
|
+
return div.innerHTML;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Process a sanitized DOM fragment and return HTML string with animation metadata.
|
|
129
|
+
* Iterates through the DOM once and builds a string - no DOM mutations.
|
|
130
|
+
*/ function processFragmentForAnimation(fragment) {
|
|
131
|
+
const state = {
|
|
132
|
+
accumulatedDelay: 0,
|
|
133
|
+
result: ""
|
|
134
|
+
};
|
|
135
|
+
serializeNode(fragment, state);
|
|
136
|
+
return state.result;
|
|
137
|
+
}
|
|
138
|
+
function serializeNode(node, state) {
|
|
139
|
+
for (const child of node.childNodes){
|
|
140
|
+
if (child.nodeType === Node.TEXT_NODE) {
|
|
141
|
+
serializeTextNode(child.textContent || "", state);
|
|
142
|
+
} else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
143
|
+
serializeElement(child, state);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function serializeTextNode(text, state) {
|
|
148
|
+
const words = text.match(/\S+\s*/g);
|
|
149
|
+
if (!(words == null ? void 0 : words.length)) {
|
|
150
|
+
// Whitespace-only, preserve as-is
|
|
151
|
+
state.result += escapeHtml(text);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Preserve leading whitespace
|
|
155
|
+
const firstWordStart = text.indexOf(words[0]);
|
|
156
|
+
if (firstWordStart > 0) {
|
|
157
|
+
state.result += escapeHtml(text.slice(0, firstWordStart));
|
|
158
|
+
}
|
|
159
|
+
for (const word of words){
|
|
160
|
+
const duration = word.length * WORD_ANIMATION_DURATION_PER_CHARACTER;
|
|
161
|
+
state.result += '<span data-animated-word="true" style="--animation-duration: ' + duration + "ms; --accumulated-delay: " + state.accumulatedDelay + 'ms">' + escapeHtml(word) + "</span>";
|
|
162
|
+
state.accumulatedDelay += duration;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function serializeElement(element, state) {
|
|
166
|
+
const tag = element.tagName.toLowerCase();
|
|
167
|
+
// Build opening tag
|
|
168
|
+
state.result += "<" + tag;
|
|
169
|
+
// Copy existing attributes
|
|
170
|
+
for(let i = 0; i < element.attributes.length; i++){
|
|
171
|
+
const attr = element.attributes[i];
|
|
172
|
+
state.result += " " + attr.name + '="' + escapeAttr(attr.value) + '"';
|
|
173
|
+
}
|
|
174
|
+
// Add animation CSS vars for special elements
|
|
175
|
+
if (ELEMENT_ANIMATION_DURATION_MAP[tag]) {
|
|
176
|
+
const duration = ELEMENT_ANIMATION_DURATION_MAP[tag](element);
|
|
177
|
+
state.result += ' data-animated-element="true" style="--animation-duration: ' + duration + "ms; --accumulated-delay: " + state.accumulatedDelay + 'ms"';
|
|
178
|
+
state.accumulatedDelay += duration;
|
|
179
|
+
}
|
|
180
|
+
state.result += ">";
|
|
181
|
+
// Void elements have no children or closing tag
|
|
182
|
+
if (VOID_ELEMENTS.has(tag)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Recursively process children
|
|
186
|
+
serializeNode(element, state);
|
|
187
|
+
// Closing tag
|
|
188
|
+
state.result += "</" + tag + ">";
|
|
189
|
+
}
|
|
190
|
+
function escapeHtml(text) {
|
|
191
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
192
|
+
}
|
|
193
|
+
function escapeAttr(value) {
|
|
194
|
+
return value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Whether `href` points at a different origin over http(s).
|
|
198
|
+
*
|
|
199
|
+
* Resolved explicitly rather than read off the `href` IDL property, because these nodes live in a
|
|
200
|
+
* detached <template> whose base URL is not the page's. `document.baseURI` is the base the browser
|
|
201
|
+
* will actually use once the anchor is in the page, so a customer page carrying a cross-origin
|
|
202
|
+
* <base href> still classifies its relative links as external.
|
|
203
|
+
*/ function isCrossOriginHttpUrl(href) {
|
|
204
|
+
if (!href) return false;
|
|
205
|
+
try {
|
|
206
|
+
const url = new URL(href, document.baseURI);
|
|
207
|
+
// mailto:/tel: hand off to another app and would strand an empty tab behind.
|
|
208
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return false;
|
|
209
|
+
return url.origin !== window.location.origin;
|
|
210
|
+
} catch (unused) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function withRelTokens(existing) {
|
|
215
|
+
const tokens = new Set((existing != null ? existing : "").split(/\s+/).filter(Boolean));
|
|
216
|
+
tokens.add("noopener");
|
|
217
|
+
tokens.add("noreferrer");
|
|
218
|
+
return [
|
|
219
|
+
...tokens
|
|
220
|
+
].join(" ");
|
|
221
|
+
}
|
|
222
|
+
// Compute custom animation duration for elements
|
|
223
|
+
// The animation is the same it's a fade in of the entire element
|
|
224
|
+
const ELEMENT_ANIMATION_DURATION_MAP = {
|
|
225
|
+
// Fade in the li::marker before starting animation of the li text
|
|
226
|
+
li: ()=>30
|
|
227
|
+
};
|
|
228
|
+
const WORD_ANIMATION_DURATION_PER_CHARACTER = 5;
|
|
229
|
+
/**
|
|
230
|
+
* External-link glyph, reused from the icon in OpenedPositionSettings so the widget matches the
|
|
231
|
+
* rest of the app.
|
|
232
|
+
*
|
|
233
|
+
* Carried as a mask rather than a background image so the pseudo-element can be painted in
|
|
234
|
+
* currentColor and track whatever colour the link already has. Only the alpha channel is read, so
|
|
235
|
+
* the stroke colour baked into the markup here is arbitrary.
|
|
236
|
+
*/ const EXTERNAL_LINK_ICON_URL = "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8.5 1.5H10.5V3.5'/%3E%3Cpath d='M10.5 1.5L6.5 5.5'/%3E%3Cpath d='M5.5 2H3.75C2.7835 2 2 2.7835 2 3.75V8.25C2 9.2165 2.7835 10 3.75 10H8.25C9.2165 10 10 9.2165 10 8.25V6.5'/%3E%3C/svg%3E\")";
|
|
237
|
+
const Wrapper = factory_styled("div", {
|
|
238
|
+
base: {
|
|
239
|
+
fontFamily: "$inter",
|
|
240
|
+
// Flags links that leave the page. Keyed off the rendered target rather than the built-in
|
|
241
|
+
// cross-origin rule, so it also covers call sites that set target="_blank" themselves.
|
|
242
|
+
// Kept out of the `styled` variant so the glyph is never left unpositioned on unstyled callers.
|
|
243
|
+
"& a[target='_blank']::after": {
|
|
244
|
+
// U+2060 WORD JOINER forbids a line break on either side of itself, keeping the glyph on the
|
|
245
|
+
// same line as the last word. Must stay a non-atomic inline: browsers offer a break
|
|
246
|
+
// opportunity beside an atomic inline whatever the surrounding characters ask for, so the
|
|
247
|
+
// 12px glyph and its 2px gap come from padding rather than a width.
|
|
248
|
+
content: '"\\2060"',
|
|
249
|
+
paddingInlineStart: "[14px]",
|
|
250
|
+
backgroundColor: "[currentColor]",
|
|
251
|
+
maskImage: EXTERNAL_LINK_ICON_URL,
|
|
252
|
+
maskRepeat: "no-repeat",
|
|
253
|
+
maskPosition: "[right center]",
|
|
254
|
+
maskSize: "[12px 12px]",
|
|
255
|
+
WebkitMaskImage: EXTERNAL_LINK_ICON_URL,
|
|
256
|
+
WebkitMaskRepeat: "no-repeat",
|
|
257
|
+
WebkitMaskPosition: "[right center]",
|
|
258
|
+
WebkitMaskSize: "[12px 12px]"
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
variants: {
|
|
262
|
+
styled: {
|
|
263
|
+
true: {
|
|
264
|
+
"& b, & strong": {
|
|
265
|
+
fontWeight: "$bold"
|
|
266
|
+
},
|
|
267
|
+
"& a": {
|
|
268
|
+
color: "[inherit]",
|
|
269
|
+
fontSize: "14px",
|
|
270
|
+
fontWeight: "[inherit]",
|
|
271
|
+
lineHeight: "22px",
|
|
272
|
+
textDecoration: "underline"
|
|
273
|
+
},
|
|
274
|
+
"& ol, & ul": {
|
|
275
|
+
paddingBlock: "$sm"
|
|
276
|
+
},
|
|
277
|
+
"& table": {
|
|
278
|
+
borderCollapse: "collapse",
|
|
279
|
+
width: "[100%]",
|
|
280
|
+
marginBlock: "$sm"
|
|
281
|
+
},
|
|
282
|
+
"& th, & td": {
|
|
283
|
+
borderWidth: "1px",
|
|
284
|
+
borderStyle: "solid",
|
|
285
|
+
borderColor: "$gray.border",
|
|
286
|
+
paddingBlock: "$xs",
|
|
287
|
+
paddingInline: "$sm",
|
|
288
|
+
textAlign: "left",
|
|
289
|
+
verticalAlign: "top"
|
|
290
|
+
},
|
|
291
|
+
"& th": {
|
|
292
|
+
fontWeight: "$bold"
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
paragraphSpacing: {
|
|
297
|
+
true: {
|
|
298
|
+
"& p + p": {
|
|
299
|
+
marginTop: "$sm"
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
false: {}
|
|
303
|
+
},
|
|
304
|
+
animated: {
|
|
305
|
+
true: {
|
|
306
|
+
"& [data-animated-element]": {
|
|
307
|
+
opacity: 0,
|
|
308
|
+
animation: "q-fadeIn ease-out forwards",
|
|
309
|
+
animationDuration: "var(--animation-duration)",
|
|
310
|
+
animationDelay: "var(--accumulated-delay)"
|
|
311
|
+
},
|
|
312
|
+
"& span[data-animated-word]": {
|
|
313
|
+
position: "relative",
|
|
314
|
+
display: "inline-block",
|
|
315
|
+
whiteSpace: "pre-wrap"
|
|
316
|
+
},
|
|
317
|
+
// The word joiner gluing on the external-link glyph is disregarded next to an atomic inline,
|
|
318
|
+
// so the word the glyph follows cannot be one. Matched at any depth because formatting is
|
|
319
|
+
// preserved through serialization, which nests that word inside e.g. a <strong>.
|
|
320
|
+
"& a[target='_blank'] span[data-animated-word]:last-child": {
|
|
321
|
+
display: "inline"
|
|
322
|
+
},
|
|
323
|
+
// Apply styles to spans inside links (inline-block breaks inheritance)
|
|
324
|
+
"& a span[data-animated-word]": {
|
|
325
|
+
color: "[inherit]",
|
|
326
|
+
fontSize: "14px",
|
|
327
|
+
fontWeight: "[inherit]",
|
|
328
|
+
lineHeight: "22px",
|
|
329
|
+
textDecoration: "underline"
|
|
330
|
+
},
|
|
331
|
+
"& b span[data-animated-word], & strong span[data-animated-word]": {
|
|
332
|
+
fontWeight: "$bold"
|
|
333
|
+
},
|
|
334
|
+
"& span[data-animated-word]::after": {
|
|
335
|
+
content: '""',
|
|
336
|
+
position: "absolute",
|
|
337
|
+
zIndex: 1,
|
|
338
|
+
top: "[0]",
|
|
339
|
+
right: "[0]",
|
|
340
|
+
bottom: "[0]",
|
|
341
|
+
left: "[0]",
|
|
342
|
+
backgroundColor: "$white",
|
|
343
|
+
animationName: "q-revealWord",
|
|
344
|
+
animationDuration: "var(--animation-duration)",
|
|
345
|
+
animationTimingFunction: "ease-out",
|
|
346
|
+
animationFillMode: "forwards",
|
|
347
|
+
animationDelay: "var(--accumulated-delay)",
|
|
348
|
+
transformOrigin: "right",
|
|
349
|
+
transform: "scaleX(1)"
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
false: {}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
var RichText_ELEMENT_ANIMATION_DURATION_MAP = /* unused export */ undefined;
|
|
358
|
+
export { RichText, RichText_ELEMENT_ANIMATION_DURATION_MAP as ELEMENT_ANIMATION_DURATION_MAP, WORD_ANIMATION_DURATION_PER_CHARACTER };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import { VisuallyHidden } from "./VisuallyHidden.js";
|
|
3
|
+
|
|
4
|
+
/** @jsxImportSource preact */
|
|
5
|
+
|
|
6
|
+
const ScreenReaderHeading = (param)=>{
|
|
7
|
+
let { level, children } = param;
|
|
8
|
+
return /*#__PURE__*/ jsxRuntime_module_u(VisuallyHidden, {
|
|
9
|
+
children: /*#__PURE__*/ jsxRuntime_module_u("span", {
|
|
10
|
+
role: "heading",
|
|
11
|
+
"aria-level": level,
|
|
12
|
+
children: children
|
|
13
|
+
})
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { ScreenReaderHeading };
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsxRuntime_module_u, hooks_module_y, hooks_module_A } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { getCache } from "../../utils/multimodal_cache.js";
|
|
4
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
5
|
+
|
|
6
|
+
function _extends() {
|
|
7
|
+
_extends = Object.assign || function(target) {
|
|
8
|
+
for(var i = 1; i < arguments.length; i++){
|
|
9
|
+
var source = arguments[i];
|
|
10
|
+
for(var key in source){
|
|
11
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
12
|
+
target[key] = source[key];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return target;
|
|
17
|
+
};
|
|
18
|
+
return _extends.apply(this, arguments);
|
|
19
|
+
}
|
|
20
|
+
function _object_without_properties_loose(source, excluded) {
|
|
21
|
+
if (source == null) return {};
|
|
22
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
23
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
24
|
+
key = sourceKeys[i];
|
|
25
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
26
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
27
|
+
target[key] = source[key];
|
|
28
|
+
}
|
|
29
|
+
return target;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const Thumbnail = (props)=>{
|
|
36
|
+
const { videoUrl, timestamp } = props, attributes = _object_without_properties_loose(props, [
|
|
37
|
+
"videoUrl",
|
|
38
|
+
"timestamp"
|
|
39
|
+
]);
|
|
40
|
+
const canvasRef = useThumbnail({
|
|
41
|
+
videoUrl,
|
|
42
|
+
timestamp
|
|
43
|
+
});
|
|
44
|
+
return /*#__PURE__*/ jsxRuntime_module_u(ThumbnailCanvas, _extends({
|
|
45
|
+
ref: canvasRef,
|
|
46
|
+
role: "img"
|
|
47
|
+
}, attributes));
|
|
48
|
+
};
|
|
49
|
+
const VIDEO_CACHE_KEY = "components.helpers.useThumbnail.videos";
|
|
50
|
+
function useThumbnail(param) {
|
|
51
|
+
let { videoUrl, timestamp } = param;
|
|
52
|
+
// Video elements are cached by url so repeated thumbnails of the same video
|
|
53
|
+
// reuse a single loaded element instead of re-downloading it each time. The
|
|
54
|
+
// captured frame itself is not cached — re-seeking a buffered video and
|
|
55
|
+
// grabbing a fresh bitmap is cheap, and avoids holding decoded pixels around.
|
|
56
|
+
const videoCache = getCache(VIDEO_CACHE_KEY, ()=>new Map());
|
|
57
|
+
const canvasRef = hooks_module_A(null);
|
|
58
|
+
hooks_module_y(()=>{
|
|
59
|
+
let cancelled = false;
|
|
60
|
+
const render = async ()=>{
|
|
61
|
+
try {
|
|
62
|
+
const bitmap = await captureFrame(videoCache, videoUrl, timestamp);
|
|
63
|
+
if (!cancelled && canvasRef.current) {
|
|
64
|
+
paintBitmap(canvasRef.current, bitmap);
|
|
65
|
+
}
|
|
66
|
+
// Pixels are copied onto the canvas, so release the bitmap promptly.
|
|
67
|
+
bitmap.close();
|
|
68
|
+
} catch (unused) {
|
|
69
|
+
// Capture failed; nothing to paint.
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
void render();
|
|
73
|
+
return ()=>{
|
|
74
|
+
cancelled = true;
|
|
75
|
+
};
|
|
76
|
+
}, [
|
|
77
|
+
videoUrl,
|
|
78
|
+
timestamp,
|
|
79
|
+
videoCache
|
|
80
|
+
]);
|
|
81
|
+
return canvasRef;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Captures a single frame at `timestamp` by seeking the cached video element
|
|
85
|
+
* and snapshotting it into an ImageBitmap. Seeks are serialized per video so
|
|
86
|
+
* concurrent captures of different timestamps don't clobber each other.
|
|
87
|
+
*
|
|
88
|
+
* Requires the video host to send CORS headers; otherwise the frame is tainted
|
|
89
|
+
* and drawing it to a canvas throws a SecurityError.
|
|
90
|
+
*/ function captureFrame(videoCache, videoUrl, timestamp) {
|
|
91
|
+
const entry = getCachedVideo(videoCache, videoUrl);
|
|
92
|
+
const previous = entry.queue;
|
|
93
|
+
const capture = async ()=>{
|
|
94
|
+
// Wait for any in-flight capture so seeks stay serialized on the element.
|
|
95
|
+
await previous.catch(()=>undefined);
|
|
96
|
+
const video = await entry.ready;
|
|
97
|
+
await seekTo(video, timestamp);
|
|
98
|
+
// Snapshot the current frame; the bitmap is decoded pixels (no encoding).
|
|
99
|
+
return createImageBitmap(video);
|
|
100
|
+
};
|
|
101
|
+
// Claim the queue synchronously so the next capture waits for this one.
|
|
102
|
+
const result = capture();
|
|
103
|
+
entry.queue = result.catch(()=>undefined);
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
function getCachedVideo(videoCache, videoUrl) {
|
|
107
|
+
const existing = videoCache.get(videoUrl);
|
|
108
|
+
if (existing) return existing;
|
|
109
|
+
const load = async ()=>{
|
|
110
|
+
try {
|
|
111
|
+
return await loadVideo(videoUrl);
|
|
112
|
+
} catch (err) {
|
|
113
|
+
// Evict on failure so a later mount can retry loading the video.
|
|
114
|
+
videoCache.delete(videoUrl);
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const ready = load();
|
|
119
|
+
const entry = {
|
|
120
|
+
ready,
|
|
121
|
+
queue: ready
|
|
122
|
+
};
|
|
123
|
+
videoCache.set(videoUrl, entry);
|
|
124
|
+
return entry;
|
|
125
|
+
}
|
|
126
|
+
function loadVideo(videoUrl) {
|
|
127
|
+
return new Promise((resolve, reject)=>{
|
|
128
|
+
const video = document.createElement("video");
|
|
129
|
+
video.crossOrigin = "anonymous";
|
|
130
|
+
video.muted = true;
|
|
131
|
+
video.preload = "metadata";
|
|
132
|
+
video.addEventListener("loadedmetadata", ()=>resolve(video), {
|
|
133
|
+
once: true
|
|
134
|
+
});
|
|
135
|
+
video.addEventListener("error", ()=>{
|
|
136
|
+
var _video_error;
|
|
137
|
+
return reject((_video_error = video.error) != null ? _video_error : new Error("Failed to load video: " + videoUrl));
|
|
138
|
+
}, {
|
|
139
|
+
once: true
|
|
140
|
+
});
|
|
141
|
+
video.src = videoUrl;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function seekTo(video, timestamp) {
|
|
145
|
+
return new Promise((resolve, reject)=>{
|
|
146
|
+
// Clamp the requested time so we never seek past the final frame.
|
|
147
|
+
const target = Math.min(timestamp, Math.max(video.duration - 0.001, 0));
|
|
148
|
+
// Already positioned at the target frame (no "seeked" event would fire).
|
|
149
|
+
if (video.readyState >= video.HAVE_CURRENT_DATA && video.currentTime === target) {
|
|
150
|
+
resolve();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const onSeeked = ()=>{
|
|
154
|
+
video.removeEventListener("error", onError);
|
|
155
|
+
resolve();
|
|
156
|
+
};
|
|
157
|
+
const onError = ()=>{
|
|
158
|
+
var _video_error;
|
|
159
|
+
video.removeEventListener("seeked", onSeeked);
|
|
160
|
+
reject((_video_error = video.error) != null ? _video_error : new Error("Failed to seek video"));
|
|
161
|
+
};
|
|
162
|
+
video.addEventListener("seeked", onSeeked, {
|
|
163
|
+
once: true
|
|
164
|
+
});
|
|
165
|
+
video.addEventListener("error", onError, {
|
|
166
|
+
once: true
|
|
167
|
+
});
|
|
168
|
+
video.currentTime = target;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Draws a cached frame onto the canvas. `drawImage` copies the pixels, so the
|
|
173
|
+
* bitmap stays intact and can be reused by other mounted thumbnails.
|
|
174
|
+
*/ function paintBitmap(canvas, bitmap) {
|
|
175
|
+
canvas.width = bitmap.width;
|
|
176
|
+
canvas.height = bitmap.height;
|
|
177
|
+
const ctx = canvas.getContext("2d");
|
|
178
|
+
if (!ctx) return;
|
|
179
|
+
ctx.drawImage(bitmap, 0, 0);
|
|
180
|
+
}
|
|
181
|
+
const ThumbnailCanvas = styled("canvas", {
|
|
182
|
+
base: {
|
|
183
|
+
width: "[100%]",
|
|
184
|
+
height: "[100%]",
|
|
185
|
+
objectFit: "cover"
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
ThumbnailCanvas.displayName = "ThumbnailCanvas";
|
|
189
|
+
|
|
190
|
+
export { Thumbnail };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsxRuntime_module_u } from "../../../../js/multimodal_v2.js";
|
|
2
|
+
import "../../styled-system/jsx/index.js";
|
|
3
|
+
import { styled } from "../../styled-system/jsx/factory.js";
|
|
4
|
+
|
|
5
|
+
/** @jsxImportSource preact */
|
|
6
|
+
|
|
7
|
+
const properties = {
|
|
8
|
+
position: "absolute",
|
|
9
|
+
width: "1px",
|
|
10
|
+
height: "1px",
|
|
11
|
+
padding: "0",
|
|
12
|
+
margin: "-1px",
|
|
13
|
+
overflow: "hidden",
|
|
14
|
+
clip: "rect(0,0,0,0)",
|
|
15
|
+
border: "0"
|
|
16
|
+
};
|
|
17
|
+
const VISUALLY_HIDDEN_STYLE = Object.entries(properties).map((param)=>{
|
|
18
|
+
let [k, v] = param;
|
|
19
|
+
return k.replace(/[A-Z]/g, (m)=>"-" + m.toLowerCase()) + ":" + v;
|
|
20
|
+
}).join(";");
|
|
21
|
+
const VisuallyHidden = (param)=>{
|
|
22
|
+
let { children } = param;
|
|
23
|
+
return /*#__PURE__*/ jsxRuntime_module_u(Hidden, {
|
|
24
|
+
children: children
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const Hidden = styled("span", {
|
|
28
|
+
base: {
|
|
29
|
+
position: properties.position,
|
|
30
|
+
width: "[" + properties.width + "]",
|
|
31
|
+
height: "[" + properties.height + "]",
|
|
32
|
+
padding: "[" + properties.padding + "]",
|
|
33
|
+
margin: "[" + properties.margin + "]",
|
|
34
|
+
overflow: properties.overflow,
|
|
35
|
+
clip: "[" + properties.clip + "]",
|
|
36
|
+
border: "[" + properties.border + "]"
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
Hidden.displayName = "VisuallyHidden";
|
|
40
|
+
|
|
41
|
+
export { VISUALLY_HIDDEN_STYLE, VisuallyHidden };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders for custEv_contentClick, custEv_chatView, and custEv_contentImpression
|
|
3
|
+
* GTM events (Piper web tracking).
|
|
4
|
+
*/ /** Payload for custEv_chatView when user interacts with the initial Chat Invitation UI. */ function buildCustEvChatViewPayload(conversationId, formJoinIDUnique) {
|
|
5
|
+
if (formJoinIDUnique === void 0) formJoinIDUnique = "";
|
|
6
|
+
return {
|
|
7
|
+
event: "custEv_chatView",
|
|
8
|
+
chatExperience: "qualified",
|
|
9
|
+
nameCaptureCampaignId: "",
|
|
10
|
+
formJoinIDUnique,
|
|
11
|
+
conversationId
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Payload for custEv_contentImpression when rich content or links become visible in the viewport. */ function buildCustEvContentImpressionPayload(modules) {
|
|
15
|
+
return {
|
|
16
|
+
event: "custEv_contentImpression",
|
|
17
|
+
blade: {
|
|
18
|
+
id: "",
|
|
19
|
+
name: "qualified/customerstory",
|
|
20
|
+
position: "",
|
|
21
|
+
source: "qualified",
|
|
22
|
+
modules: modules.map((m)=>({
|
|
23
|
+
id: "",
|
|
24
|
+
name: m.name,
|
|
25
|
+
type: "",
|
|
26
|
+
url: m.url
|
|
27
|
+
}))
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** Payload for custEv_contentClick when a link in the widget is clicked (e.g. in a message body). */ function buildCustEvContentClickPayloadForLink(url, moduleName, clickedLinkText, conversationId) {
|
|
32
|
+
if (conversationId === void 0) conversationId = "";
|
|
33
|
+
return {
|
|
34
|
+
event: "custEv_contentClick",
|
|
35
|
+
blade: {
|
|
36
|
+
id: "",
|
|
37
|
+
conversationId,
|
|
38
|
+
name: "qualified/link",
|
|
39
|
+
position: "",
|
|
40
|
+
source: "qualified",
|
|
41
|
+
variant: "",
|
|
42
|
+
module: {
|
|
43
|
+
id: "",
|
|
44
|
+
name: moduleName,
|
|
45
|
+
type: "link",
|
|
46
|
+
position: "",
|
|
47
|
+
link: {
|
|
48
|
+
url,
|
|
49
|
+
text: clickedLinkText,
|
|
50
|
+
internalDriver: "qualified",
|
|
51
|
+
elementType: ""
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { buildCustEvChatViewPayload, buildCustEvContentClickPayloadForLink, buildCustEvContentImpressionPayload };
|