@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
package/src/proxy.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { _extends } from "../js/4101.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Property patching that stays reversible: replace a property on any object
|
|
5
|
+
* and keep reading what was there before.
|
|
6
|
+
*
|
|
7
|
+
* Docking is the heaviest user — it rewrites what the host page observes, so
|
|
8
|
+
* `window.innerWidth` reports the constrained content area and
|
|
9
|
+
* `document.documentElement.scrollTop` reads through `<body>` — while some of
|
|
10
|
+
* our own code still needs the browser's real value (the liveview shipper must
|
|
11
|
+
* send the true viewport size or the receiver applies the docked shrink a
|
|
12
|
+
* second time).
|
|
13
|
+
*
|
|
14
|
+
* Every patch installed through {@link applyProxy} saves the descriptor it
|
|
15
|
+
* replaced, and {@link originalOf} exposes the target as it was before we
|
|
16
|
+
* touched it. The alternative — reading a second, un-patched source for the
|
|
17
|
+
* same value — drifts: `visualViewport` can itself be patched by another
|
|
18
|
+
* integration, and a snapshot taken at startup goes stale on the first resize.
|
|
19
|
+
* A saved descriptor is the accessor the browser installed, so it stays
|
|
20
|
+
* correct for the lifetime of the page.
|
|
21
|
+
*/
|
|
22
|
+
/** Non-enumerable own property holding the read-only pre-patch view. */ const ORIGINAL_KEY = "__q_proxy_original";
|
|
23
|
+
/** Non-enumerable own property holding the descriptors we replaced. */ const SAVED_KEY = "__q_proxy_saved";
|
|
24
|
+
function isProxied(target) {
|
|
25
|
+
return Object.prototype.hasOwnProperty.call(target, ORIGINAL_KEY);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Attaches the (initially empty) bookkeeping to `target` and returns it.
|
|
29
|
+
* Idempotent — a target that already carries the bookkeeping keeps the
|
|
30
|
+
* descriptors saved by earlier patches.
|
|
31
|
+
*/ function initProxy(target) {
|
|
32
|
+
if (isProxied(target)) return target;
|
|
33
|
+
const saved = new Map();
|
|
34
|
+
// A saved `undefined` means the property had no own descriptor before we
|
|
35
|
+
// patched it, so the pre-patch value lives on the prototype chain —
|
|
36
|
+
// `innerWidth` is an accessor on `Window.prototype`, not an own property of
|
|
37
|
+
// the window. Native accessors brand-check their receiver, so these resolve
|
|
38
|
+
// against the real object rather than the proxy (which would throw "Illegal
|
|
39
|
+
// invocation"); reading the raw value is the point anyway.
|
|
40
|
+
const fromPrototype = (obj, key)=>{
|
|
41
|
+
const proto = Reflect.getPrototypeOf(obj);
|
|
42
|
+
return proto ? Reflect.get(proto, key, obj) : undefined;
|
|
43
|
+
};
|
|
44
|
+
const original = new Proxy(target, {
|
|
45
|
+
get (obj, key) {
|
|
46
|
+
if (!saved.has(key)) return Reflect.get(obj, key);
|
|
47
|
+
const descriptor = saved.get(key);
|
|
48
|
+
if (!descriptor) return fromPrototype(obj, key);
|
|
49
|
+
return descriptor.get ? descriptor.get.call(obj) : descriptor.value;
|
|
50
|
+
},
|
|
51
|
+
// Read-only view: writes belong on the target itself, where the patched
|
|
52
|
+
// property (and therefore the host page) can see them.
|
|
53
|
+
set () {
|
|
54
|
+
return false;
|
|
55
|
+
},
|
|
56
|
+
has (obj, key) {
|
|
57
|
+
if (!saved.has(key)) return Reflect.has(obj, key);
|
|
58
|
+
if (saved.get(key)) return true;
|
|
59
|
+
const proto = Reflect.getPrototypeOf(obj);
|
|
60
|
+
return proto ? Reflect.has(proto, key) : false;
|
|
61
|
+
},
|
|
62
|
+
getOwnPropertyDescriptor (obj, key) {
|
|
63
|
+
if (!saved.has(key)) return Reflect.getOwnPropertyDescriptor(obj, key);
|
|
64
|
+
const descriptor = saved.get(key);
|
|
65
|
+
// Every property we patch is defined as configurable, so reporting the
|
|
66
|
+
// saved descriptor as configurable keeps the proxy invariants satisfied.
|
|
67
|
+
return descriptor && _extends({}, descriptor, {
|
|
68
|
+
configurable: true
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(target, SAVED_KEY, {
|
|
73
|
+
value: saved,
|
|
74
|
+
enumerable: false,
|
|
75
|
+
writable: false,
|
|
76
|
+
configurable: true
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(target, ORIGINAL_KEY, {
|
|
79
|
+
value: original,
|
|
80
|
+
enumerable: false,
|
|
81
|
+
writable: false,
|
|
82
|
+
configurable: true
|
|
83
|
+
});
|
|
84
|
+
return target;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Defines `key` on `target` (always configurable, so a later patch or a restore
|
|
88
|
+
* can replace it) and records the descriptor it replaced.
|
|
89
|
+
*
|
|
90
|
+
* Best-effort by design, because the objects worth patching are the ones we
|
|
91
|
+
* don't control: a property the browser refuses to redefine — or a target that
|
|
92
|
+
* refuses the bookkeeping at all — is left as it was and nothing is recorded for
|
|
93
|
+
* it, so {@link originalOf} keeps reading its live value either way.
|
|
94
|
+
*/ function applyProxy(target, key, descriptor) {
|
|
95
|
+
// Installing the bookkeeping defines properties on the target, which a non-extensible host
|
|
96
|
+
// object refuses. That is the same "we don't control this object" case the patch itself is
|
|
97
|
+
// tolerant of, so it takes the same no-op path instead of aborting docking setup.
|
|
98
|
+
let proxied;
|
|
99
|
+
try {
|
|
100
|
+
proxied = initProxy(target);
|
|
101
|
+
} catch (unused) {
|
|
102
|
+
return target;
|
|
103
|
+
}
|
|
104
|
+
const replaced = Reflect.getOwnPropertyDescriptor(target, key);
|
|
105
|
+
try {
|
|
106
|
+
// `configurable` is forced last: a caller descriptor that pinned it to false would make the
|
|
107
|
+
// patched property non-configurable, and the original view reports saved descriptors as
|
|
108
|
+
// configurable (and returns the pre-patch value) — which the proxy invariants would then
|
|
109
|
+
// reject with a TypeError on the first read.
|
|
110
|
+
Object.defineProperty(target, key, _extends({}, descriptor, {
|
|
111
|
+
configurable: true
|
|
112
|
+
}));
|
|
113
|
+
} catch (unused) {
|
|
114
|
+
return proxied;
|
|
115
|
+
}
|
|
116
|
+
// Record only the first patch, so re-patching a property (or a second caller
|
|
117
|
+
// patching one we already own) still resolves to the pre-patch value.
|
|
118
|
+
const saved = proxied[SAVED_KEY];
|
|
119
|
+
if (!saved.has(key)) saved.set(key, replaced);
|
|
120
|
+
return proxied;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Read-only view of `target` as it was before {@link applyProxy} patched it.
|
|
124
|
+
* Properties nothing patched read straight through, so the view works as a
|
|
125
|
+
* general accessor — including on pages where no patch was ever installed, where
|
|
126
|
+
* it hands back the target itself rather than installing bookkeeping on an
|
|
127
|
+
* object we were only asked to read from.
|
|
128
|
+
*
|
|
129
|
+
* Read at the point of use rather than captured up front, since a view taken
|
|
130
|
+
* before the first patch is the bare target and won't look behind later ones.
|
|
131
|
+
*
|
|
132
|
+
* `Readonly` is the whole contract, and it is shallow: the proxy refuses writes
|
|
133
|
+
* (its `set` trap throws) but the bare target doesn't, and nested objects
|
|
134
|
+
* reached either way are the real ones. Writes belong on the target, where the
|
|
135
|
+
* patched property — and therefore the host page — can see them.
|
|
136
|
+
*
|
|
137
|
+
* Methods resolved through it are unbound (a plain `Reflect.get`), so call them
|
|
138
|
+
* against the target: `originalOf(win).matchMedia.call(win, query)`.
|
|
139
|
+
*/ function originalOf(target) {
|
|
140
|
+
return isProxied(target) ? target[ORIGINAL_KEY] : target;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
var proxy_initProxy = /* unused export */ undefined;
|
|
144
|
+
export { applyProxy, originalOf, proxy_initProxy as initProxy };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { defineSingletonHost } from "./singleton_host.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/** Tag name of the singleton root element. */ const QUALIFIED_ROOT_TAG_NAME = "q-root";
|
|
5
|
+
/**
|
|
6
|
+
* `<q-root>` — the one place everything Qualified injects into a customer page
|
|
7
|
+
* hangs off of. Purely a grouping element: a stable parent to append to, and a
|
|
8
|
+
* single selector for page-scanning code to skip.
|
|
9
|
+
*
|
|
10
|
+
* Boxless, so it neither becomes a stacking context that would swallow customer
|
|
11
|
+
* overrides like `#qualified-multimodal-host { z-index: 999 }`, nor a containing
|
|
12
|
+
* block its `position: fixed` occupants resolve against. No shadow root either,
|
|
13
|
+
* so children stay reachable from the docking pack's `html[q-docked]` rules.
|
|
14
|
+
*/ class QRootElement extends HTMLElement {
|
|
15
|
+
// Not the constructor, which may not touch attributes. Re-runs on every move,
|
|
16
|
+
// so an adopted root that lost its style is dressed again.
|
|
17
|
+
connectedCallback() {
|
|
18
|
+
this.style.cssText = "display:contents";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const findQualifiedRoot = defineSingletonHost(QUALIFIED_ROOT_TAG_NAME, QRootElement);
|
|
22
|
+
/**
|
|
23
|
+
* Returns the singleton `<q-root>`, creating it under `<html>` on first call.
|
|
24
|
+
*/ function getQualifiedRoot() {
|
|
25
|
+
const root = findQualifiedRoot();
|
|
26
|
+
// Under `<html>`: a page may replace `<body>` wholesale on navigation, and
|
|
27
|
+
// docking runs before `<body>` exists.
|
|
28
|
+
if (root.parentNode !== document.documentElement) {
|
|
29
|
+
document.documentElement.appendChild(root);
|
|
30
|
+
}
|
|
31
|
+
return root;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var qualified_root_QUALIFIED_ROOT_TAG_NAME = /* unused export */ undefined;
|
|
35
|
+
export { getQualifiedRoot, qualified_root_QUALIFIED_ROOT_TAG_NAME as QUALIFIED_ROOT_TAG_NAME };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const coercions = {
|
|
2
|
+
string: (v)=>v,
|
|
3
|
+
number: (v)=>{
|
|
4
|
+
const n = Number(v);
|
|
5
|
+
return Number.isNaN(n) ? undefined : n;
|
|
6
|
+
},
|
|
7
|
+
boolean: (v)=>{
|
|
8
|
+
if (v === "1" || v === "true") return true;
|
|
9
|
+
if (v === "0" || v === "false") return false;
|
|
10
|
+
return undefined;
|
|
11
|
+
},
|
|
12
|
+
enum: (v, param)=>{
|
|
13
|
+
let { allowed, aliases } = param;
|
|
14
|
+
var _ref;
|
|
15
|
+
const value = (_ref = aliases == null ? void 0 : aliases[v]) != null ? _ref : v;
|
|
16
|
+
if (!(allowed == null ? void 0 : allowed.includes(value))) return undefined;
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function coerceParts(parts, params) {
|
|
21
|
+
const results = [];
|
|
22
|
+
for(let i = 0; i < parts.length && i < params.length; i++){
|
|
23
|
+
const raw = parts[i];
|
|
24
|
+
const param = params[i];
|
|
25
|
+
if (!raw) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const coerced = coercions[param.type](raw, param);
|
|
29
|
+
if (coerced !== undefined) {
|
|
30
|
+
results.push({
|
|
31
|
+
name: param.name,
|
|
32
|
+
value: coerced
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
function parseQueryParams(value, schema) {
|
|
39
|
+
if (!value) return schema.dict ? {} : [];
|
|
40
|
+
const parts = value.split(",");
|
|
41
|
+
const coerced = coerceParts(parts, schema.params);
|
|
42
|
+
if (schema.dict) {
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const { name, value: val } of coerced){
|
|
45
|
+
result[name] = val;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
return coerced.map((param)=>{
|
|
50
|
+
let { value: val } = param;
|
|
51
|
+
return val;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { parseQueryParams };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { _extends } from "../js/4101.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const defaultOptions = {
|
|
5
|
+
memoizeShadowRoots: true,
|
|
6
|
+
shadowHostSelectorFilter: "*"
|
|
7
|
+
};
|
|
8
|
+
class ShadowDomHelper {
|
|
9
|
+
/**
|
|
10
|
+
* Get all shadow roots in the document.
|
|
11
|
+
*/ get shadowRoots() {
|
|
12
|
+
if (this.options.memoizeShadowRoots) {
|
|
13
|
+
var _this__shadowRoots;
|
|
14
|
+
return (_this__shadowRoots = this._shadowRoots) != null ? _this__shadowRoots : this._shadowRoots = this.getShadowRoots();
|
|
15
|
+
}
|
|
16
|
+
return this.getShadowRoots();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the first element in the document that matches the selector.
|
|
20
|
+
* Includes elements in shadow roots.
|
|
21
|
+
*/ querySelector(selector) {
|
|
22
|
+
let element = document.querySelector(selector);
|
|
23
|
+
if (element) return element;
|
|
24
|
+
for (const shadowRoot of this.shadowRoots){
|
|
25
|
+
element = shadowRoot.querySelector(selector);
|
|
26
|
+
if (element) return element;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get all elements in the document that match the selector.
|
|
32
|
+
* Includes elements in shadow roots.
|
|
33
|
+
*/ querySelectorAll(selector) {
|
|
34
|
+
const elementLists = [
|
|
35
|
+
document.querySelectorAll(selector)
|
|
36
|
+
];
|
|
37
|
+
for (const shadowRoot of this.shadowRoots){
|
|
38
|
+
elementLists.push(shadowRoot.querySelectorAll(selector));
|
|
39
|
+
}
|
|
40
|
+
const elements = [];
|
|
41
|
+
for (const elementList of elementLists){
|
|
42
|
+
elements.push(...elementList);
|
|
43
|
+
}
|
|
44
|
+
return elements;
|
|
45
|
+
}
|
|
46
|
+
getShadowRoots(root, set) {
|
|
47
|
+
if (root === void 0) root = document;
|
|
48
|
+
if (set === void 0) set = new Set();
|
|
49
|
+
root.querySelectorAll(this.options.shadowHostSelectorFilter).forEach((el)=>{
|
|
50
|
+
if (el.shadowRoot) {
|
|
51
|
+
set.add(el.shadowRoot);
|
|
52
|
+
this.getShadowRoots(el.shadowRoot, set);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return set;
|
|
56
|
+
}
|
|
57
|
+
constructor(options = {}){
|
|
58
|
+
this._shadowRoots = null;
|
|
59
|
+
this.options = _extends({}, defaultOptions, options);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { ShadowDomHelper };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create/adopt lifecycle for the singleton custom elements Qualified injects
|
|
3
|
+
* into a customer page. Under `src/`, the only import root the docking pack and
|
|
4
|
+
* the widget bundle share.
|
|
5
|
+
*/ /** Marks a host as ours, so adoption skips elements that share the tag. */ const SINGLETON_HOST_ATTRIBUTE = "data-q-host";
|
|
6
|
+
/**
|
|
7
|
+
* Builds the getter for a singleton host: registers `elementClass` if the tag is
|
|
8
|
+
* free, adopts a marked element already in the DOM, caches what it settles on.
|
|
9
|
+
* Mounting stays with the caller, setup with the element's own lifecycle.
|
|
10
|
+
*
|
|
11
|
+
* Adoption is a supported path, not a fallback: whichever bundle loads second
|
|
12
|
+
* finds the tag taken and an equivalent element in the DOM.
|
|
13
|
+
*/ function defineSingletonHost(tagName, elementClass) {
|
|
14
|
+
let cached = null;
|
|
15
|
+
return function getSingletonHost() {
|
|
16
|
+
// Trusted even while detached: the caller re-parents what it gets, and
|
|
17
|
+
// rebuilding would strand shadow roots nothing else rebuilds.
|
|
18
|
+
if (cached) return cached;
|
|
19
|
+
if (!customElements.get(tagName)) {
|
|
20
|
+
try {
|
|
21
|
+
customElements.define(tagName, elementClass);
|
|
22
|
+
} catch (unused) {
|
|
23
|
+
// Tag already claimed; take whatever that registration produces.
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const existing = document.querySelector(tagName + "[" + SINGLETON_HOST_ATTRIBUTE + "]");
|
|
27
|
+
if (existing instanceof HTMLElement) {
|
|
28
|
+
cached = existing;
|
|
29
|
+
return cached;
|
|
30
|
+
}
|
|
31
|
+
// Still whatever the registration produces; the mark only claims it as ours.
|
|
32
|
+
cached = document.createElement(tagName);
|
|
33
|
+
cached.setAttribute(SINGLETON_HOST_ATTRIBUTE, "");
|
|
34
|
+
return cached;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var singleton_host_SINGLETON_HOST_ATTRIBUTE = /* unused export */ undefined;
|
|
39
|
+
export { defineSingletonHost, singleton_host_SINGLETON_HOST_ATTRIBUTE as SINGLETON_HOST_ATTRIBUTE };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { extractTextContentSelector, extractHrefSelector } from "./utils.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Trigger {
|
|
5
|
+
get textContent() {
|
|
6
|
+
return extractTextContentSelector(this.selector);
|
|
7
|
+
}
|
|
8
|
+
get href() {
|
|
9
|
+
return extractHrefSelector(this.selector);
|
|
10
|
+
}
|
|
11
|
+
get isLegacyTrigger() {
|
|
12
|
+
return this.legacy;
|
|
13
|
+
}
|
|
14
|
+
// 1. just this button on this page
|
|
15
|
+
// 2. just this button across site
|
|
16
|
+
// 3. any button on this page that links to
|
|
17
|
+
// 4. any button on this page that says
|
|
18
|
+
// 5. any button on the entire site that links to
|
|
19
|
+
// 6. any button on the entire site that says
|
|
20
|
+
// Leave gaps in numbering for ease of extensibility to this ranking
|
|
21
|
+
get scopePrecedence() {
|
|
22
|
+
// legacy manual triggers always ranked last
|
|
23
|
+
if (this.legacy) return 100;
|
|
24
|
+
if (this.textContent === undefined && this.href === undefined && !this.global) {
|
|
25
|
+
return 10;
|
|
26
|
+
} else if (this.textContent === undefined && this.href === undefined && this.global) {
|
|
27
|
+
return 20;
|
|
28
|
+
} else if (this.href !== undefined && !this.global) {
|
|
29
|
+
return 30;
|
|
30
|
+
} else if (this.textContent !== undefined && !this.global) {
|
|
31
|
+
return 40;
|
|
32
|
+
} else if (this.href !== undefined && this.global) {
|
|
33
|
+
return 50;
|
|
34
|
+
} else if (this.textContent !== undefined && this.global) {
|
|
35
|
+
return 60;
|
|
36
|
+
} else {
|
|
37
|
+
return 99;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
constructor(props){
|
|
41
|
+
this.url = props.url;
|
|
42
|
+
this.selector = props.selector;
|
|
43
|
+
this.api = props.api;
|
|
44
|
+
this.global = props.global;
|
|
45
|
+
this.legacy = props.legacy;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { Trigger };
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import "../../js/4101.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const SWB_DATA_ATTRS = (/* unused pure expression or super */ null && ({
|
|
5
|
+
container: "data-qualified-container",
|
|
6
|
+
pickable: "data-qualified-pickable",
|
|
7
|
+
selected: "data-qualified-selector",
|
|
8
|
+
activeSelected: "data-qualified-active-selector",
|
|
9
|
+
invalidSelected: "data-qualified-invalid-selector",
|
|
10
|
+
invalidPickable: "data-qualified-invalid-pickable"
|
|
11
|
+
}));
|
|
12
|
+
const SWB_URL = "swb_url";
|
|
13
|
+
const BUTTON_LIKE_SELECTOR = "a, button, .btn, [role=button], input[type=button], input[type=submit]";
|
|
14
|
+
const FINDER_SETTINGS = (root)=>({
|
|
15
|
+
/**
|
|
16
|
+
* Root of search, defaults to document.body.
|
|
17
|
+
*/ root,
|
|
18
|
+
/**
|
|
19
|
+
* Function to check if this ID can be used.
|
|
20
|
+
*/ idName: (_name)=>true,
|
|
21
|
+
/**
|
|
22
|
+
* Function to check if this class name can be used.
|
|
23
|
+
*/ className: (_name)=>true,
|
|
24
|
+
/**
|
|
25
|
+
* Function to check if tag name can be used.
|
|
26
|
+
*/ tagName: (_name)=>true,
|
|
27
|
+
/**
|
|
28
|
+
* Function to check if attr name can be used. Don't rely on attributes because it makes
|
|
29
|
+
* the setup too brittle. We might consider making this a team level configuration in the future.
|
|
30
|
+
*/ attr: (_name, _value)=>false,
|
|
31
|
+
/**
|
|
32
|
+
* Minimum length of levels in fining selector. Starts from 1.
|
|
33
|
+
* For more robust selectors give this param value around 4-5 depending on depth of you DOM tree.
|
|
34
|
+
* If finder hits the root, this param is ignored.
|
|
35
|
+
* */ seedMinLength: 5,
|
|
36
|
+
/**
|
|
37
|
+
* Minimum length for optimising selector. Starts from 2.
|
|
38
|
+
* For example selector body > div > div > p can be optimised to body p.
|
|
39
|
+
*/ optimizedMinLength: 2,
|
|
40
|
+
/**
|
|
41
|
+
* Max number of selectors to check before falling into nth-child usage.
|
|
42
|
+
* Checking for uniqueness of selector is very costly operation,
|
|
43
|
+
* if you have DOM tree depth of 5, with 5 classes on each level,
|
|
44
|
+
* that gives you more than 3k selectors to check.
|
|
45
|
+
* Default 1000 is good enough in most cases.
|
|
46
|
+
*/ threshold: 1000,
|
|
47
|
+
/**
|
|
48
|
+
* Max number of tries for the optimization.
|
|
49
|
+
* This is a trade-off between optimization and efficiency.
|
|
50
|
+
* Default 10_000 is good enough in most cases.
|
|
51
|
+
*/ maxNumberOfTries: 10000
|
|
52
|
+
});
|
|
53
|
+
const SELECTOR_REGEXES = {
|
|
54
|
+
href: /\[href="([^"]+)"\]/,
|
|
55
|
+
text: /a:contains\("([^"]+)"\)/
|
|
56
|
+
};
|
|
57
|
+
const extractTextContentSelector = (selector)=>{
|
|
58
|
+
var _selector_match;
|
|
59
|
+
return (_selector_match = selector.match(SELECTOR_REGEXES.text)) == null ? void 0 : _selector_match[1];
|
|
60
|
+
};
|
|
61
|
+
const extractHrefSelector = (selector)=>{
|
|
62
|
+
var _selector_match;
|
|
63
|
+
return (_selector_match = selector.match(SELECTOR_REGEXES.href)) == null ? void 0 : _selector_match[1];
|
|
64
|
+
};
|
|
65
|
+
const matchesTextContent = (tag, textContent)=>{
|
|
66
|
+
var _tag_textContent_trim_toLowerCase, _tag_textContent_trim, _tag_textContent;
|
|
67
|
+
// Remove " " chars from tag.textContent, since it's visually identical to " " (space)
|
|
68
|
+
const tagContentWithoutNbsp = (_tag_textContent = tag.textContent) == null ? void 0 : (_tag_textContent_trim = _tag_textContent.trim()) == null ? void 0 : (_tag_textContent_trim_toLowerCase = _tag_textContent_trim.toLowerCase()) == null ? void 0 : _tag_textContent_trim_toLowerCase.replaceAll(/\xA0/g, " ");
|
|
69
|
+
return tagContentWithoutNbsp === textContent.toLowerCase();
|
|
70
|
+
};
|
|
71
|
+
const matchesSelector = (target, selector)=>{
|
|
72
|
+
const keySelector = selector + ", " + selector + " *";
|
|
73
|
+
const matchResult = target.matches(keySelector);
|
|
74
|
+
return matchResult;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* NOTE: visitor/snippet-side code should _not_ use this function or `finder` to detect selectors
|
|
78
|
+
* @param element
|
|
79
|
+
* @returns CSS selector
|
|
80
|
+
*/ const guessSelector = (element, root)=>{
|
|
81
|
+
if (root === void 0) root = document.body;
|
|
82
|
+
try {
|
|
83
|
+
return finder(element, FINDER_SETTINGS(root));
|
|
84
|
+
} catch (e) {
|
|
85
|
+
// eslint-disable-next-line no-console
|
|
86
|
+
console.error("Qualified: Error finding css selector of " + element.outerHTML + ": " + e);
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
// 1. just this button on this page
|
|
91
|
+
// 2. just this button across site
|
|
92
|
+
// 3. any button on this page that links to
|
|
93
|
+
// 4. any button on this page that says
|
|
94
|
+
// 5. any button on the entire site that links to
|
|
95
|
+
// 6. any button on the entire site that says
|
|
96
|
+
const triggerPrecedenceFn = (a, b)=>{
|
|
97
|
+
if (a.scopePrecedence < b.scopePrecedence) {
|
|
98
|
+
return -1;
|
|
99
|
+
} else if (a.scopePrecedence === b.scopePrecedence) {
|
|
100
|
+
return 0;
|
|
101
|
+
} else {
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const sortTriggers = (triggers)=>triggers.sort((a, b)=>triggerPrecedenceFn(a, b));
|
|
106
|
+
const isMatchingSelector = (target, selector)=>{
|
|
107
|
+
const textContent = extractTextContentSelector(selector);
|
|
108
|
+
return textContent ? matchesTextContent(target, textContent) : matchesSelector(target, selector);
|
|
109
|
+
};
|
|
110
|
+
const Q_DEBUG = "q_debug";
|
|
111
|
+
const isDebugMode = ()=>{
|
|
112
|
+
return new URLSearchParams(document.location.search).has(Q_DEBUG);
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Note that this cannot be used inside the SWB child iframe since you can't access query params of a parent frame
|
|
116
|
+
*/ const _debugLog = (msg, context)=>{
|
|
117
|
+
if (context === void 0) context = {};
|
|
118
|
+
try {
|
|
119
|
+
if (isDebugMode()) {
|
|
120
|
+
const prefix = Object.keys(context).length > 0 ? "[" + Object.entries(context).map((param)=>{
|
|
121
|
+
let [key, value] = param;
|
|
122
|
+
return key + "=" + value;
|
|
123
|
+
}).join(" ") + "] " : "";
|
|
124
|
+
// eslint-disable-next-line no-console
|
|
125
|
+
console.log("" + prefix + msg);
|
|
126
|
+
}
|
|
127
|
+
} catch (e) {
|
|
128
|
+
// eslint-disable-next-line no-console
|
|
129
|
+
console.error(e);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Checks if the element is within a qualified element.
|
|
134
|
+
* Qualified elements are:
|
|
135
|
+
* - Qualified forms
|
|
136
|
+
* - Website offers
|
|
137
|
+
* - Multimodal host
|
|
138
|
+
*/ function isWithinQualifiedElement(element) {
|
|
139
|
+
return element.matches(":is(qualified-form, [data-qualified-offer-host-location], #qualified-multimodal-host) *");
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var utils_Q_DEBUG = /* unused export */ undefined;
|
|
143
|
+
var utils_SELECTOR_REGEXES = /* unused export */ undefined;
|
|
144
|
+
var utils_SWB_DATA_ATTRS = /* unused export */ undefined;
|
|
145
|
+
var utils_SWB_URL = /* unused export */ undefined;
|
|
146
|
+
var utils_guessSelector = /* unused export */ undefined;
|
|
147
|
+
var utils_matchesSelector = /* unused export */ undefined;
|
|
148
|
+
var utils_matchesTextContent = /* unused export */ undefined;
|
|
149
|
+
export { BUTTON_LIKE_SELECTOR, _debugLog, extractHrefSelector, extractTextContentSelector, isDebugMode, isMatchingSelector, isWithinQualifiedElement, sortTriggers, utils_Q_DEBUG as Q_DEBUG, utils_SELECTOR_REGEXES as SELECTOR_REGEXES, utils_SWB_DATA_ATTRS as SWB_DATA_ATTRS, utils_SWB_URL as SWB_URL, utils_guessSelector as guessSelector, utils_matchesSelector as matchesSelector, utils_matchesTextContent as matchesTextContent };
|
package/src/string.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __webpack_require__ } from "../js/runtime.js";
|
|
2
|
+
import "../js/4101.js";
|
|
3
|
+
|
|
4
|
+
__webpack_require__("98688");
|
|
5
|
+
|
|
6
|
+
// "string" to "String"
|
|
7
|
+
function capitalize(str) {
|
|
8
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
9
|
+
}
|
|
10
|
+
// Given string is a singular noun, returns the plural form if `n` !== 1
|
|
11
|
+
//
|
|
12
|
+
function pluralize(str, n) {
|
|
13
|
+
if (n === undefined || n !== 1) {
|
|
14
|
+
if (str.lastIndexOf("s") === str.length - 1) {
|
|
15
|
+
return "" + str + "es";
|
|
16
|
+
} else if (str.match(/.+[^aeiou]y$/)) {
|
|
17
|
+
return "" + str.slice(0, -1) + "ies";
|
|
18
|
+
} else {
|
|
19
|
+
return "" + str + "s";
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
return str;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// "Hello World" to "hello-world"
|
|
26
|
+
function kebabify(str) {
|
|
27
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
28
|
+
}
|
|
29
|
+
function humanize(str) {
|
|
30
|
+
return capitalize(str.replace(/([a-z])([A-Z])/g, "$1 $2").toLowerCase());
|
|
31
|
+
}
|
|
32
|
+
function toBase64(str) {
|
|
33
|
+
return btoa(unescape(encodeURIComponent(str)));
|
|
34
|
+
}
|
|
35
|
+
function fromBase64(str) {
|
|
36
|
+
return decodeURIComponent(escape(atob(str)));
|
|
37
|
+
}
|
|
38
|
+
// "hello-world" or "helloWorld" to "Hello World"
|
|
39
|
+
function titleize(str) {
|
|
40
|
+
return str.split(/[\s_]|(?=[A-Z])/g).map((w)=>capitalize(w)).join(" ");
|
|
41
|
+
}
|
|
42
|
+
// Checks if two string arrays are equivalent, ignoring element order.
|
|
43
|
+
function areStringArraysEquivalent(arr1, arr2) {
|
|
44
|
+
return arr1.length === arr2.length && _isEqual(arr1.sort(), arr2.sort());
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var string_areStringArraysEquivalent = /* unused export */ undefined;
|
|
48
|
+
var string_capitalize = /* unused export */ undefined;
|
|
49
|
+
var string_humanize = /* unused export */ undefined;
|
|
50
|
+
var string_kebabify = /* unused export */ undefined;
|
|
51
|
+
var string_pluralize = /* unused export */ undefined;
|
|
52
|
+
var string_titleize = /* unused export */ undefined;
|
|
53
|
+
export { fromBase64, string_areStringArraysEquivalent as areStringArraysEquivalent, string_capitalize as capitalize, string_humanize as humanize, string_kebabify as kebabify, string_pluralize as pluralize, string_titleize as titleize, toBase64 };
|
package/src/timezone.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
function browserIntlSupport() {
|
|
2
|
+
try {
|
|
3
|
+
Intl;
|
|
4
|
+
} catch (e) {
|
|
5
|
+
return 0;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
Intl.DateTimeFormat();
|
|
9
|
+
} catch (e) {
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
Intl.DateTimeFormat().resolvedOptions();
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
19
|
+
} catch (e) {
|
|
20
|
+
return 3;
|
|
21
|
+
}
|
|
22
|
+
const zone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
23
|
+
if (zone && zone.length > 3) {
|
|
24
|
+
return 5;
|
|
25
|
+
}
|
|
26
|
+
return 4;
|
|
27
|
+
}
|
|
28
|
+
function guessTimeZone() {
|
|
29
|
+
try {
|
|
30
|
+
const zone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
31
|
+
// Filter out some non-sensical values. https://github.com/moment/moment-timezone/issues/423
|
|
32
|
+
// (Note not using moment-timezone here cause it's huge, >200k)
|
|
33
|
+
if (zone && zone.length > 3) {
|
|
34
|
+
return zone;
|
|
35
|
+
}
|
|
36
|
+
} catch (e) {
|
|
37
|
+
// Browser doesn't have Intl, nbd
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function getLocalTimeZoneShort() {
|
|
41
|
+
try {
|
|
42
|
+
const formatter = new Intl.DateTimeFormat(undefined, {
|
|
43
|
+
timeZoneName: "short"
|
|
44
|
+
}), parts = formatter.formatToParts(Date.now()), tzPart = parts.find((param)=>{
|
|
45
|
+
let { type } = param;
|
|
46
|
+
return type === "timeZoneName";
|
|
47
|
+
});
|
|
48
|
+
if (tzPart) {
|
|
49
|
+
return tzPart.value;
|
|
50
|
+
}
|
|
51
|
+
} catch (e) {
|
|
52
|
+
// Browser doesn't have Intl, nbd
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
var timezone_getLocalTimeZoneShort = /* unused export */ undefined;
|
|
57
|
+
export { browserIntlSupport, guessTimeZone, timezone_getLocalTimeZoneShort as getLocalTimeZoneShort };
|