{"version":3,"file":"static/js/main.6fe67e98.js","mappings":"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","sources":["../node_modules/@sentry/src/env.ts","../node_modules/@sentry/src/node.ts","../node_modules/aos/dist/aos.js","../node_modules/cookie/index.js","../node_modules/copy-to-clipboard/index.js","../node_modules/countup.js/dist/countUp.min.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/jquery/dist/jquery.js","../node_modules/object-assign/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-copy-to-clipboard/src/Component.js","../node_modules/react-copy-to-clipboard/src/index.js","../node_modules/react-countup/build/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-fast-compare/index.js","../node_modules/react-ga4/dist/format.js","../node_modules/react-ga4/dist/ga4.js","../node_modules/react-ga4/dist/gtag.js","../node_modules/react-ga4/dist/index.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react-side-effect/lib/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/toggle-selection/index.js","../node_modules/classnames/index.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/harmony module decorator","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/@sentry/src/debug-build.ts","../node_modules/@sentry/src/worldwide.ts","../node_modules/@sentry/src/logger.ts","../node_modules/@sentry/src/is.ts","../node_modules/@sentry/src/browser.ts","../node_modules/@sentry/src/string.ts","../node_modules/@sentry/src/object.ts","../node_modules/@sentry/src/misc.ts","../node_modules/@sentry/src/syncpromise.ts","../node_modules/@sentry/src/eventProcessors.ts","../node_modules/@sentry/src/time.ts","../node_modules/@sentry/src/constants.ts","../node_modules/@sentry/src/session.ts","../node_modules/@sentry/src/stacktrace.ts","../node_modules/@sentry/src/normalize.ts","../node_modules/@sentry/src/memo.ts","../node_modules/@sentry/src/baggage.ts","../node_modules/@sentry/src/tracing.ts","../node_modules/@sentry/src/utils/spanUtils.ts","../node_modules/@sentry/src/utils/prepareEvent.ts","../node_modules/@sentry/src/scope.ts","../node_modules/@sentry/src/exports.ts","../node_modules/@sentry/src/utils/getRootSpan.ts","../node_modules/@sentry/src/tracing/dynamicSamplingContext.ts","../node_modules/@sentry/src/utils/applyScopeDataToEvent.ts","../node_modules/@sentry/src/version.ts","../node_modules/@sentry/src/hub.ts","../node_modules/@sentry/src/integration.ts","../node_modules/@sentry/src/integrations/inboundfilters.ts","../node_modules/@sentry/src/integrations/functiontostring.ts","../node_modules/@sentry/src/sdk.ts","../node_modules/@sentry/src/supports.ts","../node_modules/@sentry/src/vendor/supportsHistory.ts","../node_modules/@sentry/src/instrument/_handlers.ts","../node_modules/@sentry/src/instrument/history.ts","../node_modules/@sentry/src/dsn.ts","../node_modules/@sentry/src/envelope.ts","../node_modules/@sentry/src/error.ts","../node_modules/@sentry/src/api.ts","../node_modules/@sentry/src/metrics/envelope.ts","../node_modules/@sentry/src/metrics/utils.ts","../node_modules/@sentry/src/baseclient.ts","../node_modules/@sentry/src/utils/sdkMetadata.ts","../node_modules/src/debug-build.ts","../node_modules/src/eventbuilder.ts","../node_modules/src/helpers.ts","../node_modules/src/client.ts","../node_modules/src/userfeedback.ts","../node_modules/@sentry/src/clientreport.ts","../node_modules/@sentry/src/instrument/console.ts","../node_modules/@sentry/src/instrument/dom.ts","../node_modules/@sentry/src/instrument/xhr.ts","../node_modules/@sentry/src/instrument/fetch.ts","../node_modules/@sentry/src/severity.ts","../node_modules/@sentry/src/url.ts","../node_modules/src/integrations/breadcrumbs.ts","../node_modules/src/integrations/dedupe.ts","../node_modules/@sentry/src/instrument/globalError.ts","../node_modules/@sentry/src/instrument/globalUnhandledRejection.ts","../node_modules/src/integrations/globalhandlers.ts","../node_modules/src/integrations/httpcontext.ts","../node_modules/@sentry/src/aggregate-errors.ts","../node_modules/src/integrations/linkederrors.ts","../node_modules/src/integrations/trycatch.ts","../node_modules/src/stack-parsers.ts","../node_modules/@sentry/src/promisebuffer.ts","../node_modules/@sentry/src/ratelimit.ts","../node_modules/@sentry/src/transports/base.ts","../node_modules/src/transports/utils.ts","../node_modules/src/transports/fetch.ts","../node_modules/src/transports/xhr.ts","../node_modules/src/sdk.ts","../node_modules/@sentry/src/metrics/metric-summary.ts","../node_modules/@sentry/src/semanticAttributes.ts","../node_modules/@sentry/src/tracing/spanstatus.ts","../node_modules/@sentry/src/tracing/span.ts","../node_modules/@sentry/src/utils/hasTracingEnabled.ts","../node_modules/@sentry/src/tracing/trace.ts","../node_modules/@sentry/src/tracing/transaction.ts","../node_modules/@sentry/src/tracing/idletransaction.ts","../node_modules/@sentry/src/tracing/utils.ts","../node_modules/@sentry/src/tracing/errors.ts","../node_modules/@sentry/src/tracing/sampling.ts","../node_modules/@sentry/src/tracing/hubextensions.ts","../node_modules/@sentry-internal/src/common/debug-build.ts","../node_modules/@sentry-internal/src/browser/types.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/bindReporter.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/getNavigationEntry.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/getActivationStart.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/initMetric.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/generateUniqueID.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/observe.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/onHidden.ts","../node_modules/@sentry-internal/src/browser/web-vitals/getCLS.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/getVisibilityWatcher.ts","../node_modules/@sentry-internal/src/browser/web-vitals/getFID.ts","../node_modules/@sentry-internal/src/browser/web-vitals/lib/polyfills/interactionCountPolyfill.ts","../node_modules/@sentry-internal/src/browser/web-vitals/getINP.ts","../node_modules/@sentry-internal/src/browser/web-vitals/getLCP.ts","../node_modules/@sentry-internal/src/browser/web-vitals/onTTFB.ts","../node_modules/@sentry-internal/src/browser/instrument.ts","../node_modules/@sentry/src/span.ts","../node_modules/@sentry-internal/src/browser/metrics/utils.ts","../node_modules/@sentry-internal/src/browser/metrics/index.ts","../node_modules/@sentry/src/tracing/measurement.ts","../node_modules/@sentry-internal/src/common/fetch.ts","../node_modules/@sentry-internal/src/browser/request.ts","../node_modules/@sentry-internal/src/browser/browsertracing.ts","../node_modules/@sentry-internal/src/browser/router.ts","../node_modules/@sentry/src/buildPolyfills/_optionalChain.ts","../node_modules/@sentry/src/utils/isSentryRequestUrl.ts","../node_modules/@sentry/src/isBrowser.ts","../node_modules/src/constants.ts","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/@sentry/src/buildPolyfills/_nullishCoalesce.ts","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/src/types/rrweb.ts","../node_modules/src/util/timestamp.ts","../node_modules/src/coreHandlers/util/addBreadcrumbEvent.ts","../node_modules/src/coreHandlers/util/domUtils.ts","../node_modules/src/coreHandlers/util/onWindowOpen.ts","../node_modules/src/coreHandlers/handleClick.ts","../node_modules/src/util/createBreadcrumb.ts","../../node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/src/coreHandlers/util/getAttributesToRecord.ts","../node_modules/src/coreHandlers/handleDom.ts","../node_modules/src/coreHandlers/handleKeyboardEvent.ts","../node_modules/src/util/createPerformanceEntries.ts","../node_modules/src/coreHandlers/performanceObserver.ts","../replay-worker/build/npm/esm/worker.ts","../node_modules/src/util/log.ts","../node_modules/src/eventBuffer/error.ts","../node_modules/src/eventBuffer/EventBufferArray.ts","../node_modules/src/eventBuffer/WorkerHandler.ts","../node_modules/src/eventBuffer/EventBufferCompressionWorker.ts","../node_modules/src/eventBuffer/EventBufferProxy.ts","../node_modules/src/eventBuffer/index.ts","../replay-worker/build/npm/esm/index.js","../node_modules/src/util/hasSessionStorage.ts","../node_modules/src/session/clearSession.ts","../node_modules/src/util/isSampled.ts","../node_modules/src/session/Session.ts","../node_modules/src/session/saveSession.ts","../node_modules/src/session/createSession.ts","../node_modules/src/util/isExpired.ts","../node_modules/src/util/isSessionExpired.ts","../node_modules/src/session/shouldRefreshSession.ts","../node_modules/src/session/loadOrCreateSession.ts","../node_modules/src/session/fetchSession.ts","../node_modules/src/util/addEvent.ts","../node_modules/src/util/eventUtils.ts","../node_modules/src/coreHandlers/handleAfterSendEvent.ts","../node_modules/src/coreHandlers/handleBeforeSendEvent.ts","../node_modules/src/coreHandlers/handleGlobalEvent.ts","../node_modules/src/coreHandlers/util/addFeedbackBreadcrumb.ts","../node_modules/src/util/isRrwebError.ts","../node_modules/src/coreHandlers/util/shouldSampleForBufferEvent.ts","../node_modules/src/util/createPerformanceSpans.ts","../node_modules/src/coreHandlers/handleHistory.ts","../node_modules/src/coreHandlers/util/addNetworkBreadcrumb.ts","../node_modules/src/util/shouldFilterRequest.ts","../node_modules/src/coreHandlers/handleXhr.ts","../node_modules/src/coreHandlers/util/networkUtils.ts","../node_modules/src/coreHandlers/util/fetchUtils.ts","../node_modules/src/coreHandlers/util/xhrUtils.ts","../node_modules/src/coreHandlers/handleNetworkBreadcrumbs.ts","../node_modules/src/coreHandlers/handleFetch.ts","../node_modules/src/coreHandlers/handleScope.ts","../node_modules/src/util/addGlobalListeners.ts","../node_modules/src/util/addMemoryEntry.ts","../node_modules/src/util/handleRecordingEmit.ts","../node_modules/src/util/sendReplayRequest.ts","../node_modules/src/util/prepareRecordingData.ts","../node_modules/src/util/prepareReplayEvent.ts","../node_modules/src/util/createReplayEnvelope.ts","../node_modules/src/util/sendReplay.ts","../node_modules/src/util/throttle.ts","../node_modules/src/replay.ts","../node_modules/src/util/debounce.ts","../node_modules/src/util/getPrivacyOptions.ts","../node_modules/src/integration.ts","../node_modules/src/util/maskAttribute.ts","layouts/ScrollToTop.js","layouts/Menu.js","layouts/Header2.js","layouts/Footer2.js","pages/Error.js","pages/UnderMaintenance.js","../node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/dom-helpers/esm/addEventListener.js","../node_modules/dom-helpers/esm/ownerDocument.js","../node_modules/dom-helpers/esm/removeEventListener.js","../node_modules/dom-helpers/esm/scrollbarSize.js","../node_modules/@restart/hooks/esm/useCommittedRef.js","../node_modules/@restart/hooks/esm/useEventCallback.js","../node_modules/@restart/hooks/esm/useMergedRefs.js","../node_modules/@restart/hooks/esm/useWillUnmount.js","../node_modules/@restart/hooks/esm/useUpdatedRef.js","../node_modules/dom-helpers/esm/getComputedStyle.js","../node_modules/dom-helpers/esm/ownerWindow.js","../node_modules/dom-helpers/esm/hyphenate.js","../node_modules/dom-helpers/esm/hyphenateStyle.js","../node_modules/dom-helpers/esm/isTransform.js","../node_modules/dom-helpers/esm/css.js","../node_modules/dom-helpers/esm/listen.js","../node_modules/dom-helpers/esm/transitionEnd.js","../node_modules/dom-helpers/esm/triggerEvent.js","../node_modules/dom-helpers/esm/activeElement.js","../node_modules/dom-helpers/esm/contains.js","../node_modules/@restart/ui/esm/ModalManager.js","../node_modules/@restart/ui/esm/DataKey.js","../node_modules/@restart/ui/esm/getScrollbarWidth.js","../node_modules/@restart/ui/esm/useWindow.js","../node_modules/@restart/ui/esm/useWaitForDOMRef.js","../node_modules/@restart/hooks/esm/useIsomorphicEffect.js","../node_modules/@restart/ui/esm/NoopTransition.js","../node_modules/@restart/ui/esm/useRTGTransitionProps.js","../node_modules/@restart/ui/esm/utils.js","../node_modules/@restart/ui/esm/RTGTransition.js","../node_modules/@restart/ui/esm/ImperativeTransition.js","../node_modules/@restart/ui/esm/Modal.js","../node_modules/@restart/hooks/esm/useMounted.js","../node_modules/@restart/hooks/esm/usePrevious.js","../node_modules/dom-helpers/esm/querySelectorAll.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/react-bootstrap/esm/BootstrapModalManager.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/hasClass.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-bootstrap/esm/transitionEndListener.js","../node_modules/react-bootstrap/esm/TransitionWrapper.js","../node_modules/react-bootstrap/esm/safeFindDOMNode.js","../node_modules/react-bootstrap/esm/Fade.js","../node_modules/react-bootstrap/esm/triggerBrowserReflow.js","../node_modules/react-bootstrap/esm/ThemeProvider.js","../node_modules/react-bootstrap/esm/ModalBody.js","../node_modules/react-bootstrap/esm/ModalContext.js","../node_modules/react-bootstrap/esm/ModalDialog.js","../node_modules/react-bootstrap/esm/ModalFooter.js","../node_modules/react-bootstrap/esm/CloseButton.js","../node_modules/react-bootstrap/esm/AbstractModalHeader.js","../node_modules/react-bootstrap/esm/ModalHeader.js","../node_modules/react-bootstrap/esm/ModalTitle.js","../node_modules/react-bootstrap/esm/divWithClassName.js","../node_modules/react-bootstrap/esm/Modal.js","../node_modules/@restart/hooks/esm/useCallbackRef.js","../node_modules/@kurkle/color/dist/color.esm.js","../node_modules/chart.js/src/helpers/helpers.core.ts","../node_modules/chart.js/src/helpers/helpers.math.ts","../node_modules/chart.js/src/helpers/helpers.collection.ts","../node_modules/chart.js/src/helpers/helpers.extras.ts","../node_modules/chart.js/src/helpers/helpers.easing.ts","../node_modules/chart.js/src/helpers/helpers.color.ts","../node_modules/chart.js/src/core/core.animations.defaults.js","../node_modules/chart.js/src/helpers/helpers.intl.ts","../node_modules/chart.js/src/core/core.ticks.js","../node_modules/chart.js/src/core/core.defaults.js","../node_modules/chart.js/src/core/core.layouts.defaults.js","../node_modules/chart.js/src/core/core.scale.defaults.js","../node_modules/chart.js/src/helpers/helpers.canvas.ts","../node_modules/chart.js/src/helpers/helpers.options.ts","../node_modules/chart.js/src/helpers/helpers.config.ts","../node_modules/chart.js/src/helpers/helpers.curve.ts","../node_modules/chart.js/src/helpers/helpers.dom.ts","../node_modules/chart.js/src/helpers/helpers.interpolation.ts","../node_modules/chart.js/src/helpers/helpers.rtl.ts","../node_modules/chart.js/src/helpers/helpers.segment.js","../node_modules/chart.js/src/core/core.animator.js","../node_modules/chart.js/src/core/core.animation.js","../node_modules/chart.js/src/core/core.animations.js","../node_modules/chart.js/src/core/core.datasetController.js","../node_modules/chart.js/src/controllers/controller.bar.js","../node_modules/chart.js/src/controllers/controller.bubble.js","../node_modules/chart.js/src/controllers/controller.doughnut.js","../node_modules/chart.js/src/controllers/controller.line.js","../node_modules/chart.js/src/controllers/controller.polarArea.js","../node_modules/chart.js/src/controllers/controller.pie.js","../node_modules/chart.js/src/controllers/controller.radar.js","../node_modules/chart.js/src/controllers/controller.scatter.js","../node_modules/chart.js/src/core/core.adapters.ts","../node_modules/chart.js/src/core/core.interaction.js","../node_modules/chart.js/src/core/core.layouts.js","../node_modules/chart.js/src/platform/platform.base.js","../node_modules/chart.js/src/platform/platform.basic.js","../node_modules/chart.js/src/platform/platform.dom.js","../node_modules/chart.js/src/core/core.element.ts","../node_modules/chart.js/src/core/core.scale.autoskip.js","../node_modules/chart.js/src/core/core.scale.js","../node_modules/chart.js/src/core/core.typedRegistry.js","../node_modules/chart.js/src/core/core.registry.js","../node_modules/chart.js/src/core/core.plugins.js","../node_modules/chart.js/src/core/core.config.js","../node_modules/chart.js/src/core/core.controller.js","../node_modules/chart.js/src/platform/index.js","../node_modules/chart.js/src/elements/element.arc.ts","../node_modules/chart.js/src/elements/element.line.js","../node_modules/chart.js/src/elements/element.point.ts","../node_modules/chart.js/src/elements/element.bar.js","../node_modules/chart.js/src/plugins/plugin.subtitle.js","../node_modules/chart.js/src/plugins/plugin.tooltip.js","../node_modules/chart.js/src/scales/scale.category.js","../node_modules/chart.js/src/scales/scale.linearbase.js","../node_modules/chart.js/src/scales/scale.linear.js","../node_modules/chart.js/src/scales/scale.logarithmic.js","../node_modules/chart.js/src/scales/scale.radialLinear.js","../node_modules/chart.js/src/scales/scale.time.js","../node_modules/chart.js/src/scales/scale.timeseries.js","../node_modules/react-chartjs-2/src/utils.ts","../node_modules/react-chartjs-2/src/chart.tsx","../node_modules/react-chartjs-2/src/typedCharts.tsx","components/DonutChart2.js","pages/ComingSoon.js","../node_modules/ssr-window/ssr-window.esm.js","../node_modules/dom7/dom7.esm.js","../node_modules/swiper/shared/dom.js","../node_modules/swiper/shared/utils.js","../node_modules/swiper/shared/get-support.js","../node_modules/swiper/shared/get-device.js","../node_modules/swiper/shared/get-browser.js","../node_modules/swiper/core/events-emitter.js","../node_modules/swiper/core/update/index.js","../node_modules/swiper/core/update/updateSize.js","../node_modules/swiper/core/update/updateSlides.js","../node_modules/swiper/core/update/updateAutoHeight.js","../node_modules/swiper/core/update/updateSlidesOffset.js","../node_modules/swiper/core/update/updateSlidesProgress.js","../node_modules/swiper/core/update/updateProgress.js","../node_modules/swiper/core/update/updateSlidesClasses.js","../node_modules/swiper/core/update/updateActiveIndex.js","../node_modules/swiper/core/update/updateClickedSlide.js","../node_modules/swiper/core/translate/index.js","../node_modules/swiper/core/translate/getTranslate.js","../node_modules/swiper/core/translate/setTranslate.js","../node_modules/swiper/core/translate/minTranslate.js","../node_modules/swiper/core/translate/maxTranslate.js","../node_modules/swiper/core/translate/translateTo.js","../node_modules/swiper/core/transition/transitionEmit.js","../node_modules/swiper/core/transition/index.js","../node_modules/swiper/core/transition/setTransition.js","../node_modules/swiper/core/transition/transitionStart.js","../node_modules/swiper/core/transition/transitionEnd.js","../node_modules/swiper/core/slide/index.js","../node_modules/swiper/core/slide/slideTo.js","../node_modules/swiper/core/slide/slideToLoop.js","../node_modules/swiper/core/slide/slideNext.js","../node_modules/swiper/core/slide/slidePrev.js","../node_modules/swiper/core/slide/slideReset.js","../node_modules/swiper/core/slide/slideToClosest.js","../node_modules/swiper/core/slide/slideToClickedSlide.js","../node_modules/swiper/core/loop/index.js","../node_modules/swiper/core/loop/loopCreate.js","../node_modules/swiper/core/loop/loopFix.js","../node_modules/swiper/core/loop/loopDestroy.js","../node_modules/swiper/core/events/onTouchStart.js","../node_modules/swiper/core/events/onTouchMove.js","../node_modules/swiper/core/events/onTouchEnd.js","../node_modules/swiper/core/events/onResize.js","../node_modules/swiper/core/events/onClick.js","../node_modules/swiper/core/events/onScroll.js","../node_modules/swiper/core/events/index.js","../node_modules/swiper/core/breakpoints/setBreakpoint.js","../node_modules/swiper/core/breakpoints/index.js","../node_modules/swiper/core/breakpoints/getBreakpoint.js","../node_modules/swiper/core/classes/index.js","../node_modules/swiper/core/classes/addClasses.js","../node_modules/swiper/core/classes/removeClasses.js","../node_modules/swiper/core/images/index.js","../node_modules/swiper/core/images/loadImage.js","../node_modules/swiper/core/images/preloadImages.js","../node_modules/swiper/core/check-overflow/index.js","../node_modules/swiper/core/defaults.js","../node_modules/swiper/core/moduleExtendParams.js","../node_modules/swiper/core/core.js","../node_modules/swiper/core/grab-cursor/index.js","../node_modules/swiper/core/grab-cursor/setGrabCursor.js","../node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","../node_modules/swiper/core/modules/resize/resize.js","../node_modules/swiper/core/modules/observer/observer.js","../node_modules/swiper/modules/navigation/navigation.js","../node_modules/swiper/shared/create-element-if-not-defined.js","../node_modules/swiper/modules/thumbs/thumbs.js","../node_modules/swiper/modules/free-mode/free-mode.js","../node_modules/swiper/components-shared/utils.js","../node_modules/swiper/components-shared/params-list.js","../node_modules/swiper/shared/calc-looped-slides.js","../node_modules/swiper/react/get-children.js","../node_modules/swiper/components-shared/update-swiper.js","../node_modules/swiper/react/use-isomorphic-layout-effect.js","../node_modules/swiper/react/context.js","../node_modules/swiper/react/swiper.js","../node_modules/swiper/components-shared/get-params.js","../node_modules/swiper/components-shared/mount-swiper.js","../node_modules/swiper/components-shared/get-changed-params.js","../node_modules/swiper/components-shared/update-on-virtual-data.js","../node_modules/swiper/react/virtual.js","../node_modules/swiper/react/loop.js","../node_modules/swiper/react/swiper-slide.js","components/Fundraiser/GallerySlider.js","../node_modules/@restart/ui/esm/Button.js","../node_modules/react-bootstrap/esm/Button.js","../node_modules/react-bootstrap/esm/Spinner.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/imask/esm/core/utils.js","../node_modules/imask/esm/core/action-details.js","../node_modules/imask/esm/core/holder.js","../node_modules/imask/esm/masked/factory.js","../node_modules/imask/esm/controls/mask-element.js","../node_modules/imask/esm/controls/html-mask-element.js","../node_modules/imask/esm/controls/html-input-mask-element.js","../node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../node_modules/imask/esm/controls/input-history.js","../node_modules/imask/esm/controls/input.js","../node_modules/imask/esm/core/change-details.js","../node_modules/imask/esm/core/continuous-tail-details.js","../node_modules/imask/esm/masked/base.js","../node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../node_modules/imask/esm/masked/pattern/cursor.js","../node_modules/imask/esm/masked/pattern/fixed-definition.js","../node_modules/imask/esm/masked/pattern/input-definition.js","../node_modules/imask/esm/masked/regexp.js","../node_modules/imask/esm/masked/pattern.js","../node_modules/imask/esm/masked/range.js","../node_modules/imask/esm/masked/date.js","../node_modules/imask/esm/masked/dynamic.js","../node_modules/imask/esm/masked/enum.js","../node_modules/imask/esm/masked/number.js","../node_modules/imask/esm/masked/function.js","../node_modules/imask/esm/masked/pipe.js","../node_modules/imask/esm/masked/repeat.js","../node_modules/imask/esm/index.js","../node_modules/react-imask/esm/mixin.js","../node_modules/react-imask/esm/input.js","../node_modules/react-google-recaptcha/lib/esm/recaptcha.js","../node_modules/react-async-script/lib/esm/async-script-loader.js","../node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js","../node_modules/react-google-recaptcha/lib/esm/index.js","../node_modules/universal-cookie/es6/utils.js","../node_modules/universal-cookie/es6/index.js","../node_modules/universal-cookie/es6/Cookies.js","../node_modules/react-cookie/es6/Cookies.js","../node_modules/react-cookie/es6/CookiesContext.js","../node_modules/react-cookie/es6/useCookies.js","../node_modules/react-cookie/es6/utils.js","components/Modal/DoacaoSorteioModal.js","components/Modal/DoacaoConsultaModal.js","constant/theme.js","pages/FundraiserDetail.js","pages/RedirectWithCookies.js","pages/FundraiserDetail_VisionPro.js","pages/FundraiserDetail_Honda.js","components/Modal/DoacaoRSModal.js","../node_modules/react-helmet/es/Helmet.js","pages/FundraiserDetail_RS.js","pages/FundraiserDetail_FiatMobi.js","pages/FundraiserDetail_MotoLevaIphone.js","pages/Route.js","App.js","reportWebVitals.js","context/ThemeDemo.js","context/ThemeContext.js","index.js","../node_modules/@sentry-internal/src/browser/backgroundtab.ts"],"sourcesContent":["/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n return __SENTRY_SDK_SOURCE__;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod: any, request: string): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule<T>(moduleName: string): T | undefined {\n let mod: T | undefined;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.AOS=t()}(this,function(){\"use strict\";var e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},t=\"Expected a function\",n=NaN,o=\"[object Symbol]\",i=/^\\s+|\\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,c=/^0o[0-7]+$/i,s=parseInt,u=\"object\"==typeof e&&e&&e.Object===Object&&e,d=\"object\"==typeof self&&self&&self.Object===Object&&self,l=u||d||Function(\"return this\")(),f=Object.prototype.toString,m=Math.max,p=Math.min,b=function(){return l.Date.now()};function v(e,n,o){var i,a,r,c,s,u,d=0,l=!1,f=!1,v=!0;if(\"function\"!=typeof e)throw new TypeError(t);function y(t){var n=i,o=a;return i=a=void 0,d=t,c=e.apply(o,n)}function h(e){var t=e-u;return void 0===u||t>=n||t<0||f&&e-d>=r}function k(){var e=b();if(h(e))return x(e);s=setTimeout(k,function(e){var t=n-(e-u);return f?p(t,r-(e-d)):t}(e))}function x(e){return s=void 0,v&&i?y(e):(i=a=void 0,c)}function O(){var e=b(),t=h(e);if(i=arguments,a=this,u=e,t){if(void 0===s)return function(e){return d=e,s=setTimeout(k,n),l?y(e):c}(u);if(f)return s=setTimeout(k,n),y(u)}return void 0===s&&(s=setTimeout(k,n)),c}return n=w(n)||0,g(o)&&(l=!!o.leading,r=(f=\"maxWait\"in o)?m(w(o.maxWait)||0,n):r,v=\"trailing\"in o?!!o.trailing:v),O.cancel=function(){void 0!==s&&clearTimeout(s),d=0,i=u=a=s=void 0},O.flush=function(){return void 0===s?c:x(b())},O}function g(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function w(e){if(\"number\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&f.call(e)==o}(e))return n;if(g(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(i,\"\");var u=r.test(e);return u||c.test(e)?s(e.slice(2),u?2:8):a.test(e)?n:+e}var y=function(e,n,o){var i=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(t);return g(o)&&(i=\"leading\"in o?!!o.leading:i,a=\"trailing\"in o?!!o.trailing:a),v(e,n,{leading:i,maxWait:n,trailing:a})},h=\"Expected a function\",k=NaN,x=\"[object Symbol]\",O=/^\\s+|\\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,E=/^0b[01]+$/i,N=/^0o[0-7]+$/i,z=parseInt,C=\"object\"==typeof e&&e&&e.Object===Object&&e,A=\"object\"==typeof self&&self&&self.Object===Object&&self,q=C||A||Function(\"return this\")(),L=Object.prototype.toString,T=Math.max,M=Math.min,S=function(){return q.Date.now()};function D(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function H(e){if(\"number\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&L.call(e)==x}(e))return k;if(D(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=D(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(O,\"\");var n=E.test(e);return n||N.test(e)?z(e.slice(2),n?2:8):j.test(e)?k:+e}var $=function(e,t,n){var o,i,a,r,c,s,u=0,d=!1,l=!1,f=!0;if(\"function\"!=typeof e)throw new TypeError(h);function m(t){var n=o,a=i;return o=i=void 0,u=t,r=e.apply(a,n)}function p(e){var n=e-s;return void 0===s||n>=t||n<0||l&&e-u>=a}function b(){var e=S();if(p(e))return v(e);c=setTimeout(b,function(e){var n=t-(e-s);return l?M(n,a-(e-u)):n}(e))}function v(e){return c=void 0,f&&o?m(e):(o=i=void 0,r)}function g(){var e=S(),n=p(e);if(o=arguments,i=this,s=e,n){if(void 0===c)return function(e){return u=e,c=setTimeout(b,t),d?m(e):r}(s);if(l)return c=setTimeout(b,t),m(s)}return void 0===c&&(c=setTimeout(b,t)),r}return t=H(t)||0,D(n)&&(d=!!n.leading,a=(l=\"maxWait\"in n)?T(H(n.maxWait)||0,t):a,f=\"trailing\"in n?!!n.trailing:f),g.cancel=function(){void 0!==c&&clearTimeout(c),u=0,o=s=i=c=void 0},g.flush=function(){return void 0===c?r:v(S())},g},W=function(){};function P(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),n=Array.prototype.slice.call(e.removedNodes);if(function e(t){var n=void 0,o=void 0;for(n=0;n<t.length;n+=1){if((o=t[n]).dataset&&o.dataset.aos)return!0;if(o.children&&e(o.children))return!0}return!1}(t.concat(n)))return W()})}function Y(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}var _={isSupported:function(){return!!Y()},ready:function(e,t){var n=window.document,o=new(Y())(P);W=t,o.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}},B=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},F=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),I=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},K=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,G=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i,J=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,Q=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i;function R(){return navigator.userAgent||navigator.vendor||window.opera||\"\"}var U=new(function(){function e(){B(this,e)}return F(e,[{key:\"phone\",value:function(){var e=R();return!(!K.test(e)&&!G.test(e.substr(0,4)))}},{key:\"mobile\",value:function(){var e=R();return!(!J.test(e)&&!Q.test(e.substr(0,4)))}},{key:\"tablet\",value:function(){return this.mobile()&&!this.phone()}},{key:\"ie11\",value:function(){return\"-ms-scroll-limit\"in document.documentElement.style&&\"-ms-ime-align\"in document.documentElement.style}}]),e}()),V=function(e,t){var n=void 0;return U.ie11()?(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,!0,!0,{detail:t}):n=new CustomEvent(e,{detail:t}),document.dispatchEvent(n)},X=function(e){return e.forEach(function(e,t){return function(e,t){var n=e.options,o=e.position,i=e.node,a=(e.data,function(){e.animated&&(function(e,t){t&&t.forEach(function(t){return e.classList.remove(t)})}(i,n.animatedClassNames),V(\"aos:out\",i),e.options.id&&V(\"aos:in:\"+e.options.id,i),e.animated=!1)});n.mirror&&t>=o.out&&!n.once?a():t>=o.in?e.animated||(function(e,t){t&&t.forEach(function(t){return e.classList.add(t)})}(i,n.animatedClassNames),V(\"aos:in\",i),e.options.id&&V(\"aos:in:\"+e.options.id,i),e.animated=!0):e.animated&&!n.once&&a()}(e,window.pageYOffset)})},Z=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}},ee=function(e,t,n){var o=e.getAttribute(\"data-aos-\"+t);if(void 0!==o){if(\"true\"===o)return!0;if(\"false\"===o)return!1}return o||n},te=function(e,t){return e.forEach(function(e,n){var o=ee(e.node,\"mirror\",t.mirror),i=ee(e.node,\"once\",t.once),a=ee(e.node,\"id\"),r=t.useClassNames&&e.node.getAttribute(\"data-aos\"),c=[t.animatedClassName].concat(r?r.split(\" \"):[]).filter(function(e){return\"string\"==typeof e});t.initClassName&&e.node.classList.add(t.initClassName),e.position={in:function(e,t,n){var o=window.innerHeight,i=ee(e,\"anchor\"),a=ee(e,\"anchor-placement\"),r=Number(ee(e,\"offset\",a?0:t)),c=a||n,s=e;i&&document.querySelectorAll(i)&&(s=document.querySelectorAll(i)[0]);var u=Z(s).top-o;switch(c){case\"top-bottom\":break;case\"center-bottom\":u+=s.offsetHeight/2;break;case\"bottom-bottom\":u+=s.offsetHeight;break;case\"top-center\":u+=o/2;break;case\"center-center\":u+=o/2+s.offsetHeight/2;break;case\"bottom-center\":u+=o/2+s.offsetHeight;break;case\"top-top\":u+=o;break;case\"bottom-top\":u+=o+s.offsetHeight;break;case\"center-top\":u+=o+s.offsetHeight/2}return u+r}(e.node,t.offset,t.anchorPlacement),out:o&&function(e,t){window.innerHeight;var n=ee(e,\"anchor\"),o=ee(e,\"offset\",t),i=e;return n&&document.querySelectorAll(n)&&(i=document.querySelectorAll(n)[0]),Z(i).top+i.offsetHeight-o}(e.node,t.offset)},e.options={once:i,mirror:o,animatedClassNames:c,id:a}}),e},ne=function(){var e=document.querySelectorAll(\"[data-aos]\");return Array.prototype.map.call(e,function(e){return{node:e}})},oe=[],ie=!1,ae={offset:120,delay:0,easing:\"ease\",duration:400,disable:!1,once:!1,mirror:!1,anchorPlacement:\"top-bottom\",startEvent:\"DOMContentLoaded\",animatedClassName:\"aos-animate\",initClassName:\"aos-init\",useClassNames:!1,disableMutationObserver:!1,throttleDelay:99,debounceDelay:50},re=function(){return document.all&&!window.atob},ce=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&(ie=!0),ie&&(oe=te(oe,ae),X(oe),window.addEventListener(\"scroll\",y(function(){X(oe,ae.once)},ae.throttleDelay)))},se=function(){if(oe=ne(),de(ae.disable)||re())return ue();ce()},ue=function(){oe.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\"),ae.initClassName&&e.node.classList.remove(ae.initClassName),ae.animatedClassName&&e.node.classList.remove(ae.animatedClassName)})},de=function(e){return!0===e||\"mobile\"===e&&U.mobile()||\"phone\"===e&&U.phone()||\"tablet\"===e&&U.tablet()||\"function\"==typeof e&&!0===e()};return{init:function(e){return ae=I(ae,e),oe=ne(),ae.disableMutationObserver||_.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),ae.disableMutationObserver=!0),ae.disableMutationObserver||_.ready(\"[data-aos]\",se),de(ae.disable)||re()?ue():(document.querySelector(\"body\").setAttribute(\"data-aos-easing\",ae.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",ae.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",ae.delay),-1===[\"DOMContentLoaded\",\"load\"].indexOf(ae.startEvent)?document.addEventListener(ae.startEvent,function(){ce(!0)}):window.addEventListener(\"load\",function(){ce(!0)}),\"DOMContentLoaded\"===ae.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1&&ce(!0),window.addEventListener(\"resize\",$(ce,ae.debounceDelay,!0)),window.addEventListener(\"orientationchange\",$(ce,ae.debounceDelay,!0)),oe)},refresh:ce,refreshHard:se}});\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","var t=function(){return t=Object.assign||function(t){for(var i,n=1,s=arguments.length;n<s;n++)for(var a in i=arguments[n])Object.prototype.hasOwnProperty.call(i,a)&&(t[a]=i[a]);return t},t.apply(this,arguments)},i=function(){function i(i,n,s){var a=this;this.endVal=n,this.options=s,this.version=\"2.8.0\",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,useIndianSeparators:!1,smartEasingThreshold:999,smartEasingAmount:333,separator:\",\",decimal:\".\",prefix:\"\",suffix:\"\",enableScrollSpy:!1,scrollSpyDelay:200,scrollSpyOnce:!1},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error=\"\",this.startVal=0,this.paused=!0,this.once=!1,this.count=function(t){a.startTime||(a.startTime=t);var i=t-a.startTime;a.remaining=a.duration-i,a.useEasing?a.countDown?a.frameVal=a.startVal-a.easingFn(i,0,a.startVal-a.endVal,a.duration):a.frameVal=a.easingFn(i,a.startVal,a.endVal-a.startVal,a.duration):a.frameVal=a.startVal+(a.endVal-a.startVal)*(i/a.duration);var n=a.countDown?a.frameVal<a.endVal:a.frameVal>a.endVal;a.frameVal=n?a.endVal:a.frameVal,a.frameVal=Number(a.frameVal.toFixed(a.options.decimalPlaces)),a.printValue(a.frameVal),i<a.duration?a.rAF=requestAnimationFrame(a.count):null!==a.finalEndVal?a.update(a.finalEndVal):a.options.onCompleteCallback&&a.options.onCompleteCallback()},this.formatNumber=function(t){var i,n,s,e,o=t<0?\"-\":\"\";i=Math.abs(t).toFixed(a.options.decimalPlaces);var r=(i+=\"\").split(\".\");if(n=r[0],s=r.length>1?a.options.decimal+r[1]:\"\",a.options.useGrouping){e=\"\";for(var l=3,h=0,u=0,p=n.length;u<p;++u)a.options.useIndianSeparators&&4===u&&(l=2,h=1),0!==u&&h%l==0&&(e=a.options.separator+e),h++,e=n[p-u-1]+e;n=e}return a.options.numerals&&a.options.numerals.length&&(n=n.replace(/[0-9]/g,(function(t){return a.options.numerals[+t]})),s=s.replace(/[0-9]/g,(function(t){return a.options.numerals[+t]}))),o+a.options.prefix+n+s+a.options.suffix},this.easeOutExpo=function(t,i,n,s){return n*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=t(t({},this.defaults),s),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(n),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,\"\"===this.options.separator&&(this.options.useGrouping=!1),this.el=\"string\"==typeof i?document.getElementById(i):i,this.el?this.printValue(this.startVal):this.error=\"[CountUp] target is null or undefined\",\"undefined\"!=typeof window&&this.options.enableScrollSpy&&(this.error?console.error(this.error,i):(window.onScrollFns=window.onScrollFns||[],window.onScrollFns.push((function(){return a.handleScroll(a)})),window.onscroll=function(){window.onScrollFns.forEach((function(t){return t()}))},this.handleScroll(this)))}return i.prototype.handleScroll=function(t){if(t&&window&&!t.once){var i=window.innerHeight+window.scrollY,n=t.el.getBoundingClientRect(),s=n.top+window.pageYOffset,a=n.top+n.height+window.pageYOffset;a<i&&a>window.scrollY&&t.paused?(t.paused=!1,setTimeout((function(){return t.start()}),t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):(window.scrollY>a||s>i)&&!t.paused&&t.reset()}},i.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},i.prototype.start=function(t){this.error||(this.options.onStartCallback&&this.options.onStartCallback(),t&&(this.options.onCompleteCallback=t),this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},i.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},i.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},i.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},i.prototype.printValue=function(t){var i;if(this.el){var n=this.formattingFn(t);if(null===(i=this.options.plugin)||void 0===i?void 0:i.render)this.options.plugin.render(this.el,n);else if(\"INPUT\"===this.el.tagName)this.el.value=n;else\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=n:this.el.innerHTML=n}},i.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},i.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},i.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},i}();export{i as CountUp};\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport copy from 'copy-to-clipboard';\n\n\nexport class CopyToClipboard extends React.PureComponent {\n static propTypes = {\n text: PropTypes.string.isRequired,\n children: PropTypes.element.isRequired,\n onCopy: PropTypes.func,\n options: PropTypes.shape({\n debug: PropTypes.bool,\n message: PropTypes.string,\n format: PropTypes.string\n })\n };\n\n\n static defaultProps = {\n onCopy: undefined,\n options: undefined\n };\n\n\n onClick = event => {\n const {\n text,\n onCopy,\n children,\n options\n } = this.props;\n\n const elem = React.Children.only(children);\n\n const result = copy(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n }\n\n // Bypass onClick if it was present\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n };\n\n\n render() {\n const {\n text: _text,\n onCopy: _onCopy,\n options: _options,\n children,\n ...props\n } = this.props;\n const elem = React.Children.only(children);\n\n return React.cloneElement(elem, {...props, onClick: this.onClick});\n }\n}\n","\nconst {CopyToClipboard} = require('./Component');\n\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\nvar countup_js = require('countup.js');\n\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n * Silence SSR Warnings.\n * Borrowed from Formik v2.1.1, Licensed MIT.\n *\n * https://github.com/formium/formik/blob/9316a864478f8fcd4fa99a0735b1d37afdf507dc/LICENSE\n */\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Create a stable reference to a callback which is updated after each render is committed.\n * Typed version borrowed from Formik v2.2.1. Licensed MIT.\n *\n * https://github.com/formium/formik/blob/9316a864478f8fcd4fa99a0735b1d37afdf507dc/LICENSE\n */\nfunction useEventCallback(fn) {\n var ref = React.useRef(fn);\n\n // we copy a ref to the callback scoped to the current state/props on each render\n useIsomorphicLayoutEffect(function () {\n ref.current = fn;\n });\n return React.useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return ref.current.apply(void 0, args);\n }, []);\n}\n\nvar createCountUpInstance = function createCountUpInstance(el, props) {\n var decimal = props.decimal,\n decimals = props.decimals,\n duration = props.duration,\n easingFn = props.easingFn,\n end = props.end,\n formattingFn = props.formattingFn,\n numerals = props.numerals,\n prefix = props.prefix,\n separator = props.separator,\n start = props.start,\n suffix = props.suffix,\n useEasing = props.useEasing,\n useGrouping = props.useGrouping,\n useIndianSeparators = props.useIndianSeparators,\n enableScrollSpy = props.enableScrollSpy,\n scrollSpyDelay = props.scrollSpyDelay,\n scrollSpyOnce = props.scrollSpyOnce,\n plugin = props.plugin;\n return new countup_js.CountUp(el, end, {\n startVal: start,\n duration: duration,\n decimal: decimal,\n decimalPlaces: decimals,\n easingFn: easingFn,\n formattingFn: formattingFn,\n numerals: numerals,\n separator: separator,\n prefix: prefix,\n suffix: suffix,\n plugin: plugin,\n useEasing: useEasing,\n useIndianSeparators: useIndianSeparators,\n useGrouping: useGrouping,\n enableScrollSpy: enableScrollSpy,\n scrollSpyDelay: scrollSpyDelay,\n scrollSpyOnce: scrollSpyOnce\n });\n};\n\nvar _excluded$1 = [\"ref\", \"startOnMount\", \"enableReinitialize\", \"delay\", \"onEnd\", \"onStart\", \"onPauseResume\", \"onReset\", \"onUpdate\"];\nvar DEFAULTS = {\n decimal: '.',\n separator: ',',\n delay: null,\n prefix: '',\n suffix: '',\n duration: 2,\n start: 0,\n decimals: 0,\n startOnMount: true,\n enableReinitialize: true,\n useEasing: true,\n useGrouping: true,\n useIndianSeparators: false\n};\nvar useCountUp = function useCountUp(props) {\n var filteredProps = Object.fromEntries(Object.entries(props).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n value = _ref2[1];\n return value !== undefined;\n }));\n var _useMemo = React.useMemo(function () {\n return _objectSpread2(_objectSpread2({}, DEFAULTS), filteredProps);\n }, [props]),\n ref = _useMemo.ref,\n startOnMount = _useMemo.startOnMount,\n enableReinitialize = _useMemo.enableReinitialize,\n delay = _useMemo.delay,\n onEnd = _useMemo.onEnd,\n onStart = _useMemo.onStart,\n onPauseResume = _useMemo.onPauseResume,\n onReset = _useMemo.onReset,\n onUpdate = _useMemo.onUpdate,\n instanceProps = _objectWithoutProperties(_useMemo, _excluded$1);\n var countUpRef = React.useRef();\n var timerRef = React.useRef();\n var isInitializedRef = React.useRef(false);\n var createInstance = useEventCallback(function () {\n return createCountUpInstance(typeof ref === 'string' ? ref : ref.current, instanceProps);\n });\n var getCountUp = useEventCallback(function (recreate) {\n var countUp = countUpRef.current;\n if (countUp && !recreate) {\n return countUp;\n }\n var newCountUp = createInstance();\n countUpRef.current = newCountUp;\n return newCountUp;\n });\n var start = useEventCallback(function () {\n var run = function run() {\n return getCountUp(true).start(function () {\n onEnd === null || onEnd === void 0 || onEnd({\n pauseResume: pauseResume,\n reset: reset,\n start: restart,\n update: update\n });\n });\n };\n if (delay && delay > 0) {\n timerRef.current = setTimeout(run, delay * 1000);\n } else {\n run();\n }\n onStart === null || onStart === void 0 || onStart({\n pauseResume: pauseResume,\n reset: reset,\n update: update\n });\n });\n var pauseResume = useEventCallback(function () {\n getCountUp().pauseResume();\n onPauseResume === null || onPauseResume === void 0 || onPauseResume({\n reset: reset,\n start: restart,\n update: update\n });\n });\n var reset = useEventCallback(function () {\n // Quick fix for https://github.com/glennreyes/react-countup/issues/736 - should be investigated\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (getCountUp().el) {\n timerRef.current && clearTimeout(timerRef.current);\n getCountUp().reset();\n onReset === null || onReset === void 0 || onReset({\n pauseResume: pauseResume,\n start: restart,\n update: update\n });\n }\n });\n var update = useEventCallback(function (newEnd) {\n getCountUp().update(newEnd);\n onUpdate === null || onUpdate === void 0 || onUpdate({\n pauseResume: pauseResume,\n reset: reset,\n start: restart\n });\n });\n var restart = useEventCallback(function () {\n reset();\n start();\n });\n var maybeInitialize = useEventCallback(function (shouldReset) {\n if (startOnMount) {\n if (shouldReset) {\n reset();\n }\n start();\n }\n });\n React.useEffect(function () {\n if (!isInitializedRef.current) {\n isInitializedRef.current = true;\n maybeInitialize();\n } else if (enableReinitialize) {\n maybeInitialize(true);\n }\n }, [enableReinitialize, isInitializedRef, maybeInitialize, delay, props.start, props.suffix, props.prefix, props.duration, props.separator, props.decimals, props.decimal, props.formattingFn]);\n React.useEffect(function () {\n return function () {\n reset();\n };\n }, [reset]);\n return {\n start: restart,\n pauseResume: pauseResume,\n reset: reset,\n update: update,\n getCountUp: getCountUp\n };\n};\n\nvar _excluded = [\"className\", \"redraw\", \"containerProps\", \"children\", \"style\"];\nvar CountUp = function CountUp(props) {\n var className = props.className,\n redraw = props.redraw,\n containerProps = props.containerProps,\n children = props.children,\n style = props.style,\n useCountUpProps = _objectWithoutProperties(props, _excluded);\n var containerRef = React.useRef(null);\n var isInitializedRef = React.useRef(false);\n var _useCountUp = useCountUp(_objectSpread2(_objectSpread2({}, useCountUpProps), {}, {\n ref: containerRef,\n startOnMount: typeof children !== 'function' || props.delay === 0,\n // component manually restarts\n enableReinitialize: false\n })),\n start = _useCountUp.start,\n reset = _useCountUp.reset,\n updateCountUp = _useCountUp.update,\n pauseResume = _useCountUp.pauseResume,\n getCountUp = _useCountUp.getCountUp;\n var restart = useEventCallback(function () {\n start();\n });\n var update = useEventCallback(function (end) {\n if (!props.preserveValue) {\n reset();\n }\n updateCountUp(end);\n });\n var initializeOnMount = useEventCallback(function () {\n if (typeof props.children === 'function') {\n // Warn when user didn't use containerRef at all\n if (!(containerRef.current instanceof Element)) {\n console.error(\"Couldn't find attached element to hook the CountUp instance into! Try to attach \\\"containerRef\\\" from the render prop to a an Element, eg. <span ref={containerRef} />.\");\n return;\n }\n }\n\n // unlike the hook, the CountUp component initializes on mount\n getCountUp();\n });\n React.useEffect(function () {\n initializeOnMount();\n }, [initializeOnMount]);\n React.useEffect(function () {\n if (isInitializedRef.current) {\n update(props.end);\n }\n }, [props.end, update]);\n var redrawDependencies = redraw && props;\n\n // if props.redraw, call this effect on every props change\n React.useEffect(function () {\n if (redraw && isInitializedRef.current) {\n restart();\n }\n }, [restart, redraw, redrawDependencies]);\n\n // if not props.redraw, call this effect only when certain props are changed\n React.useEffect(function () {\n if (!redraw && isInitializedRef.current) {\n restart();\n }\n }, [restart, redraw, props.start, props.suffix, props.prefix, props.duration, props.separator, props.decimals, props.decimal, props.className, props.formattingFn]);\n React.useEffect(function () {\n isInitializedRef.current = true;\n }, []);\n if (typeof children === 'function') {\n // TypeScript forces functional components to return JSX.Element | null.\n return children({\n countUpRef: containerRef,\n start: start,\n reset: reset,\n update: updateCountUp,\n pauseResume: pauseResume,\n getCountUp: getCountUp\n });\n }\n return /*#__PURE__*/React.createElement(\"span\", _extends({\n className: className,\n ref: containerRef,\n style: style\n }, containerProps), typeof props.start !== 'undefined' ? getCountUp().formattingFn(props.start) : '');\n};\n\nexports.default = CountUp;\nexports.useCountUp = useCountUp;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = format;\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\nfunction toTitleCase(string) {\n return string.toString().trim().replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== \":\" && (title.charAt(index + match.length) !== \"-\" || title.charAt(index - 1) === \"-\") && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n return match.charAt(0).toUpperCase() + match.substr(1);\n });\n}\n\n// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nfunction mightBeEmail(s) {\n // There's no point trying to validate rfc822 fully, just look for ...@...\n return typeof s === \"string\" && s.indexOf(\"@\") !== -1;\n}\nvar redacted = \"REDACTED (Potential Email Address)\";\nfunction redactEmail(string) {\n if (mightBeEmail(string)) {\n console.warn(\"This arg looks like an email address, redacting.\");\n return redacted;\n }\n return string;\n}\nfunction format() {\n var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n var titleCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var redactingEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var _str = s || \"\";\n if (titleCase) {\n _str = toTitleCase(s);\n }\n if (redactingEmail) {\n _str = redactEmail(_str);\n }\n return _str;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.GA4 = void 0;\nvar _gtag = _interopRequireDefault(require(\"./gtag\"));\nvar _format = _interopRequireDefault(require(\"./format\"));\nvar _excluded = [\"eventCategory\", \"eventAction\", \"eventLabel\", \"eventValue\", \"hitType\"],\n _excluded2 = [\"title\", \"location\"],\n _excluded3 = [\"page\", \"hitType\"];\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*\nLinks\nhttps://developers.google.com/gtagjs/reference/api\nhttps://developers.google.com/tag-platform/gtagjs/reference\n*/\n/**\n * @typedef GaOptions\n * @type {Object}\n * @property {boolean} [cookieUpdate=true]\n * @property {number} [cookieExpires=63072000] Default two years\n * @property {string} [cookieDomain=\"auto\"]\n * @property {string} [cookieFlags]\n * @property {string} [userId]\n * @property {string} [clientId]\n * @property {boolean} [anonymizeIp]\n * @property {string} [contentGroup1]\n * @property {string} [contentGroup2]\n * @property {string} [contentGroup3]\n * @property {string} [contentGroup4]\n * @property {string} [contentGroup5]\n * @property {boolean} [allowAdFeatures=true]\n * @property {boolean} [allowAdPersonalizationSignals]\n * @property {boolean} [nonInteraction]\n * @property {string} [page]\n */\n/**\n * @typedef UaEventOptions\n * @type {Object}\n * @property {string} action\n * @property {string} category\n * @property {string} [label]\n * @property {number} [value]\n * @property {boolean} [nonInteraction]\n * @property {('beacon'|'xhr'|'image')} [transport]\n */\n/**\n * @typedef InitOptions\n * @type {Object}\n * @property {string} trackingId\n * @property {GaOptions|any} [gaOptions]\n * @property {Object} [gtagOptions] New parameter\n */\nvar GA4 = /*#__PURE__*/function () {\n function GA4() {\n var _this = this;\n _classCallCheck(this, GA4);\n _defineProperty(this, \"reset\", function () {\n _this.isInitialized = false;\n _this._testMode = false;\n _this._currentMeasurementId;\n _this._hasLoadedGA = false;\n _this._isQueuing = false;\n _this._queueGtag = [];\n });\n _defineProperty(this, \"_gtag\", function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (!_this._testMode) {\n if (_this._isQueuing) {\n _this._queueGtag.push(args);\n } else {\n _gtag[\"default\"].apply(void 0, args);\n }\n } else {\n _this._queueGtag.push(args);\n }\n });\n _defineProperty(this, \"_loadGA\", function (GA_MEASUREMENT_ID, nonce) {\n var gtagUrl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"https://www.googletagmanager.com/gtag/js\";\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n if (!_this._hasLoadedGA) {\n // Global Site Tag (gtag.js) - Google Analytics\n var script = document.createElement(\"script\");\n script.async = true;\n script.src = \"\".concat(gtagUrl, \"?id=\").concat(GA_MEASUREMENT_ID);\n if (nonce) {\n script.setAttribute(\"nonce\", nonce);\n }\n document.body.appendChild(script);\n window.dataLayer = window.dataLayer || [];\n window.gtag = function gtag() {\n window.dataLayer.push(arguments);\n };\n _this._hasLoadedGA = true;\n }\n });\n _defineProperty(this, \"_toGtagOptions\", function (gaOptions) {\n if (!gaOptions) {\n return;\n }\n var mapFields = {\n // Old https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#cookieUpdate\n // New https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id#cookie_update\n cookieUpdate: \"cookie_update\",\n cookieExpires: \"cookie_expires\",\n cookieDomain: \"cookie_domain\",\n cookieFlags: \"cookie_flags\",\n // must be in set method?\n userId: \"user_id\",\n clientId: \"client_id\",\n anonymizeIp: \"anonymize_ip\",\n // https://support.google.com/analytics/answer/2853546?hl=en#zippy=%2Cin-this-article\n contentGroup1: \"content_group1\",\n contentGroup2: \"content_group2\",\n contentGroup3: \"content_group3\",\n contentGroup4: \"content_group4\",\n contentGroup5: \"content_group5\",\n // https://support.google.com/analytics/answer/9050852?hl=en\n allowAdFeatures: \"allow_google_signals\",\n allowAdPersonalizationSignals: \"allow_ad_personalization_signals\",\n nonInteraction: \"non_interaction\",\n page: \"page_path\",\n hitCallback: \"event_callback\"\n };\n var gtagOptions = Object.entries(gaOptions).reduce(function (prev, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n if (mapFields[key]) {\n prev[mapFields[key]] = value;\n } else {\n prev[key] = value;\n }\n return prev;\n }, {});\n return gtagOptions;\n });\n _defineProperty(this, \"initialize\", function (GA_MEASUREMENT_ID) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!GA_MEASUREMENT_ID) {\n throw new Error(\"Require GA_MEASUREMENT_ID\");\n }\n var initConfigs = typeof GA_MEASUREMENT_ID === \"string\" ? [{\n trackingId: GA_MEASUREMENT_ID\n }] : GA_MEASUREMENT_ID;\n _this._currentMeasurementId = initConfigs[0].trackingId;\n var gaOptions = options.gaOptions,\n gtagOptions = options.gtagOptions,\n nonce = options.nonce,\n _options$testMode = options.testMode,\n testMode = _options$testMode === void 0 ? false : _options$testMode,\n gtagUrl = options.gtagUrl;\n _this._testMode = testMode;\n if (!testMode) {\n _this._loadGA(_this._currentMeasurementId, nonce, gtagUrl);\n }\n if (!_this.isInitialized) {\n _this._gtag(\"js\", new Date());\n initConfigs.forEach(function (config) {\n var mergedGtagOptions = _objectSpread(_objectSpread(_objectSpread({}, _this._toGtagOptions(_objectSpread(_objectSpread({}, gaOptions), config.gaOptions))), gtagOptions), config.gtagOptions);\n if (Object.keys(mergedGtagOptions).length) {\n _this._gtag(\"config\", config.trackingId, mergedGtagOptions);\n } else {\n _this._gtag(\"config\", config.trackingId);\n }\n });\n }\n _this.isInitialized = true;\n if (!testMode) {\n var queues = _toConsumableArray(_this._queueGtag);\n _this._queueGtag = [];\n _this._isQueuing = false;\n while (queues.length) {\n var queue = queues.shift();\n _this._gtag.apply(_this, _toConsumableArray(queue));\n if (queue[0] === \"get\") {\n _this._isQueuing = true;\n }\n }\n }\n });\n _defineProperty(this, \"set\", function (fieldsObject) {\n if (!fieldsObject) {\n console.warn(\"`fieldsObject` is required in .set()\");\n return;\n }\n if (_typeof(fieldsObject) !== \"object\") {\n console.warn(\"Expected `fieldsObject` arg to be an Object\");\n return;\n }\n if (Object.keys(fieldsObject).length === 0) {\n console.warn(\"empty `fieldsObject` given to .set()\");\n }\n _this._gaCommand(\"set\", fieldsObject);\n });\n _defineProperty(this, \"_gaCommandSendEvent\", function (eventCategory, eventAction, eventLabel, eventValue, fieldsObject) {\n _this._gtag(\"event\", eventAction, _objectSpread(_objectSpread({\n event_category: eventCategory,\n event_label: eventLabel,\n value: eventValue\n }, fieldsObject && {\n non_interaction: fieldsObject.nonInteraction\n }), _this._toGtagOptions(fieldsObject)));\n });\n _defineProperty(this, \"_gaCommandSendEventParameters\", function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === \"string\") {\n _this._gaCommandSendEvent.apply(_this, _toConsumableArray(args.slice(1)));\n } else {\n var _args$ = args[0],\n eventCategory = _args$.eventCategory,\n eventAction = _args$.eventAction,\n eventLabel = _args$.eventLabel,\n eventValue = _args$.eventValue,\n hitType = _args$.hitType,\n rest = _objectWithoutProperties(_args$, _excluded);\n _this._gaCommandSendEvent(eventCategory, eventAction, eventLabel, eventValue, rest);\n }\n });\n _defineProperty(this, \"_gaCommandSendTiming\", function (timingCategory, timingVar, timingValue, timingLabel) {\n _this._gtag(\"event\", \"timing_complete\", {\n name: timingVar,\n value: timingValue,\n event_category: timingCategory,\n event_label: timingLabel\n });\n });\n _defineProperty(this, \"_gaCommandSendPageview\", function (page, fieldsObject) {\n if (fieldsObject && Object.keys(fieldsObject).length) {\n var _this$_toGtagOptions = _this._toGtagOptions(fieldsObject),\n title = _this$_toGtagOptions.title,\n location = _this$_toGtagOptions.location,\n rest = _objectWithoutProperties(_this$_toGtagOptions, _excluded2);\n _this._gtag(\"event\", \"page_view\", _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, page && {\n page_path: page\n }), title && {\n page_title: title\n }), location && {\n page_location: location\n }), rest));\n } else if (page) {\n _this._gtag(\"event\", \"page_view\", {\n page_path: page\n });\n } else {\n _this._gtag(\"event\", \"page_view\");\n }\n });\n _defineProperty(this, \"_gaCommandSendPageviewParameters\", function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n if (typeof args[0] === \"string\") {\n _this._gaCommandSendPageview.apply(_this, _toConsumableArray(args.slice(1)));\n } else {\n var _args$2 = args[0],\n page = _args$2.page,\n hitType = _args$2.hitType,\n rest = _objectWithoutProperties(_args$2, _excluded3);\n _this._gaCommandSendPageview(page, rest);\n }\n });\n _defineProperty(this, \"_gaCommandSend\", function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n var hitType = typeof args[0] === \"string\" ? args[0] : args[0].hitType;\n switch (hitType) {\n case \"event\":\n _this._gaCommandSendEventParameters.apply(_this, args);\n break;\n case \"pageview\":\n _this._gaCommandSendPageviewParameters.apply(_this, args);\n break;\n case \"timing\":\n _this._gaCommandSendTiming.apply(_this, _toConsumableArray(args.slice(1)));\n break;\n case \"screenview\":\n case \"transaction\":\n case \"item\":\n case \"social\":\n case \"exception\":\n console.warn(\"Unsupported send command: \".concat(hitType));\n break;\n default:\n console.warn(\"Send command doesn't exist: \".concat(hitType));\n }\n });\n _defineProperty(this, \"_gaCommandSet\", function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n if (typeof args[0] === \"string\") {\n args[0] = _defineProperty({}, args[0], args[1]);\n }\n _this._gtag(\"set\", _this._toGtagOptions(args[0]));\n });\n _defineProperty(this, \"_gaCommand\", function (command) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n switch (command) {\n case \"send\":\n _this._gaCommandSend.apply(_this, args);\n break;\n case \"set\":\n _this._gaCommandSet.apply(_this, args);\n break;\n default:\n console.warn(\"Command doesn't exist: \".concat(command));\n }\n });\n _defineProperty(this, \"ga\", function () {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n if (typeof args[0] === \"string\") {\n _this._gaCommand.apply(_this, args);\n } else {\n var readyCallback = args[0];\n _this._gtag(\"get\", _this._currentMeasurementId, \"client_id\", function (clientId) {\n _this._isQueuing = false;\n var queues = _this._queueGtag;\n readyCallback({\n get: function get(property) {\n return property === \"clientId\" ? clientId : property === \"trackingId\" ? _this._currentMeasurementId : property === \"apiVersion\" ? \"1\" : undefined;\n }\n });\n while (queues.length) {\n var queue = queues.shift();\n _this._gtag.apply(_this, _toConsumableArray(queue));\n }\n });\n _this._isQueuing = true;\n }\n return _this.ga;\n });\n _defineProperty(this, \"event\", function (optionsOrName, params) {\n if (typeof optionsOrName === \"string\") {\n _this._gtag(\"event\", optionsOrName, _this._toGtagOptions(params));\n } else {\n var action = optionsOrName.action,\n category = optionsOrName.category,\n label = optionsOrName.label,\n value = optionsOrName.value,\n nonInteraction = optionsOrName.nonInteraction,\n transport = optionsOrName.transport;\n if (!category || !action) {\n console.warn(\"args.category AND args.action are required in event()\");\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: \"event\",\n eventCategory: (0, _format[\"default\"])(category),\n eventAction: (0, _format[\"default\"])(action)\n };\n\n // Optional Fields\n if (label) {\n fieldObject.eventLabel = (0, _format[\"default\"])(label);\n }\n if (typeof value !== \"undefined\") {\n if (typeof value !== \"number\") {\n console.warn(\"Expected `args.value` arg to be a Number.\");\n } else {\n fieldObject.eventValue = value;\n }\n }\n if (typeof nonInteraction !== \"undefined\") {\n if (typeof nonInteraction !== \"boolean\") {\n console.warn(\"`args.nonInteraction` must be a boolean.\");\n } else {\n fieldObject.nonInteraction = nonInteraction;\n }\n }\n if (typeof transport !== \"undefined\") {\n if (typeof transport !== \"string\") {\n console.warn(\"`args.transport` must be a string.\");\n } else {\n if ([\"beacon\", \"xhr\", \"image\"].indexOf(transport) === -1) {\n console.warn(\"`args.transport` must be either one of these values: `beacon`, `xhr` or `image`\");\n }\n fieldObject.transport = transport;\n }\n }\n _this._gaCommand(\"send\", fieldObject);\n }\n });\n _defineProperty(this, \"send\", function (fieldObject) {\n _this._gaCommand(\"send\", fieldObject);\n });\n this.reset();\n }\n _createClass(GA4, [{\n key: \"gtag\",\n value: function gtag() {\n this._gtag.apply(this, arguments);\n }\n }]);\n return GA4;\n}();\nexports.GA4 = GA4;\nvar _default = new GA4();\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar gtag = function gtag() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof window !== \"undefined\") {\n var _window;\n if (typeof window.gtag === \"undefined\") {\n window.dataLayer = window.dataLayer || [];\n window.gtag = function gtag() {\n window.dataLayer.push(arguments);\n };\n }\n (_window = window).gtag.apply(_window, args);\n }\n};\nvar _default = gtag;\nexports[\"default\"] = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.ReactGAImplementation = void 0;\nvar _ga = _interopRequireWildcard(require(\"./ga4\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nvar ReactGAImplementation = _ga.GA4;\nexports.ReactGAImplementation = ReactGAImplementation;\nvar _default = _ga[\"default\"];\nexports[\"default\"] = _default;","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"1bb970eb\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"y:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunky\"] = self[\"webpackChunky\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an <a href> attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route (<Route path=\"*\">) since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly<Location> {\n let location: Readonly<Location> = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial<Path>) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n let parsedPath: Partial<Path> = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface HandlerResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData\n status?: number;\n}\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\ntype DataFunctionReturnValue = Promise<DataFunctionValue> | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction<Context = any> = {\n (\n args: LoaderFunctionArgs<Context>,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n (\n args: ActionFunctionArgs<Context>,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n unstable_actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => Promise<HandlerResult>\n ) => Promise<HandlerResult>;\n}\n\nexport interface DataStrategyFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {\n matches: DataStrategyMatch[];\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise<HandlerResult[]>;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam<L> | _PathParam<R>\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam<Rest>\n : // look for params in the absence of wildcards\n _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n // if you could not find path params, fallback to `string`\n [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial<Location> | string,\n basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch<string, RouteObjectType>(branches[i], decoded);\n }\n\n return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch<RouteObjectType>[] = [],\n parentsMeta: RouteMeta<RouteObjectType>[] = [],\n parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta<RouteObjectType> = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch<RouteObjectType>,\n pathname: string\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params<ParamKey>,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n originalPath: Path,\n params: {\n [key in PathParam<Path>]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam<Path>;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam<Path>];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(\n pattern: PathPattern<Path> | Path,\n pathname: string\n): PathMatch<ParamKey> | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce<Mutable<Params>>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial<Path>\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in <Link to=\"...\"> and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\" element={<Link to=\"..\"}>\n * </Route>\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\">\n * <Route element={<AccountsLayout />}> // <-- Does not contribute\n * <Route index element={<Link to=\"..\"} /> // <-- Does not contribute\n * </Route\n * </Route>\n * </Route>\n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === matches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial<Path>;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how <a href> works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise<any> {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set<string> = new Set<string>();\n private controller: AbortController;\n private abortPromise: Promise<void>;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record<string, unknown>;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise<unknown> | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record<string, unknown>,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n HandlerResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record<string, number>,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise<void>;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map<string, AbortController>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map<string, Fetcher>;\n\n /**\n * Map of current blockers\n */\n blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n unstable_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial<FutureConfig>;\n hydrationData?: HydrationState;\n window?: Window;\n unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n actionHeaders: Record<string, Headers>;\n activeDeferreds: Record<string, DeferredData> | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise<StaticHandlerContext | Response>;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher<TData = any> =\n FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n unstable_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set<RouterSubscriber>();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record<string, number> | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from <ScrollRestoration /> until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized: boolean;\n let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n let hasLoaders = initialMatches.some((m) => m.route.loader);\n if (hasLazyRoutes) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (\n typeof m.route.loader === \"function\" &&\n m.route.loader.hydrate === true\n ) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map<string, Set<string>> = new Map<\n string,\n Set<string>\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map<string, AbortController>();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map<string, number>();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set<string>();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map<string, number>();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set<string>();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map<string, DeferredData>();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map<string, BlockerFunction>();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial<RouterState>,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set<string>([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise<void> {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise<void> {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a <Form method=\"post\">\n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise<HandleActionResult> {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches\n );\n result = results[0];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise<HandleLoadersResult> {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.unstable_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n if (\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration)\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n\n let actionData: Record<string, RouteData> | null | undefined;\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n actionData = {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n actionData = null;\n } else {\n actionData = state.actionData;\n }\n }\n\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(request, redirect.result, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n fetchRequest,\n [match],\n requestMatches\n );\n let actionResult = actionResults[0];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.unstable_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(revalidationRequest, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n fetchRequest,\n [match],\n matches\n );\n let result = results[0];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[]\n ): Promise<DataResult[]> {\n try {\n let results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n return {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n return matchesToLoad.map(() => ({\n type: ResultType.error,\n error: e,\n }));\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let [loaderResults, ...fetcherResults] = await Promise.all([\n matchesToLoad.length\n ? callDataStrategy(\"loader\", request, matchesToLoad, matches)\n : [],\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n let fetcherRequest = createClientSideRequest(\n init.history,\n f.path,\n f.controller.signal\n );\n return callDataStrategy(\n \"loader\",\n fetcherRequest,\n [f.match],\n f.matches\n ).then((r) => r[0]);\n } else {\n return Promise.resolve<DataResult>({\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n });\n }\n }),\n ]);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher<TData = any>(key: string): Fetcher<TData> {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the <ScrollRestoration> component\n function enableScrollRestoration(\n positions: Record<string, number>,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial<StaticHandlerFutureConfig>;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise<StaticHandlerContext | Response> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise<any> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `HandlerResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isHandlerResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n result = results[0];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map<string, DeferredData>();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set<string>(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null\n ): Promise<DataResult[]> {\n let results = await callDataStrategyImpl(\n unstable_dataStrategy || defaultDataStrategy,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set<string>,\n fetchLoadMatches: Map<string, FetchLoadMatch>,\n fetchRedirectIds: Set<string>,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[0]\n : undefined;\n let boundaryMatches = boundaryId\n ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n : matches;\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n unstable_actionStatus: actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n unstable_actionStatus: actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record<string, any> = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nfunction defaultDataStrategy(\n opts: DataStrategyFunctionArgs\n): ReturnType<DataStrategyFunction> {\n return Promise.all(opts.matches.map((m) => m.resolve()));\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise<HandlerResult[]> {\n let routeIdsToLoad = matchesToLoad.reduce(\n (acc, m) => acc.add(m.route.id),\n new Set<string>()\n );\n let loadedMatches = new Set<string>();\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: matches.map((match) => {\n let shouldLoad = routeIdsToLoad.has(match.route.id);\n // `resolve` encapsulates the route.lazy, executing the\n // loader/action, and mapping return values/thrown errors to a\n // HandlerResult. Users can pass a callback to take fine-grained control\n // over the execution of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = (handlerOverride) => {\n loadedMatches.add(match.route.id);\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n manifest,\n mapRouteProperties,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n }),\n request,\n params: matches[0].params,\n context: requestContext,\n });\n\n // Throw if any loadRoute implementations not called since they are what\n // ensures a route is fully loaded\n matches.forEach((m) =>\n invariant(\n loadedMatches.has(m.route.id),\n `\\`match.resolve()\\` was not called for route id \"${m.route.id}\". ` +\n \"You must call `match.resolve()` on every match passed to \" +\n \"`dataStrategy` to ensure all routes are properly loaded.\"\n )\n );\n\n // Filter out any middleware-only matches for which we didn't need to run handlers\n return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id));\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n handlerOverride: Parameters<DataStrategyMatch[\"resolve\"]>[0],\n staticContext?: unknown\n): Promise<HandlerResult> {\n let result: HandlerResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise<HandlerResult> => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise<HandlerResult> to\n // satisfy the function return value\n let abortPromise = new Promise<HandlerResult>((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise<HandlerResult>;\n if (handlerOverride) {\n handlerPromise = handlerOverride((ctx: unknown) => actualHandler(ctx));\n } else {\n handlerPromise = (async () => {\n try {\n let val = await actualHandler();\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n }\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // HandlerResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertHandlerResultToDataResult(\n handlerResult: HandlerResult\n): Promise<DataResult> {\n let { result, type, status } = handlerResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : status,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result, statusCode: status };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map<string, DeferredData>,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record<string, Headers> = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map<string, DeferredData>\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isHandlerResult(result: unknown): result is HandlerResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectHandlerResult(result: HandlerResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n if (transitions.size > 0) {\n let json: Record<string, string[]> = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit<NavigationContextObject, \"future\"> {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath<ParamKey, Path>(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n <LocationContext.Provider\n value={{\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location,\n },\n navigationType: NavigationType.Pop,\n }}\n >\n {renderedMatches}\n </LocationContext.Provider>\n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n <p>💿 Hey developer 👋</p>\n <p>\n You can provide a way better UX than this when your app throws errors\n by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n <code style={codeStyles}>errorElement</code> prop on your route.\n </p>\n </>\n );\n }\n\n return (\n <>\n <h2>Unexpected Application Error!</h2>\n <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n {stack ? <pre style={preStyles}>{stack}</pre> : null}\n {devInfo}\n </>\n );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n <RouteContext.Provider value={this.props.routeContext}>\n <RouteErrorContext.Provider\n value={this.state.error}\n children={this.props.component}\n />\n </RouteContext.Provider>\n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch<string, RouteObject>;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n <RouteContext.Provider value={routeContext}>\n {children}\n </RouteContext.Provider>\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `<Route Component={...}>` in `<Routes>` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = <match.route.Component />;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n <RenderedRoute\n match={match}\n routeContext={{\n outlet,\n matches,\n isDataRoute: dataRouterState != null,\n }}\n children={children}\n />\n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n <RenderErrorBoundary\n location={dataRouterState.location}\n revalidation={dataRouterState.revalidation}\n component={errorElement}\n error={error}\n children={getChildren()}\n routeContext={{ outlet: null, matches, isDataRoute: true }}\n />\n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback<BlockerFunction>(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial<Pick<FutureConfig, \"v7_startTransition\">>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback<RouterSubscriber>(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n future={{\n v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n }}\n >\n {state.initialized || router.future.v7_partialHydration ? (\n <DataRoutes\n routes={router.routes}\n future={router.future}\n state={state}\n />\n ) : (\n fallbackElement\n )}\n </Router>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n future,\n state,\n}: {\n routes: DataRouteObject[];\n future: RemixRouter[\"future\"];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n future,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true,\n });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nexport function Navigate({\n to,\n replace,\n state,\n relative,\n}: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n let { future, static: isStatic } = React.useContext(NavigationContext);\n\n warning(\n !isStatic,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n\n // Resolve the path outside of the effect so that when effects run twice in\n // StrictMode they navigate to the same place\n let path = resolveTo(\n to,\n getResolveToMatches(matches, future.v7_relativeSplatPath),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n\n React.useEffect(\n () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n [navigate, jsonPath, relative, replace, state]\n );\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n path?: NonIndexRouteObject[\"path\"];\n id?: NonIndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<NonIndexRouteObject>;\n loader?: NonIndexRouteObject[\"loader\"];\n action?: NonIndexRouteObject[\"action\"];\n hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n handle?: NonIndexRouteObject[\"handle\"];\n index?: false;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n path?: IndexRouteObject[\"path\"];\n id?: IndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<IndexRouteObject>;\n loader?: IndexRouteObject[\"loader\"];\n action?: IndexRouteObject[\"action\"];\n hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n handle?: IndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n future?: Partial<Pick<FutureConfig, \"v7_relativeSplatPath\">>;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false,\n future,\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(\n () => ({\n basename,\n navigator,\n static: staticProp,\n future: {\n v7_relativeSplatPath: false,\n ...future,\n },\n }),\n [basename, future, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n } = locationProp;\n\n let locationContext = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n },\n navigationType,\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (locationContext == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider children={children} value={locationContext} />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n children: React.ReactNode | AwaitResolveRenderFunction;\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n return (\n <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n <ResolveAwait>{children}</ResolveAwait>\n </AwaitErrorBoundary>\n );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n error: any;\n};\n\nenum AwaitRenderStatus {\n pending,\n success,\n error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n AwaitErrorBoundaryProps,\n AwaitErrorBoundaryState\n> {\n constructor(props: AwaitErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n let { children, errorElement, resolve } = this.props;\n\n let promise: TrackedPromise | null = null;\n let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if ((resolve as TrackedPromise)._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status =\n promise._error !== undefined\n ? AwaitRenderStatus.error\n : promise._data !== undefined\n ? AwaitRenderStatus.success\n : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data: any) =>\n Object.defineProperty(resolve, \"_data\", { get: () => data }),\n (error: any) =>\n Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n\n if (\n status === AwaitRenderStatus.error &&\n promise._error instanceof AbortedDeferredError\n ) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return <AwaitContext.Provider value={promise} children={errorElement} />;\n }\n\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return <AwaitContext.Provider value={promise} children={children} />;\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n children,\n}: {\n children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n let data = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data) : children;\n return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode,\n parentPath: number[] = []\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element, index) => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n let treePath = [...parentPath, index];\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n\n let route: RouteObject = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary:\n element.props.ErrorBoundary != null ||\n element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n","import type {\n FormEncType,\n HTMLFormMethod,\n RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n MouseEvent,\n \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n event: LimitedMouseEvent,\n target?: string\n) {\n return (\n event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record<string, string | string[]>\n | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nexport function createSearchParams(\n init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n return new URLSearchParams(\n typeof init === \"string\" ||\n Array.isArray(init) ||\n init instanceof URLSearchParams\n ? init\n : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [] as ParamKeyValuePair[])\n );\n}\n\nexport function getSearchParamsForLocation(\n locationSearch: string,\n defaultSearchParams: URLSearchParams | null\n) {\n let searchParams = createSearchParams(locationSearch);\n\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n\n return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n | HTMLFormElement\n | HTMLButtonElement\n | HTMLInputElement\n | FormData\n | URLSearchParams\n | JsonValue\n | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\n\nexport interface SubmitOptions {\n /**\n * The HTTP method used to submit the form. Overrides `<form method>`.\n * Defaults to \"GET\".\n */\n method?: HTMLFormMethod;\n\n /**\n * The action URL path used to submit the form. Overrides `<form action>`.\n * Defaults to the path of the current route.\n */\n action?: string;\n\n /**\n * The encoding used to submit the form. Overrides `<form encType>`.\n * Defaults to \"application/x-www-form-urlencoded\".\n */\n encType?: FormEncType;\n\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Set `true` to replace the current entry in the browser's history stack\n * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n * to `false`.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * In browser-based environments, prevent resetting scroll after this\n * navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * Enable flushSync for this navigation's state updates\n */\n unstable_flushSync?: boolean;\n\n /**\n * Enable view transitions on this submission navigation\n */\n unstable_viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n `and will default to \"${defaultEncType}\"`\n );\n\n return null;\n }\n return encType;\n}\n\nexport function getFormSubmissionInfo(\n target: SubmitTarget,\n basename: string\n): {\n action: string | null;\n method: string;\n encType: string;\n formData: FormData | undefined;\n body: any;\n} {\n let method: string;\n let action: string | null;\n let encType: string;\n let formData: FormData | undefined;\n let body: any;\n\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n formData = new FormData(target);\n } else if (\n isButtonElement(target) ||\n (isInputElement(target) &&\n (target.type === \"submit\" || target.type === \"image\"))\n ) {\n let form = target.form;\n\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n\n // <button>/<input type=\"submit\"> may override attributes of <form>\n\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n\n method =\n target.getAttribute(\"formmethod\") ||\n form.getAttribute(\"method\") ||\n defaultMethod;\n encType =\n getFormEncType(target.getAttribute(\"formenctype\")) ||\n getFormEncType(form.getAttribute(\"enctype\")) ||\n defaultEncType;\n\n // Build a FormData object populated from a form and submitter\n formData = new FormData(form, target);\n\n // If this browser doesn't support the `FormData(el, submitter)` format,\n // then tack on the submitter value at the end. This is a lightweight\n // solution that is not 100% spec compliant. For complete support in older\n // browsers, consider using the `formdata-submitter-polyfill` package\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or ` +\n `<input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n\n // Send body for <Form encType=\"text/plain\" so we encode it into text\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = undefined;\n }\n\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n DataRouteObject,\n FutureConfig,\n Location,\n NavigateOptions,\n NavigationType,\n Navigator,\n RelativeRoutingType,\n RouteObject,\n RouterProviderProps,\n To,\n} from \"react-router\";\nimport {\n Router,\n createPath,\n useHref,\n useLocation,\n useMatches,\n useNavigate,\n useNavigation,\n useResolvedPath,\n useBlocker,\n UNSAFE_DataRouterContext as DataRouterContext,\n UNSAFE_DataRouterStateContext as DataRouterStateContext,\n UNSAFE_NavigationContext as NavigationContext,\n UNSAFE_RouteContext as RouteContext,\n UNSAFE_mapRouteProperties as mapRouteProperties,\n UNSAFE_useRouteId as useRouteId,\n UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n BrowserHistory,\n unstable_DataStrategyFunction,\n unstable_DataStrategyFunctionArgs,\n unstable_DataStrategyMatch,\n Fetcher,\n FormEncType,\n FormMethod,\n FutureConfig as RouterFutureConfig,\n GetScrollRestorationKeyFunction,\n HashHistory,\n History,\n HTMLFormMethod,\n HydrationState,\n Router as RemixRouter,\n V7_FormMethod,\n RouterState,\n RouterSubscriber,\n BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n createRouter,\n createBrowserHistory,\n createHashHistory,\n joinPaths,\n stripBasename,\n UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n UNSAFE_invariant as invariant,\n UNSAFE_warning as warning,\n matchPath,\n IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n SubmitOptions,\n ParamKeyValuePair,\n URLSearchParamsInit,\n SubmitTarget,\n} from \"./dom\";\nimport {\n createSearchParams,\n defaultMethod,\n getFormSubmissionInfo,\n getSearchParamsForLocation,\n shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n unstable_DataStrategyFunction,\n unstable_DataStrategyFunctionArgs,\n unstable_DataStrategyMatch,\n FormEncType,\n FormMethod,\n GetScrollRestorationKeyFunction,\n ParamKeyValuePair,\n SubmitOptions,\n URLSearchParamsInit,\n V7_FormMethod,\n};\nexport { createSearchParams, ErrorResponseImpl as UNSAFE_ErrorResponseImpl };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n Blocker,\n BlockerFunction,\n DataRouteMatch,\n DataRouteObject,\n ErrorResponse,\n Fetcher,\n FutureConfig,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LazyRouteFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathParam,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n ShouldRevalidateFunctionArgs,\n To,\n UIMatch,\n unstable_HandlerResult,\n} from \"react-router\";\nexport {\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n Routes,\n createMemoryRouter,\n createPath,\n createRoutesFromChildren,\n createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n redirectDocument,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useBlocker,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigate,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n UNSAFE_DataRouterContext,\n UNSAFE_DataRouterStateContext,\n UNSAFE_NavigationContext,\n UNSAFE_LocationContext,\n UNSAFE_RouteContext,\n UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n var __staticRouterHydrationData: HydrationState | undefined;\n var __reactRouterVersion: string;\n interface Document {\n startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n }\n}\n\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report. This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"0\";\ntry {\n window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n // no-op\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n basename?: string;\n future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n hydrationData?: HydrationState;\n unstable_dataStrategy?: unstable_DataStrategyFunction;\n window?: Window;\n}\n\nexport function createBrowserRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n unstable_dataStrategy: opts?.unstable_dataStrategy,\n window: opts?.window,\n }).initialize();\n}\n\nexport function createHashRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n unstable_dataStrategy: opts?.unstable_dataStrategy,\n window: opts?.window,\n }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors),\n };\n }\n return state;\n}\n\nfunction deserializeErrors(\n errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // serializeErrors in react-router-dom/server.tsx :)\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n // @ts-expect-error\n let error = new ErrorConstructor(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n // no-op - fall through and create a normal Error\n }\n }\n }\n\n if (serialized[key] == null) {\n let error = new Error(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n | {\n isTransitioning: false;\n }\n | {\n isTransitioning: true;\n flushSync: boolean;\n currentLocation: Location;\n nextLocation: Location;\n };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n isTransitioning: false,\n});\nif (__DEV__) {\n ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\n\nfunction startTransitionSafe(cb: () => void) {\n if (startTransitionImpl) {\n startTransitionImpl(cb);\n } else {\n cb();\n }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n if (flushSyncImpl) {\n flushSyncImpl(cb);\n } else {\n cb();\n }\n}\n\ninterface ViewTransition {\n finished: Promise<void>;\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n skipTransition(): void;\n}\n\nclass Deferred<T> {\n status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n promise: Promise<T>;\n // @ts-expect-error - no initializer\n resolve: (value: T) => void;\n // @ts-expect-error - no initializer\n reject: (reason?: unknown) => void;\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let [pendingState, setPendingState] = React.useState<RouterState>();\n let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n isTransitioning: false,\n });\n let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n let [transition, setTransition] = React.useState<ViewTransition>();\n let [interruption, setInterruption] = React.useState<{\n state: RouterState;\n currentLocation: Location;\n nextLocation: Location;\n }>();\n let fetcherData = React.useRef<Map<string, any>>(new Map());\n let { v7_startTransition } = future || {};\n\n let optInStartTransition = React.useCallback(\n (cb: () => void) => {\n if (v7_startTransition) {\n startTransitionSafe(cb);\n } else {\n cb();\n }\n },\n [v7_startTransition]\n );\n\n let setState = React.useCallback<RouterSubscriber>(\n (\n newState: RouterState,\n {\n deletedFetchers,\n unstable_flushSync: flushSync,\n unstable_viewTransitionOpts: viewTransitionOpts,\n }\n ) => {\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== undefined) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n\n let isViewTransitionUnavailable =\n router.window == null ||\n typeof router.window.document.startViewTransition !== \"function\";\n\n // If this isn't a view transition or it's not available in this browser,\n // just update and be done with it\n if (!viewTransitionOpts || isViewTransitionUnavailable) {\n if (flushSync) {\n flushSyncSafe(() => setStateImpl(newState));\n } else {\n optInStartTransition(() => setStateImpl(newState));\n }\n return;\n }\n\n // flushSync + startViewTransition\n if (flushSync) {\n // Flush through the context to mark DOM elements as transition=ing\n flushSyncSafe(() => {\n // Cancel any pending transitions\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n });\n\n // Update the DOM\n let t = router.window!.document.startViewTransition(() => {\n flushSyncSafe(() => setStateImpl(newState));\n });\n\n // Clean up after the animation completes\n t.finished.finally(() => {\n flushSyncSafe(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n });\n\n flushSyncSafe(() => setTransition(t));\n return;\n }\n\n // startTransition + startViewTransition\n if (transition) {\n // Interrupting an in-progress transition, cancel and let everything flush\n // out, and then kick off a new transition from the interruption state\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n } else {\n // Completed navigation update with opted-in view transitions, let 'er rip\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n }\n },\n [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n // When we start a view transition, create a Deferred we can use for the\n // eventual \"completed\" render\n React.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred<void>());\n }\n }, [vtContext]);\n\n // Once the deferred is created, kick off startViewTransition() to update the\n // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n // happened)\n React.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition = router.window.document.startViewTransition(async () => {\n optInStartTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition.finished.finally(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition);\n }\n }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n // When the new location finally renders and is committed to the DOM, this\n // effect will run to resolve the transition\n React.useEffect(() => {\n if (\n renderDfd &&\n pendingState &&\n state.location.key === pendingState.location.key\n ) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n\n // If we get interrupted with a new navigation during a transition, we skip\n // the active transition, let it cleanup, then kick it off again here\n React.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation,\n });\n setInterruption(undefined);\n }\n }, [vtContext.isTransitioning, interruption]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <FetchersContext.Provider value={fetcherData.current}>\n <ViewTransitionContext.Provider value={vtContext}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n future={{\n v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n }}\n >\n {state.initialized || router.future.v7_partialHydration ? (\n <DataRoutes\n routes={router.routes}\n future={router.future}\n state={state}\n />\n ) : (\n fallbackElement\n )}\n </Router>\n </ViewTransitionContext.Provider>\n </FetchersContext.Provider>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n future,\n state,\n}: {\n routes: DataRouteObject[];\n future: RemixRouter[\"future\"];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface BrowserRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n basename,\n children,\n future,\n window,\n}: BrowserRouterProps) {\n let historyRef = React.useRef<BrowserHistory>();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface HashRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n basename,\n children,\n future,\n window,\n}: HashRouterProps) {\n let historyRef = React.useRef<HashHistory>();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface HistoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: FutureConfig;\n history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n basename,\n children,\n future,\n history,\n}: HistoryRouterProps) {\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nif (__DEV__) {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n reloadDocument?: boolean;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n to: To;\n unstable_viewTransition?: boolean;\n}\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function LinkWithRef(\n {\n onClick,\n relative,\n reloadDocument,\n replace,\n state,\n target,\n to,\n preventScrollReset,\n unstable_viewTransition,\n ...rest\n },\n ref\n ) {\n let { basename } = React.useContext(NavigationContext);\n\n // Rendered into <a href> for absolute URLs\n let absoluteHref;\n let isExternal = false;\n\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n // Render the absolute href server- and client-side\n absoluteHref = to;\n\n // Only check for external origins client-side\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\")\n ? new URL(currentUrl.protocol + to)\n : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n\n if (targetUrl.origin === currentUrl.origin && path != null) {\n // Strip the protocol/origin/basename for same-origin absolute URLs\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n // We can't do external URL detection without a valid URL\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n `when clicked - please update to a valid URL path.`\n );\n }\n }\n }\n\n // Rendered into <a href> for relative URLs\n let href = useHref(to, { relative });\n\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n function handleClick(\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n ) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n <a\n {...rest}\n href={absoluteHref || href}\n onClick={isExternal || reloadDocument ? onClick : handleClick}\n ref={ref}\n target={target}\n />\n );\n }\n);\n\nif (__DEV__) {\n Link.displayName = \"Link\";\n}\n\ntype NavLinkRenderProps = {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n caseSensitive?: boolean;\n className?: string | ((props: NavLinkRenderProps) => string | undefined);\n end?: boolean;\n style?:\n | React.CSSProperties\n | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n function NavLinkWithRef(\n {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n unstable_viewTransition,\n children,\n ...rest\n },\n ref\n ) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React.useContext(DataRouterStateContext);\n let { navigator, basename } = React.useContext(NavigationContext);\n let isTransitioning =\n routerState != null &&\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) &&\n unstable_viewTransition === true;\n\n let toPathname = navigator.encodeLocation\n ? navigator.encodeLocation(path).pathname\n : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname =\n routerState && routerState.navigation && routerState.navigation.location\n ? routerState.navigation.location.pathname\n : null;\n\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname\n ? nextLocationPathname.toLowerCase()\n : null;\n toPathname = toPathname.toLowerCase();\n }\n\n if (nextLocationPathname && basename) {\n nextLocationPathname =\n stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n\n // If the `to` has a trailing slash, look at that exact spot. Otherwise,\n // we're looking for a slash _after_ what's in `to`. For example:\n //\n // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n // both want to look for a / at index 6 to match URL `/users/matt`\n const endSlashPosition =\n toPathname !== \"/\" && toPathname.endsWith(\"/\")\n ? toPathname.length - 1\n : toPathname.length;\n let isActive =\n locationPathname === toPathname ||\n (!end &&\n locationPathname.startsWith(toPathname) &&\n locationPathname.charAt(endSlashPosition) === \"/\");\n\n let isPending =\n nextLocationPathname != null &&\n (nextLocationPathname === toPathname ||\n (!end &&\n nextLocationPathname.startsWith(toPathname) &&\n nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n let renderProps = {\n isActive,\n isPending,\n isTransitioning,\n };\n\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n let className: string | undefined;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for <NavLink />s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null,\n ]\n .filter(Boolean)\n .join(\" \");\n }\n\n let style =\n typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n return (\n <Link\n {...rest}\n aria-current={ariaCurrent}\n className={className}\n ref={ref}\n style={style}\n to={to}\n unstable_viewTransition={unstable_viewTransition}\n >\n {typeof children === \"function\" ? children(renderProps) : children}\n </Link>\n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n}\n\nexport interface FetcherFormProps\n extends React.FormHTMLAttributes<HTMLFormElement> {\n /**\n * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n * \"put\", \"delete\", \"patch\".\n */\n method?: HTMLFormMethod;\n\n /**\n * `<form encType>` - enhancing beyond the normal string type and limiting\n * to the built-in browser supported values\n */\n encType?:\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"text/plain\";\n\n /**\n * Normal `<form action>` but supports React Router's relative paths.\n */\n action?: string;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * Prevent the scroll position from resetting to the top of the viewport on\n * completion of the navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * A function to call when the form is submitted. If you call\n * `event.preventDefault()` then this form will not do anything.\n */\n onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\nexport interface FormProps extends FetcherFormProps {\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Forces a full document navigation instead of a fetch.\n */\n reloadDocument?: boolean;\n\n /**\n * Replaces the current entry in the browser history stack when the form\n * navigates. Use this if you don't want the user to be able to click \"back\"\n * to the page with the form on it.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Enable view transitions on this Form navigation\n */\n unstable_viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n SubmitEvent,\n Event,\n HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n (\n {\n fetcherKey,\n navigate,\n reloadDocument,\n replace,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n ...props\n },\n forwardedRef\n ) => {\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod: HTMLFormMethod =\n method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n\n let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n .submitter as HTMLFormSubmitter | null;\n\n let submitMethod =\n (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n method;\n\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace,\n state,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n });\n };\n\n return (\n <form\n ref={forwardedRef}\n method={formMethod}\n action={formAction}\n onSubmit={reloadDocument ? onSubmit : submitHandler}\n {...props}\n />\n );\n }\n);\n\nif (__DEV__) {\n Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n getKey,\n storageKey,\n}: ScrollRestorationProps) {\n useScrollRestoration({ getKey, storageKey });\n return null;\n}\n\nif (__DEV__) {\n ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n UseScrollRestoration = \"useScrollRestoration\",\n UseSubmit = \"useSubmit\",\n UseSubmitFetcher = \"useSubmitFetcher\",\n UseFetcher = \"useFetcher\",\n useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n UseFetcher = \"useFetcher\",\n UseFetchers = \"useFetchers\",\n UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n to: To,\n {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n }: {\n target?: React.HTMLAttributeAnchorTarget;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_viewTransition?: boolean;\n } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n\n return React.useCallback(\n (event: React.MouseEvent<E, MouseEvent>) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n\n // If the URL hasn't changed, a regular <a> will do a replace instead of\n // a push, so do the same here unless the replace prop is explicitly set\n let replace =\n replaceProp !== undefined\n ? replaceProp\n : createPath(location) === createPath(path);\n\n navigate(to, {\n replace,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n ]\n );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n `support the URLSearchParams API. If you need to support Internet ` +\n `Explorer 11, we recommend you load a polyfill such as ` +\n `https://github.com/ungap/url-search-params\\n\\n` +\n `If you're unsure how to load polyfills, we recommend you check out ` +\n `https://polyfill.io/v3/ which provides some recommendations about how ` +\n `to load polyfills only for users that need them, instead of for every ` +\n `user.`\n );\n\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React.useRef(false);\n\n let location = useLocation();\n let searchParams = React.useMemo(\n () =>\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n ),\n [location.search]\n );\n\n let navigate = useNavigate();\n let setSearchParams = React.useCallback<SetURLSearchParams>(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n\n return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n nextInit?:\n | URLSearchParamsInit\n | ((prev: URLSearchParams) => URLSearchParamsInit),\n navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n (\n /**\n * Specifies the `<form>` to be submitted to the server, a specific\n * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n * arbitrary data to submit.\n *\n * Note: When using a `<button>` its `name` and `value` will also be\n * included in the form data that is submitted.\n */\n target: SubmitTarget,\n\n /**\n * Options that override the `<form>`'s own attributes. Required when\n * submitting arbitrary data without a backing `<form>`.\n */\n options?: SubmitOptions\n ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n (\n target: SubmitTarget,\n // Fetchers cannot replace or set state because they are not navigation events\n options?: Omit<SubmitOptions, \"replace\" | \"state\">\n ): void;\n}\n\nfunction validateClientSideSubmission() {\n if (typeof document === \"undefined\") {\n throw new Error(\n \"You are calling submit during the server render. \" +\n \"Try calling submit within a `useEffect` or callback instead.\"\n );\n }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n let { basename } = React.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n\n return React.useCallback<SubmitFunction>(\n (target, options = {}) => {\n validateClientSideSubmission();\n\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n unstable_flushSync: options.unstable_flushSync,\n });\n } else {\n router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n unstable_flushSync: options.unstable_flushSync,\n unstable_viewTransition: options.unstable_viewTransition,\n });\n }\n },\n [router, basename, currentRouteId]\n );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n action?: string,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n let { basename } = React.useContext(NavigationContext);\n let routeContext = React.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n let [match] = routeContext.matches.slice(-1);\n // Shallow clone path so we can modify it below, otherwise we modify the\n // object referenced by useMemo inside useResolvedPath\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n // If no action was specified, browsers will persist current search params\n // when determining the path, so match that behavior\n // https://github.com/remix-run/remix/issues/927\n let location = useLocation();\n if (action == null) {\n // Safe to write to this directly here since if action was undefined, we\n // would have called useResolvedPath(\".\") which will never include a search\n path.search = location.search;\n\n // When grabbing search params from the URL, remove any included ?index param\n // since it might not apply to our contextual route. We add it back based\n // on match.route.index below\n let params = new URLSearchParams(path.search);\n if (params.has(\"index\") && params.get(\"index\") === \"\") {\n params.delete(\"index\");\n path.search = params.toString() ? `?${params.toString()}` : \"\";\n }\n }\n\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the form action. If this is a root navigation, then just use\n // the raw basename which allows the basename to have full control over the\n // presence of a trailing slash on root actions\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n Form: React.ForwardRefExoticComponent<\n FetcherFormProps & React.RefAttributes<HTMLFormElement>\n >;\n submit: FetcherSubmitFunction;\n load: (href: string, opts?: { unstable_flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n let fetcherData = React.useContext(FetchersContext);\n let route = React.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n\n // Fetcher key handling\n // OK to call conditionally to feature detect `useId`\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let defaultKey = useIdImpl ? useIdImpl() : \"\";\n let [fetcherKey, setFetcherKey] = React.useState<string>(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n } else if (!fetcherKey) {\n // We will only fall through here when `useId` is not available\n setFetcherKey(getUniqueFetcherId());\n }\n\n // Registration/cleanup\n React.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => {\n // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n // will not delete immediately but instead queue up a delete after the\n // fetcher returns to an `idle` state\n router.deleteFetcher(fetcherKey);\n };\n }, [router, fetcherKey]);\n\n // Fetcher additions\n let load = React.useCallback(\n (href: string, opts?: { unstable_flushSync?: boolean }) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n router.fetch(fetcherKey, routeId, href, opts);\n },\n [fetcherKey, routeId, router]\n );\n\n let submitImpl = useSubmit();\n let submit = React.useCallback<FetcherSubmitFunction>(\n (target, opts) => {\n submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey,\n });\n },\n [fetcherKey, submitImpl]\n );\n\n let FetcherForm = React.useMemo(() => {\n let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n (props, ref) => {\n return (\n <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n );\n }\n );\n if (__DEV__) {\n FetcherForm.displayName = \"fetcher.Form\";\n }\n return FetcherForm;\n }, [fetcherKey]);\n\n // Exposed FetcherWithComponents\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n ...fetcher,\n data,\n }),\n [FetcherForm, submit, load, fetcher, data]\n );\n\n return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key,\n }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n getKey,\n storageKey,\n}: {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n} = {}) {\n let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n DataRouterStateHook.UseScrollRestoration\n );\n let { basename } = React.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n\n // Trigger manual scroll restoration while we're active\n React.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n\n // Save positions on pagehide\n usePageHide(\n React.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = (getKey ? getKey(location, matches) : null) || location.key;\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [storageKey, getKey, navigation.state, location, matches])\n );\n\n // Read in any saved scroll locations\n if (typeof document !== \"undefined\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n // no-op, use default empty object\n }\n }, [storageKey]);\n\n // Enable scroll restoration in the router\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n getKey && basename !== \"/\"\n ? (location, matches) =>\n getKey(\n // Strip the basename to match useLocation()\n {\n ...location,\n pathname:\n stripBasename(location.pathname, basename) ||\n location.pathname,\n },\n matches\n )\n : getKey;\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKeyWithoutBasename\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n\n // Restore scrolling when state.restoreScrollPosition changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // Explicit false means don't do anything (used for submissions)\n if (restoreScrollPosition === false) {\n return;\n }\n\n // been here before, scroll to it\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n\n // try to scroll to the hash\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n\n // Don't reset if this navigation opted out\n if (preventScrollReset === true) {\n return;\n }\n\n // otherwise go to the top on new locations\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n callback: (event: BeforeUnloadEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes. This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n callback: (event: PageTransitionEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open. Use at your own risk.\n */\nfunction usePrompt({\n when,\n message,\n}: {\n when: boolean | BlockerFunction;\n message: string;\n}) {\n let blocker = useBlocker(when);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n // This timeout is needed to avoid a weird \"race\" on POP navigations\n // between the `window.history` revert navigation and the result of\n // `window.confirm`\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href. You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n to: To,\n opts: { relative?: RelativeRoutingType } = {}\n) {\n let vtContext = React.useContext(ViewTransitionContext);\n\n invariant(\n vtContext != null,\n \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. \" +\n \"Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n\n let { basename } = useDataRouterContext(\n DataRouterHook.useViewTransitionState\n );\n let path = useResolvedPath(to, { relative: opts.relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n\n let currentPath =\n stripBasename(vtContext.currentLocation.pathname, basename) ||\n vtContext.currentLocation.pathname;\n let nextPath =\n stripBasename(vtContext.nextLocation.pathname, basename) ||\n vtContext.nextLocation.pathname;\n\n // Transition is active if we're going to or coming from the indicated\n // destination. This ensures that other PUSH navigations that reverse\n // an indicated transition apply. I.e., on the list view you have:\n //\n // <NavLink to=\"/details/1\" unstable_viewTransition>\n //\n // If you click the breadcrumb back to the list view:\n //\n // <NavLink to=\"/list\" unstable_viewTransition>\n //\n // We should apply the transition because it's indicated as active going\n // from /list -> /details/1 and therefore should be active on the reverse\n // (even though this isn't strictly a POP reverse)\n return (\n matchPath(path.pathname, nextPath) != null ||\n matchPath(path.pathname, currentPath) != null\n );\n}\n\nexport { useViewTransitionState as unstable_useViewTransitionState };\n\n//#endregion\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions */\nexport interface InternalGlobal {\n navigator?: { userAgent?: string };\n console: Console;\n Sentry?: {\n Integrations?: Integration[];\n };\n onerror?: {\n (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n onunhandledrejection?: {\n (event: unknown): boolean;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n SENTRY_ENVIRONMENT?: string;\n SENTRY_DSN?: string;\n SENTRY_RELEASE?: {\n id?: string;\n };\n SENTRY_SDK_SOURCE?: SdkSource;\n /**\n * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n * file.\n */\n _sentryDebugIds?: Record<string, string>;\n __SENTRY__: {\n globalEventProcessors: any;\n hub: any;\n logger: any;\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n /**\n * Raw module metadata that is injected by bundler plugins.\n *\n * Keys are `error.stack` strings, values are the metadata.\n */\n _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n // eslint-disable-next-line no-restricted-globals\n (typeof window == 'object' && isGlobalObj(window)) ||\n (typeof self == 'object' && isGlobalObj(self)) ||\n (typeof global == 'object' && isGlobalObj(global)) ||\n (function (this: any) {\n return this;\n })() ||\n {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n disable(): void;\n enable(): void;\n isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console as Console;\n const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] as LoggerMethod;\n });\n }\n}\n\nfunction makeLogger(): Logger {\n let enabled = false;\n const logger: Partial<Logger> = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args: any[]) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger as Logger;\n}\n\nexport const logger = makeLogger();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\ninterface VueViewModel {\n // Vue3\n __isVue?: boolean;\n // Vue2\n _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n elem: unknown,\n options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n if (!elem) {\n return '<unknown>';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n const elem = el as {\n tagName?: string;\n id?: string;\n className?: string;\n getAttribute(key: string): string;\n };\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n // eslint-disable-next-line prefer-const\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) as unknown as E;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n value: string,\n pattern: RegExp | string,\n requireExactStringMatch: boolean = false,\n): boolean {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n testString: string,\n patterns: Array<string | RegExp> = [],\n requireExactStringMatch: boolean = false,\n): boolean {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] as () => any;\n const wrapped = replacementFactory(original) as WrappedFunction;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nexport function convertToPlainObject<V>(\n value: V,\n):\n | {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n }\n | {\n [ownProps: string]: unknown;\n message: string;\n name: string;\n stack?: string;\n }\n | V {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj: {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n } = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps: { [key: string]: unknown } = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj as Record<string, unknown>)[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map<unknown, unknown>();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: { [key: string]: any } = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue as T;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: unknown[] = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item: unknown) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue as unknown as T;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n return !name || name === 'Object';\n } catch {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat as any).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n getRandomValues(array: Uint8Array): Uint8Array;\n randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n msCrypto?: CryptoInternal;\n crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = (): number => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '<unknown>';\n }\n return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n major?: number;\n minor?: number;\n patch?: number;\n prerelease?: string;\n buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception as any).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n /** Pending */\n PENDING = 0,\n /** Resolved / OK */\n RESOLVED = 1,\n /** Rejected / Error */\n REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n private _state: States;\n private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n private _value: any;\n\n public constructor(\n executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n ) {\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result as any);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n ): PromiseLike<T | TResult> {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n return new SyncPromise<TResult>((resolve, reject) => {\n let val: TResult | any;\n let isRejected: boolean;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val as unknown as any);\n });\n });\n }\n\n /** JSDoc */\n private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n this._setResult(States.RESOLVED, value);\n };\n\n /** JSDoc */\n private readonly _reject = (reason?: any) => {\n this._setResult(States.REJECTED, reason);\n };\n\n /** JSDoc */\n private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value as PromiseLike<T>).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n /** JSDoc */\n private readonly _executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler[1](this._value as unknown as any);\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };\n}\n\nexport { SyncPromise };\n","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, getGlobalSingleton, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n // eslint-disable-next-line deprecation/deprecation\n getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n processors: EventProcessor[],\n event: Event | null,\n hint: EventHint,\n index: number = 0,\n): PromiseLike<Event | null> {\n return new SyncPromise<Event | null>((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) as Event | null;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n /**\n * The millisecond timestamp at which measurement began, measured in Unix time.\n */\n timeOrigin: number;\n /**\n * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n */\n now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n","export const DEFAULT_ENVIRONMENT = 'production';\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session: Session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack: string, skipFirst: number = 0): StackFrame[] => {\n const frames: StackFrame[] = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirst; i < lines.length; i++) {\n const line = lines[i];\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames);\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || '?',\n }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n return [90, node(getModule)];\n}\n","import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: { [key: string]: any },\n // Default Node.js REPL depth\n depth: number = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize: number = 100 * 1024,\n): T {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key: string,\n value: unknown,\n depth: number = +Infinity,\n maxProperties: number = +Infinity,\n memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n ) {\n return value as Primitive;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n return value as ObjOrArray<unknown>;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/**\n * @deprecated This export will be removed in v8.\n */\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key: unknown,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value: Exclude<unknown, string | number | boolean | null>,\n): string {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n // memoize\n (obj: any) => boolean,\n // unmemoize\n (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner: any = hasWeakSet ? new WeakSet() : [];\n function memoize(obj: any): boolean {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj: any): void {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n return undefined;\n }\n\n // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n // It is later used to read Sentry-DSC-values from.\n let baggageObject: Readonly<Record<string, string>> = {};\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n for (const key of Object.keys(currBaggageObject)) {\n acc[key] = currBaggageObject[key];\n }\n return acc;\n }, {});\n } else {\n // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n // this is how we choose to handle it)\n if (!baggageHeader) {\n return undefined;\n }\n\n baggageObject = baggageHeaderToObject(baggageHeader);\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce<Record<string, string>>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n","import type { PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n if (!traceparent) {\n return undefined;\n }\n\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (!matches) {\n return undefined;\n }\n\n let parentSampled: boolean | undefined;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n}\n\n/**\n * Create tracing context from incoming headers.\n *\n * @deprecated Use `propagationContextFromHeaders` instead.\n */\n// TODO(v8): Remove this function\nexport function tracingContextFromHeaders(\n sentryTrace: Parameters<typeof extractTraceparentData>[0],\n baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n traceparentData: ReturnType<typeof extractTraceparentData>;\n dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n propagationContext: PropagationContext;\n} {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n if (!traceparentData) {\n return {\n traceparentData,\n dynamicSamplingContext: undefined,\n propagationContext: {\n traceId: traceId || uuid4(),\n spanId: uuid4().substring(16),\n },\n };\n } else {\n return {\n traceparentData,\n dynamicSamplingContext: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n propagationContext: {\n traceId: traceId || uuid4(),\n parentSpanId: parentSpanId || uuid4().substring(16),\n spanId: uuid4().substring(16),\n sampled: parentSampled,\n dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n },\n };\n }\n}\n\n/**\n * Create a propagation context from incoming headers.\n */\nexport function propagationContextFromHeaders(\n sentryTrace: string | undefined,\n baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n if (!traceparentData) {\n return {\n traceId: traceId || uuid4(),\n spanId: uuid4().substring(16),\n };\n } else {\n return {\n traceId: traceId || uuid4(),\n parentSpanId: parentSpanId || uuid4().substring(16),\n spanId: uuid4().substring(16),\n sampled: parentSampled,\n dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n };\n }\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n traceId: string = uuid4(),\n spanId: string = uuid4().substring(16),\n sampled?: boolean,\n): string {\n let sampledString = '';\n if (sampled !== undefined) {\n sampledString = sampled ? '-1' : '-0';\n }\n return `${traceId}-${spanId}${sampledString}`;\n}\n","import type { Span, SpanJSON, SpanTimeInput, TraceContext } from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\nimport type { Span as SpanClass } from '../tracing/span';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n data,\n op,\n parent_span_id,\n span_id,\n status,\n tags,\n trace_id,\n origin,\n });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n if (spanIsSpanClass(span)) {\n return span.getSpanJSON();\n }\n\n // Fallback: We also check for `.toJSON()` here...\n // eslint-disable-next-line deprecation/deprecation\n if (typeof span.toJSON === 'function') {\n // eslint-disable-next-line deprecation/deprecation\n return span.toJSON();\n }\n\n return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span: Span): span is SpanClass {\n return typeof (span as SpanClass).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n // eslint-disable-next-line no-bitwise\n return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n","import type {\n CaptureContext,\n Client,\n ClientOptions,\n Event,\n EventHint,\n Scope as ScopeInterface,\n ScopeContext,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope, getGlobalScope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\nimport { spanToJSON } from './spanUtils';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n scope?: Scope,\n client?: Client,\n isolationScope?: Scope,\n): PromiseLike<Event | null> {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n const prepared: Event = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n const eventProcessors = [\n ...clientEventProcessors,\n // eslint-disable-next-line deprecation/deprecation\n ...getGlobalEventProcessors(),\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n if (!debugIdMap) {\n return;\n }\n\n let debugIdStackFramesCache: Map<string, StackFrame[]>;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map<string, StackFrame[]>();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n let parsedStack: StackFrame[];\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n if (stackFrame.filename) {\n acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n break;\n }\n }\n return acc;\n }, {});\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event!.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap: Record<string, string> = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.keys(filenameDebugIdMap).forEach(filename => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id: filenameDebugIdMap[filename],\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n if (!event) {\n return null;\n }\n\n const normalized: Event = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n const data = spanToJSON(span).data;\n\n if (data) {\n // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n // eslint-disable-next-line deprecation/deprecation\n span.data = normalize(data, depth, maxBreadth);\n }\n\n return span;\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","/* eslint-disable max-lines */\nimport type {\n Attachment,\n Breadcrumb,\n CaptureContext,\n Client,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n PropagationContext,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n ScopeData,\n Session,\n Severity,\n SeverityLevel,\n Span,\n Transaction,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void>;\n\n /** Callback list that will be called after {@link applyToEvent}. */\n protected _eventProcessors: EventProcessor[];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[];\n\n /** User */\n protected _user: User;\n\n /** Tags */\n protected _tags: { [key: string]: Primitive };\n\n /** Extra */\n protected _extra: Extras;\n\n /** Contexts */\n protected _contexts: Contexts;\n\n /** Attachments */\n protected _attachments: Attachment[];\n\n /** Propagation Context for distributed tracing */\n protected _propagationContext: PropagationContext;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n // eslint-disable-next-line deprecation/deprecation\n protected _level?: Severity | SeverityLevel;\n\n /**\n * Transaction Name\n */\n protected _transactionName?: string;\n\n /** Span */\n protected _span?: Span;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /** The client on this scope */\n protected _client?: Client;\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n public constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * Inherit values from the parent scope.\n * @deprecated Use `scope.clone()` and `new Scope()` instead.\n */\n public static clone(scope?: Scope): Scope {\n return scope ? scope.clone() : new Scope();\n }\n\n /**\n * Clone this scope instance.\n */\n public clone(): Scope {\n const newScope = new Scope();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._span = this._span;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n\n return newScope;\n }\n\n /** Update the client on the scope. */\n public setClient(client: Client | undefined): void {\n this._client = client;\n }\n\n /**\n * Get the client assigned to this scope.\n *\n * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n */\n public getClient(): Client | undefined {\n return this._client;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n segment: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel,\n ): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope for future events.\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the Span on the scope.\n * @param span Span\n * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n */\n public setSpan(span?: Span): this {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Returns the `Span` if there is one.\n * @deprecated Use `getActiveSpan()` instead.\n */\n public getSpan(): Span | undefined {\n return this._span;\n }\n\n /**\n * Returns the `Transaction` attached to the scope (if there is one).\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n public getTransaction(): Transaction | undefined {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n const span = this._span;\n // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n // Also, this method will be removed anyway.\n // eslint-disable-next-line deprecation/deprecation\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n if (scopeToMerge instanceof Scope) {\n const scopeData = scopeToMerge.getScopeData();\n\n this._tags = { ...this._tags, ...scopeData.tags };\n this._extra = { ...this._extra, ...scopeData.extra };\n this._contexts = { ...this._contexts, ...scopeData.contexts };\n if (scopeData.user && Object.keys(scopeData.user).length) {\n this._user = scopeData.user;\n }\n if (scopeData.level) {\n this._level = scopeData.level;\n }\n if (scopeData.fingerprint.length) {\n this._fingerprint = scopeData.fingerprint;\n }\n if (scopeToMerge.getRequestSession()) {\n this._requestSession = scopeToMerge.getRequestSession();\n }\n if (scopeData.propagationContext) {\n this._propagationContext = scopeData.propagationContext;\n }\n } else if (isPlainObject(scopeToMerge)) {\n const scopeContext = captureContext as ScopeContext;\n this._tags = { ...this._tags, ...scopeContext.tags };\n this._extra = { ...this._extra, ...scopeContext.extra };\n this._contexts = { ...this._contexts, ...scopeContext.contexts };\n if (scopeContext.user) {\n this._user = scopeContext.user;\n }\n if (scopeContext.level) {\n this._level = scopeContext.level;\n }\n if (scopeContext.fingerprint) {\n this._fingerprint = scopeContext.fingerprint;\n }\n if (scopeContext.requestSession) {\n this._requestSession = scopeContext.requestSession;\n }\n if (scopeContext.propagationContext) {\n this._propagationContext = scopeContext.propagationContext;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getLastBreadcrumb(): Breadcrumb | undefined {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `getScopeData()` instead.\n */\n public getAttachments(): Attachment[] {\n const data = this.getScopeData();\n\n return data.attachments;\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n public getScopeData(): ScopeData {\n const {\n _breadcrumbs,\n _attachments,\n _contexts,\n _tags,\n _extra,\n _user,\n _level,\n _fingerprint,\n _eventProcessors,\n _propagationContext,\n _sdkProcessingMetadata,\n _transactionName,\n _span,\n } = this;\n\n return {\n breadcrumbs: _breadcrumbs,\n attachments: _attachments,\n contexts: _contexts,\n tags: _tags,\n extra: _extra,\n user: _user,\n level: _level,\n fingerprint: _fingerprint || [],\n eventProcessors: _eventProcessors,\n propagationContext: _propagationContext,\n sdkProcessingMetadata: _sdkProcessingMetadata,\n transactionName: _transactionName,\n span: _span,\n };\n }\n\n /**\n * Applies data from the scope to the event and runs all event processors on it.\n *\n * @param event Event\n * @param hint Object containing additional information about the original exception, for use by the event processors.\n * @hidden\n * @deprecated Use `applyScopeDataToEvent()` directly\n */\n public applyToEvent(\n event: Event,\n hint: EventHint = {},\n additionalEventProcessors: EventProcessor[] = [],\n ): PromiseLike<Event | null> {\n applyScopeDataToEvent(event, this.getScopeData());\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n const eventProcessors: EventProcessor[] = [\n ...additionalEventProcessors,\n // eslint-disable-next-line deprecation/deprecation\n ...getGlobalEventProcessors(),\n ...this._eventProcessors,\n ];\n\n return notifyEventProcessors(eventProcessors, event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setPropagationContext(context: PropagationContext): this {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getPropagationContext(): PropagationContext {\n return this._propagationContext;\n }\n\n /**\n * Capture an exception for this scope.\n *\n * @param exception The exception to capture.\n * @param hint Optinal additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Capture a message for this scope.\n *\n * @param message The message to capture.\n * @param level An optional severity level to report the message with.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured message.\n */\n public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Captures a manually created event for this scope and sends it to Sentry.\n *\n * @param exception The event to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n if (!globalScope) {\n globalScope = new Scope();\n }\n\n return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n","import type {\n Breadcrumb,\n BreadcrumbHint,\n CaptureContext,\n CheckIn,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n FinishedCheckIn,\n MonitorConfig,\n Primitive,\n Scope as ScopeInterface,\n Session,\n SessionContext,\n Severity,\n SeverityLevel,\n Span,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Hub } from './hub';\nimport { runWithAsyncContext } from './hub';\nimport { getCurrentHub, getIsolationScope } from './hub';\nimport type { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception: any,\n hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n captureContext?: CaptureContext | Severity | SeverityLevel,\n): string {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): ReturnType<Hub['addBreadcrumb']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, deprecation/deprecation\nexport function setContext(name: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtras(extras: Extras): ReturnType<Hub['setExtras']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtra(key: string, extra: Extra): ReturnType<Hub['setExtra']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTags(tags: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTag(key: string, value: Primitive): ReturnType<Hub['setTag']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setUser(user: User | null): ReturnType<Hub['setUser']> {\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: ScopeInterface | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n ...rest: [callback: (scope: Scope) => T] | [scope: ScopeInterface | undefined, callback: (scope: Scope) => T]\n): T {\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n if (!scope) {\n // eslint-disable-next-line deprecation/deprecation\n return hub.withScope(callback);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return hub.withScope(() => {\n // eslint-disable-next-line deprecation/deprecation\n hub.getStackTop().scope = scope as Scope;\n return callback(scope as Scope);\n });\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n return runWithAsyncContext(() => {\n return callback(getIsolationScope());\n });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span, callback: (scope: Scope) => T): T {\n return withScope(scope => {\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(span);\n return callback(scope);\n });\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nexport function startTransaction(\n context: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n // eslint-disable-next-line deprecation/deprecation\n): ReturnType<Hub['startTransaction']> {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n monitorSlug: CheckIn['monitorSlug'],\n callback: () => T,\n upsertMonitorConfig?: MonitorConfig,\n): T {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status: FinishedCheckIn['status']): void {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n () => {\n finishCheckIn('error');\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n * @deprecated This function will be removed in the next major version of the Sentry SDK.\n */\nexport function lastEventId(): string | undefined {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().getClient<C>();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client && client.captureSession) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n","import type { Span } from '@sentry/types';\n\n/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nexport function getRootSpan(span: Span): Span | undefined {\n // TODO (v8): Remove this check and just return span\n // eslint-disable-next-line deprecation/deprecation\n return span.transaction;\n}\n","import type { Client, DynamicSamplingContext, Scope, Span, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient, getCurrentScope } from '../exports';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport { spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n trace_id: string,\n client: Client,\n scope?: Scope,\n): DynamicSamplingContext {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n // TODO(v8): Remove segment from User\n // eslint-disable-next-line deprecation/deprecation\n const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n user_segment,\n public_key,\n trace_id,\n }) as DynamicSamplingContext;\n\n client.emit && client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\ntype TransactionWithV7FrozenDsc = Transaction & { _frozenDynamicSamplingContext?: DynamicSamplingContext };\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n // passing emit=false here to only emit later once the DSC is actually populated\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n const txn = getRootSpan(span) as TransactionWithV7FrozenDsc | undefined;\n if (!txn) {\n return dsc;\n }\n\n // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n // @see Transaction class constructor\n const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n if (v7FrozenDsc) {\n return v7FrozenDsc;\n }\n\n // TODO (v8): Replace txn.metadata with txn.attributes[]\n // We can't do this yet because attributes aren't always set yet.\n // eslint-disable-next-line deprecation/deprecation\n const { sampleRate: maybeSampleRate, source } = txn.metadata;\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const jsonSpan = spanToJSON(txn);\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n if (source && source !== 'url') {\n dsc.transaction = jsonSpan.description;\n }\n\n dsc.sampled = String(spanIsSampled(txn));\n\n client.emit && client.emit('createDsc', dsc);\n\n return dsc;\n}\n","import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan } from './getRootSpan';\nimport { spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n // eslint-disable-next-line deprecation/deprecation\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n // eslint-disable-next-line deprecation/deprecation\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n if (mergeVal && Object.keys(mergeVal).length) {\n // Clone object\n data[prop] = { ...data[prop] };\n for (const key in mergeVal) {\n if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n data[prop][key] = mergeVal[key];\n }\n }\n }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n event: Event,\n prop: Prop,\n mergeVal: ScopeData[Prop],\n): void {\n const prevVal = event[prop];\n // If we are not merging any new values,\n // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n if (!mergeVal.length && (!prevVal || prevVal.length)) {\n return;\n }\n\n const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n // eslint-disable-next-line deprecation/deprecation\n transactionName,\n } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n if (transactionName) {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n const rootSpan = getRootSpan(span);\n if (rootSpan) {\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n","export const SDK_VERSION = '7.114.0';\n","/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n Hub as HubInterface,\n Integration,\n IntegrationClass,\n Primitive,\n Session,\n SessionContext,\n Severity,\n SeverityLevel,\n Transaction,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n consoleSandbox,\n dateTimestampInSeconds,\n getGlobalSingleton,\n isThenable,\n logger,\n uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { SDK_VERSION } from './version';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\nexport interface RunWithAsyncContextOptions {\n /** Whether to reuse an existing async context if one exists. Defaults to false. */\n reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n /**\n * Gets the current async context. Returns undefined if there is no current async context.\n */\n // eslint-disable-next-line deprecation/deprecation\n getCurrentHub: () => Hub | undefined;\n /**\n * Runs the supplied callback in its own async context.\n */\n runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n client?: Client;\n scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: {\n // eslint-disable-next-line deprecation/deprecation\n hub?: Hub;\n acs?: AsyncContextStrategy;\n /**\n * Extra Hub properties injected by various SDKs\n */\n integrations?: Integration[];\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n}\n\n/**\n * @deprecated The `Hub` class will be removed in version 8 of the SDK in favour of `Scope` and `Client` objects.\n *\n * If you previously used the `Hub` class directly, replace it with `Scope` and `Client` objects. More information:\n * - [Multiple Sentry Instances](https://docs.sentry.io/platforms/javascript/best-practices/multiple-sentry-instances/)\n * - [Browser Extensions](https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/)\n *\n * Some of our APIs are typed with the Hub class instead of the interface (e.g. `getCurrentHub`). Most of them are deprecated\n * themselves and will also be removed in version 8. More information:\n * - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)\n */\n// eslint-disable-next-line deprecation/deprecation\nexport class Hub implements HubInterface {\n /** Is a {@link Layer}[] containing the client and scope */\n private readonly _stack: Layer[];\n\n /** Contains the last event id of a captured event. */\n private _lastEventId?: string;\n\n private _isolationScope: Scope;\n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n *\n * @deprecated Instantiation of Hub objects is deprecated and the constructor will be removed in version 8 of the SDK.\n *\n * If you are currently using the Hub for multi-client use like so:\n *\n * ```\n * // OLD\n * const hub = new Hub();\n * hub.bindClient(client);\n * makeMain(hub)\n * ```\n *\n * instead initialize the client as follows:\n *\n * ```\n * // NEW\n * Sentry.withIsolationScope(() => {\n * Sentry.setCurrentClient(client);\n * client.init();\n * });\n * ```\n *\n * If you are using the Hub to capture events like so:\n *\n * ```\n * // OLD\n * const client = new Client();\n * const hub = new Hub(client);\n * hub.captureException()\n * ```\n *\n * instead capture isolated events as follows:\n *\n * ```\n * // NEW\n * const client = new Client();\n * const scope = new Scope();\n * scope.setClient(client);\n * scope.captureException();\n * ```\n */\n public constructor(\n client?: Client,\n scope?: Scope,\n isolationScope?: Scope,\n private readonly _version: number = API_VERSION,\n ) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n assignedScope.setClient(client);\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n assignedIsolationScope.setClient(client);\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n this._stack = [{ scope: assignedScope }];\n\n if (client) {\n // eslint-disable-next-line deprecation/deprecation\n this.bindClient(client);\n }\n\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Checks if this hub's version is older than the given version.\n *\n * @param version A version number to compare to.\n * @return True if the given version is newer; otherwise false.\n *\n * @deprecated This will be removed in v8.\n */\n public isOlderThan(version: number): boolean {\n return this._version < version;\n }\n\n /**\n * This binds the given client to the current scope.\n * @param client An SDK client (client) instance.\n *\n * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n */\n public bindClient(client?: Client): void {\n // eslint-disable-next-line deprecation/deprecation\n const top = this.getStackTop();\n top.client = client;\n top.scope.setClient(client);\n // eslint-disable-next-line deprecation/deprecation\n if (client && client.setupIntegrations) {\n // eslint-disable-next-line deprecation/deprecation\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `withScope` instead.\n */\n public pushScope(): Scope {\n // We want to clone the content of prev scope\n // eslint-disable-next-line deprecation/deprecation\n const scope = this.getScope().clone();\n // eslint-disable-next-line deprecation/deprecation\n this.getStack().push({\n // eslint-disable-next-line deprecation/deprecation\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `withScope` instead.\n */\n public popScope(): boolean {\n // eslint-disable-next-line deprecation/deprecation\n if (this.getStack().length <= 1) return false;\n // eslint-disable-next-line deprecation/deprecation\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.withScope()` instead.\n */\n public withScope<T>(callback: (scope: Scope) => T): T {\n // eslint-disable-next-line deprecation/deprecation\n const scope = this.pushScope();\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n return res;\n },\n e => {\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n throw e;\n },\n );\n }\n\n // eslint-disable-next-line deprecation/deprecation\n this.popScope();\n return maybePromiseResult;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.getClient()` instead.\n */\n public getClient<C extends Client>(): C | undefined {\n // eslint-disable-next-line deprecation/deprecation\n return this.getStackTop().client as C;\n }\n\n /**\n * Returns the scope of the top stack.\n *\n * @deprecated Use `Sentry.getCurrentScope()` instead.\n */\n public getScope(): Scope {\n // eslint-disable-next-line deprecation/deprecation\n return this.getStackTop().scope;\n }\n\n /**\n * @deprecated Use `Sentry.getIsolationScope()` instead.\n */\n public getIsolationScope(): Scope {\n return this._isolationScope;\n }\n\n /**\n * Returns the scope stack for domains or the process.\n * @deprecated This will be removed in v8.\n */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n * @deprecated This will be removed in v8.\n */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureException()` instead.\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error('Sentry syntheticException');\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().captureException(exception, {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n });\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureMessage()` instead.\n */\n public captureMessage(\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n level?: Severity | SeverityLevel,\n hint?: EventHint,\n ): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error(message);\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().captureMessage(message, level, {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n });\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.captureEvent()` instead.\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (!event.type) {\n this._lastEventId = eventId;\n }\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n return eventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated This will be removed in v8.\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `Sentry.addBreadcrumb()` instead.\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n // eslint-disable-next-line deprecation/deprecation\n const { scope, client } = this.getStackTop();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n // the event processing pipeline.\n // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setUser()` instead.\n */\n public setUser(user: User | null): void {\n // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setUser(user);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setUser(user);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setTags()` instead.\n */\n public setTags(tags: { [key: string]: Primitive }): void {\n // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setTags(tags);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setTags(tags);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setExtras()` instead.\n */\n public setExtras(extras: Extras): void {\n // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setExtras(extras);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setExtras(extras);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setTag()` instead.\n */\n public setTag(key: string, value: Primitive): void {\n // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setTag(key, value);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setTag(key, value);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setExtra()` instead.\n */\n public setExtra(key: string, extra: Extra): void {\n // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setExtra(key, extra);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.setContext()` instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(name: string, context: { [key: string]: any } | null): void {\n // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n // eslint-disable-next-line deprecation/deprecation\n this.getScope().setContext(name, context);\n // eslint-disable-next-line deprecation/deprecation\n this.getIsolationScope().setContext(name, context);\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `getScope()` directly.\n */\n public configureScope(callback: (scope: Scope) => void): void {\n // eslint-disable-next-line deprecation/deprecation\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n public run(callback: (hub: Hub) => void): void {\n // eslint-disable-next-line deprecation/deprecation\n const oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n // eslint-disable-next-line deprecation/deprecation\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n */\n public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n // eslint-disable-next-line deprecation/deprecation\n const client = this.getClient();\n if (!client) return null;\n try {\n // eslint-disable-next-line deprecation/deprecation\n return client.getIntegration(integration);\n } catch (_oO) {\n DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\n public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n if (DEBUG_BUILD && !result) {\n // eslint-disable-next-line deprecation/deprecation\n const client = this.getClient();\n if (!client) {\n logger.warn(\n \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n );\n } else {\n logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n }\n }\n\n return result;\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `spanToTraceHeader()` instead.\n */\n public traceHeaders(): { [key: string]: string } {\n return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use top level `captureSession` instead.\n */\n public captureSession(endSession: boolean = false): void {\n // both send the update and pull the session from the scope\n if (endSession) {\n // eslint-disable-next-line deprecation/deprecation\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n * @deprecated Use top level `endSession` instead.\n */\n public endSession(): void {\n // eslint-disable-next-line deprecation/deprecation\n const layer = this.getStackTop();\n const scope = layer.scope;\n const session = scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n scope.setSession();\n }\n\n /**\n * @inheritDoc\n * @deprecated Use top level `startSession` instead.\n */\n public startSession(context?: SessionContext): Session {\n // eslint-disable-next-line deprecation/deprecation\n const { scope, client } = this.getStackTop();\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: scope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n // eslint-disable-next-line deprecation/deprecation\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n *\n * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n * only unnecessarily increased API surface but only wrapped accessing the option.\n */\n public shouldSendDefaultPii(): boolean {\n // eslint-disable-next-line deprecation/deprecation\n const client = this.getClient();\n const options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n private _sendSessionUpdate(): void {\n // eslint-disable-next-line deprecation/deprecation\n const { scope, client } = this.getStackTop();\n\n const session = scope.getSession();\n if (session && client && client.captureSession) {\n client.captureSession(session);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n const carrier = getMainCarrier();\n const sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n *\n * @deprecated Use `setCurrentClient()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function makeMain(hub: Hub): Hub {\n const registry = getMainCarrier();\n const oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n *\n * @deprecated Use the respective replacement method directly instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getCurrentHub(): Hub {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n if (hub) {\n return hub;\n }\n }\n\n // Return hub that lives on a global object\n return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nexport function getIsolationScope(): Scope {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentHub().getIsolationScope();\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n // If there's no hub, or its an old API, assign a new one\n\n if (\n !hasHubOnCarrier(registry) ||\n // eslint-disable-next-line deprecation/deprecation\n getHubFromCarrier(registry).isOlderThan(API_VERSION)\n ) {\n // eslint-disable-next-line deprecation/deprecation\n setHubOnCarrier(registry, new Hub());\n }\n\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (\n !hasHubOnCarrier(carrier) ||\n // eslint-disable-next-line deprecation/deprecation\n getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n ) {\n // eslint-disable-next-line deprecation/deprecation\n const client = parent.getClient();\n // eslint-disable-next-line deprecation/deprecation\n const scope = parent.getScope();\n // eslint-disable-next-line deprecation/deprecation\n const isolationScope = parent.getIsolationScope();\n // eslint-disable-next-line deprecation/deprecation\n setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n registry.__SENTRY__ = registry.__SENTRY__ || {};\n registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n const registry = getMainCarrier();\n\n if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n }\n\n // if there was no strategy, fallback to just calling the callback\n return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n // eslint-disable-next-line deprecation/deprecation\n return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n if (!carrier) return false;\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n","import type {\n Client,\n Event,\n EventHint,\n Integration,\n IntegrationClass,\n IntegrationFn,\n IntegrationFnResult,\n Options,\n} from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getClient } from './exports';\nimport { getCurrentHub } from './hub';\n\ndeclare module '@sentry/types' {\n interface Integration {\n isDefaultInstance?: boolean;\n }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n const integrationsByName: { [key: string]: Integration } = {};\n\n integrations.forEach(currentInstance => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach(integration => {\n integration.isDefaultInstance = true;\n });\n\n let integrations: Integration[];\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n integrations = arrayify(userIntegrations(defaultIntegrations));\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n if (debugIndex !== -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n const integrationIndex: IntegrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration && integration.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1) {\n // eslint-disable-next-line deprecation/deprecation\n integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (client.on && typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n const client = getClient();\n\n if (!client || !client.addIntegration) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n if (callback(arr[i]) === true) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nexport function convertIntegrationFnToClass<Fn extends IntegrationFn>(\n name: string,\n fn: Fn,\n): IntegrationClass<Integration> {\n return Object.assign(\n function ConvertedIntegration(...args: Parameters<Fn>): Integration {\n return fn(...args);\n },\n { id: name },\n ) as unknown as IntegrationClass<Integration>;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => IntegrationFnResult {\n return fn;\n}\n","import type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/,\n /^Cannot redefine property: googletag$/,\n];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n /^.*\\/healthcheck$/,\n /^.*\\/healthy$/,\n /^.*\\/live$/,\n /^.*\\/ready$/,\n /^.*\\/heartbeat$/,\n /^.*\\/health$/,\n /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n allowUrls: Array<string | RegExp>;\n denyUrls: Array<string | RegExp>;\n ignoreErrors: Array<string | RegExp>;\n ignoreTransactions: Array<string | RegExp>;\n ignoreInternal: boolean;\n disableErrorDefaults: boolean;\n disableTransactionDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options: Partial<InboundFiltersOptions> = {}) => {\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n}) satisfies IntegrationFn;\n\nexport const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const InboundFilters = convertIntegrationFnToClass(\n INTEGRATION_NAME,\n inboundFiltersIntegration,\n) as IntegrationClass<Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }> & {\n new (\n options?: Partial<{\n allowUrls: Array<string | RegExp>;\n denyUrls: Array<string | RegExp>;\n ignoreErrors: Array<string | RegExp>;\n ignoreTransactions: Array<string | RegExp>;\n ignoreInternal: boolean;\n disableErrorDefaults: boolean;\n disableTransactionDefaults: boolean;\n }>,\n ): Integration;\n};\n\nfunction _mergeOptions(\n internalOptions: Partial<InboundFiltersOptions> = {},\n clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [\n ...(internalOptions.ignoreTransactions || []),\n ...(clientOptions.ignoreTransactions || []),\n ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n ],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n const possibleMessages: string[] = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n if (DEBUG_BUILD && possibleMessages.length === 0) {\n logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n","import type { Client, Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../exports';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined ? originalFunction : this;\n return originalFunctionToString.apply(context, args);\n };\n } catch {\n // ignore errors here, just don't patch this\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n * integrations: [\n * functionToStringIntegration(),\n * ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const FunctionToString = convertIntegrationFnToClass(\n INTEGRATION_NAME,\n functionToStringIntegration,\n) as IntegrationClass<Integration & { setupOnce: () => void }>;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type FunctionToString = typeof FunctionToString;\n","import type { Client, ClientOptions } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { getCurrentScope } from './exports';\nimport { getCurrentHub } from './hub';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends ClientOptions> = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind<F extends Client, O extends ClientOptions>(\n clientClass: ClientClass<F, O>,\n options: O,\n): void {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n setCurrentClient(client);\n initializeClient(client);\n}\n\n/**\n * Make the given client the current client.\n */\nexport function setCurrentClient(client: Client): void {\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const top = hub.getStackTop();\n top.client = client;\n top.scope.setClient(client);\n}\n\n/**\n * Initialize the client for the current scope.\n * Make sure to call this after `setCurrentClient()`.\n */\nfunction initializeClient(client: Client): void {\n if (client.init) {\n client.init();\n // TODO v8: Remove this fallback\n // eslint-disable-next-line deprecation/deprecation\n } else if (client.setupIntegrations) {\n // eslint-disable-next-line deprecation/deprecation\n client.setupIntegrations();\n }\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\ndeclare const EdgeRuntime: string | undefined;\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-expect-error It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n if (!('fetch' in WINDOW)) {\n return false;\n }\n\n try {\n new Headers();\n new Request('http://www.example.com');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n if (typeof EdgeRuntime === 'string') {\n return true;\n }\n\n if (!supportsFetch()) {\n return false;\n }\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFetch(WINDOW.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement as unknown) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' as ReferrerPolicy,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chromeVar = (WINDOW as any).chrome;\n const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n Object.keys(handlers).forEach(key => {\n handlers[key as InstrumentHandlerType] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataHistory } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsHistory } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory(): void {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n return function (this: History, ...args: any[]): void {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() as string;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n","import type {\n Attachment,\n AttachmentItem,\n BaseEnvelopeHeaders,\n BaseEnvelopeItemHeaders,\n DataCategory,\n DsnComponents,\n Envelope,\n EnvelopeItemType,\n Event,\n EventEnvelopeHeaders,\n SdkInfo,\n SdkMetadata,\n TextEncoderInternal,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n envelope: Envelope,\n callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input: string, textEncoder?: TextEncoderInternal): Uint8Array {\n const utf8 = textEncoder || new TextEncoder();\n return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope, textEncoder?: TextEncoderInternal): string | Uint8Array {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n function append(next: string | Uint8Array): void {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload: string;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\nexport interface TextDecoderInternal {\n decode(input?: Uint8Array): string;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(\n env: string | Uint8Array,\n textEncoder: TextEncoderInternal,\n textDecoder: TextDecoderInternal,\n): Envelope {\n let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n function readBinary(length: number): Uint8Array {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson<T>(): T {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(textDecoder.decode(readBinary(i))) as T;\n }\n\n const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items: [any, any][] = [];\n\n while (buffer.length) {\n const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(\n attachment: Attachment,\n textEncoder?: TextEncoderInternal,\n): AttachmentItem {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record<EnvelopeItemType, DataCategory> = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n event: Event,\n sdkInfo: SdkInfo | undefined,\n tunnel: string | undefined,\n dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n /** Display name of this error instance. */\n public name: string;\n\n public logLevel: ConsoleLevel;\n\n public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n super(message);\n\n this.name = new.target.prototype.constructor.name;\n // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n // instances of `SentryError` fail `obj instanceof SentryError` checks.\n Object.setPrototypeOf(this, new.target.prototype);\n this.logLevel = logLevel;\n }\n}\n","import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n dsn: DsnComponents,\n // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n // options: ClientOptions = {} as ClientOptions,\n tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n // TODO (v8): Use this code instead\n // const { tunnel, _metadata = {} } = options;\n // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n const sdkInfo =\n typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n dsnLike: DsnLike,\n dialogOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n user?: { name?: string; email?: string };\n },\n): string {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n","import type { DsnComponents, MetricBucketItem, SdkMetadata, StatsdEnvelope, StatsdItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils';\n\n/**\n * Create envelope from a metric aggregate.\n */\nexport function createMetricEnvelope(\n metricBucketItems: Array<MetricBucketItem>,\n dsn?: DsnComponents,\n metadata?: SdkMetadata,\n tunnel?: string,\n): StatsdEnvelope {\n const headers: StatsdEnvelope[0] = {\n sent_at: new Date().toISOString(),\n };\n\n if (metadata && metadata.sdk) {\n headers.sdk = {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n };\n }\n\n if (!!tunnel && dsn) {\n headers.dsn = dsnToString(dsn);\n }\n\n const item = createMetricEnvelopeItem(metricBucketItems);\n return createEnvelope<StatsdEnvelope>(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems: MetricBucketItem[]): StatsdItem {\n const payload = serializeMetricBuckets(metricBucketItems);\n const metricHeaders: StatsdItem[0] = {\n type: 'statsd',\n length: payload.length,\n };\n return [metricHeaders, payload];\n}\n","import type { MeasurementUnit, MetricBucketItem, Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport type { MetricType } from './types';\n\n/**\n * Generate bucket key from metric properties.\n */\nexport function getBucketKey(\n metricType: MetricType,\n name: string,\n unit: MeasurementUnit,\n tags: Record<string, string>,\n): string {\n const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nexport function simpleHash(s: string): number {\n let rv = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n rv = (rv << 5) - rv + c;\n rv &= rv;\n }\n return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nexport function serializeMetricBuckets(metricBucketItems: MetricBucketItem[]): string {\n let out = '';\n for (const item of metricBucketItems) {\n const tagEntries = Object.entries(item.tags);\n const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n }\n return out;\n}\n\n/** Sanitizes units */\nexport function sanitizeUnit(unit: string): string {\n return unit.replace(/[^\\w]+/gi, '_');\n}\n\n/** Sanitizes metric keys */\nexport function sanitizeMetricKey(key: string): string {\n return key.replace(/[^\\w\\-.]+/gi, '_');\n}\n\nfunction sanitizeTagKey(key: string): string {\n return key.replace(/[^\\w\\-./]+/gi, '');\n}\n\nconst tagValueReplacements: [string, string][] = [\n ['\\n', '\\\\n'],\n ['\\r', '\\\\r'],\n ['\\t', '\\\\t'],\n ['\\\\', '\\\\\\\\'],\n ['|', '\\\\u{7c}'],\n [',', '\\\\u{2c}'],\n];\n\nfunction getCharOrReplacement(input: string): string {\n for (const [search, replacement] of tagValueReplacements) {\n if (input === search) {\n return replacement;\n }\n }\n\n return input;\n}\n\nfunction sanitizeTagValue(value: string): string {\n return [...value].reduce((acc, char) => acc + getCharOrReplacement(char), '');\n}\n\n/**\n * Sanitizes tags.\n */\nexport function sanitizeTags(unsanitizedTags: Record<string, Primitive>): Record<string, string> {\n const tags: Record<string, string> = {};\n for (const key in unsanitizedTags) {\n if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n const sanitizedKey = sanitizeTagKey(key);\n tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key]));\n }\n }\n return tags;\n}\n","/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n ClientOptions,\n DataCategory,\n DsnComponents,\n DynamicSamplingContext,\n Envelope,\n ErrorEvent,\n Event,\n EventDropReason,\n EventHint,\n EventProcessor,\n FeedbackEvent,\n Integration,\n IntegrationClass,\n MetricBucketItem,\n MetricsAggregator,\n Outcome,\n ParameterizedString,\n SdkMetadata,\n Session,\n SessionAggregates,\n Severity,\n SeverityLevel,\n StartSpanOptions,\n Transaction,\n TransactionEvent,\n Transport,\n TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n SentryError,\n SyncPromise,\n addItemToEnvelope,\n checkOrSetAlreadyCaught,\n createAttachmentEnvelopeItem,\n isParameterizedString,\n isPlainObject,\n isPrimitive,\n isThenable,\n logger,\n makeDsn,\n rejectedSyncPromise,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport { getClient } from './exports';\nimport { getIsolationScope } from './hub';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport { createMetricEnvelope } from './metrics/envelope';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\n /**\n * A reference to a metrics aggregator\n *\n * @experimental Note this is alpha API. It may experience breaking changes in the future.\n */\n public metricsAggregator?: MetricsAggregator;\n\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n protected readonly _dsn?: DsnComponents;\n\n protected readonly _transport?: Transport;\n\n /** Array of set up integrations. */\n protected _integrations: IntegrationIndex;\n\n /** Indicates whether this client's integrations have been set up. */\n protected _integrationsInitialized: boolean;\n\n /** Number of calls being processed */\n protected _numProcessing: number;\n\n protected _eventProcessors: EventProcessor[];\n\n /** Holds flushable */\n private _outcomes: { [key: string]: number };\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _hooks: Record<string, Function[]>;\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n protected constructor(options: O) {\n this._options = options;\n this._integrations = {};\n this._integrationsInitialized = false;\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n this._process(\n this.eventFromException(exception, hint)\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level?: Severity | SeverityLevel,\n hint?: EventHint,\n scope?: Scope,\n ): string | undefined {\n let eventId: string | undefined = hint && hint.event_id;\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hint)\n : this.eventFromException(message, hint);\n\n this._process(\n promisedEvent\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId: string | undefined = hint && hint.event_id;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(\n this._captureEvent(event, hint, capturedSpanScope || scope).then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(session: Session): void {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getDsn(): DsnComponents | undefined {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n public getOptions(): O {\n return this._options;\n }\n\n /**\n * @see SdkMetadata in @sentry/types\n *\n * @return The metadata of the SDK\n */\n public getSdkMetadata(): SdkMetadata | undefined {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport | undefined {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n public flush(timeout?: number): PromiseLike<boolean> {\n const transport = this._transport;\n if (transport) {\n if (this.metricsAggregator) {\n this.metricsAggregator.flush();\n }\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike<boolean> {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n if (this.metricsAggregator) {\n this.metricsAggregator.close();\n }\n return result;\n });\n }\n\n /** Get all installed event processors. */\n public getEventProcessors(): EventProcessor[] {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n public addEventProcessor(eventProcessor: EventProcessor): void {\n this._eventProcessors.push(eventProcessor);\n }\n\n /**\n * This is an internal function to setup all integrations that should run on the client.\n * @deprecated Use `client.init()` instead.\n */\n public setupIntegrations(forceInitialize?: boolean): void {\n if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n this._setupIntegrations();\n }\n }\n\n /** @inheritdoc */\n public init(): void {\n if (this._isEnabled()) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its `id`.\n *\n * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n * @deprecated Use `getIntegrationByName()` instead.\n */\n public getIntegrationById(integrationId: string): Integration | undefined {\n return this.getIntegrationByName(integrationId);\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n return this._integrations[integrationName] as T | undefined;\n }\n\n /**\n * Returns the client's instance of the given integration class, it any.\n * @deprecated Use `getIntegrationByName()` instead.\n */\n public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n try {\n return (this._integrations[integration.id] as T) || null;\n } catch (_oO) {\n DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n public addIntegration(integration: Integration): void {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event, hint: EventHint = {}): void {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(\n env,\n createAttachmentEnvelopeItem(\n attachment,\n this._options.transportOptions && this._options.transportOptions.textEncoder,\n ),\n );\n }\n\n const promise = this._sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session | SessionAggregates): void {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n // Note: we use `event` in replay, where we overwrite this hook.\n\n if (this._options.sendClientReports) {\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Adding outcome: \"${key}\"`);\n\n // The following works because undefined + 1 === NaN and NaN is falsy\n this._outcomes[key] = this._outcomes[key] + 1 || 1;\n }\n }\n\n /**\n * @inheritDoc\n */\n public captureAggregateMetrics(metricBucketItems: Array<MetricBucketItem>): void {\n DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n const metricsEnvelope = createMetricEnvelope(\n metricBucketItems,\n this._dsn,\n this._options._metadata,\n this._options.tunnel,\n );\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(metricsEnvelope);\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'afterSendEvent',\n callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSendFeedback',\n callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: 'startPageLoadSpan', callback: (options: StartSpanOptions) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => void): void;\n\n /** @inheritdoc */\n public on(hook: string, callback: unknown): void {\n if (!this._hooks[hook]) {\n this._hooks[hook] = [];\n }\n\n // @ts-expect-error We assue the types are correct\n this._hooks[hook].push(callback);\n }\n\n /** @inheritdoc */\n public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n /** @inheritdoc */\n public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n /** @inheritdoc */\n public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n /** @inheritdoc */\n public emit(hook: 'startPageLoadSpan', options: StartSpanOptions): void;\n\n /** @inheritdoc */\n public emit(hook: 'startNavigationSpan', options: StartSpanOptions): void;\n\n /** @inheritdoc */\n public emit(hook: string, ...rest: unknown[]): void {\n if (this._hooks[hook]) {\n this._hooks[hook].forEach(callback => callback(...rest));\n }\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n protected _setupIntegrations(): void {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n\n // TODO v8: We don't need this flag anymore\n this._integrationsInitialized = true;\n }\n\n /** Updates existing session based on the provided event */\n protected _updateSessionFromEvent(session: Session, event: Event): void {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n return new SyncPromise(resolve => {\n let ticked: number = 0;\n const tick: number = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n protected _isEnabled(): boolean {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n scope?: Scope,\n isolationScope = getIsolationScope(),\n ): PromiseLike<Event | null> {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n const propagationContext = {\n ...isolationScope.getPropagationContext(),\n ...(scope ? scope.getPropagationContext() : undefined),\n };\n\n const trace = evt.contexts && evt.contexts.trace;\n if (!trace && propagationContext) {\n const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n evt.contexts = {\n trace: {\n trace_id,\n span_id: spanId,\n parent_span_id: parentSpanId,\n },\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n }\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike<string | undefined> {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n const sentryError = reason as SentryError;\n if (sentryError.logLevel === 'log') {\n logger.log(sentryError.message);\n } else {\n logger.warn(sentryError);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n protected _processEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event> {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, scope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = scope && scope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n protected _process<T>(promise: PromiseLike<T>): void {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * @inheritdoc\n */\n protected _sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending event:', reason);\n });\n } else {\n DEBUG_BUILD && logger.error('Transport disabled');\n }\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n protected _clearOutcomes(): Outcome[] {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.keys(outcomes).map(key => {\n const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n });\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n /**\n * @inheritDoc\n */\n public abstract eventFromMessage(\n _message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n _level?: Severity | SeverityLevel,\n _hint?: EventHint,\n ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult: PromiseLike<Event | null> | Event | null,\n beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n const { beforeSend, beforeSendTransaction } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event) && beforeSendTransaction) {\n return beforeSendTransaction(event, hint);\n }\n\n return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n const client = getClient();\n\n if (!client || !client.addEventProcessor) {\n return;\n }\n\n client.addEventProcessor(callback);\n}\n","import type { Options } from '@sentry/types';\nimport { SDK_VERSION } from '../version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n const metadata = options._metadata || {};\n\n if (!metadata.sdk) {\n metadata.sdk = {\n name: `sentry.javascript.${name}`,\n packages: names.map(name => ({\n name: `${source}:@sentry/${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n };\n }\n\n options._metadata = metadata;\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { getClient } from '@sentry/core';\nimport type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n Severity,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n","import type { browserTracingIntegration } from '@sentry-internal/tracing';\nimport { BrowserTracing } from '@sentry-internal/tracing';\nimport { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Integration, Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n getOriginalFunction,\n markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n fn: WrappedFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n before?: WrappedFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n return wrapper;\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n /* eslint-disable prefer-rest-params */\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped: WrappedFunction = function (this: unknown): void {\n const args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\n return fn.name;\n },\n });\n }\n // eslint-disable-next-line no-empty\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n *\n * @deprecated This type will be removed in the next major version of the Sentry SDK. `showReportDialog` will still be around, however the `eventId` option will now be required.\n */\nexport interface ReportDialogOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n eventId?: string;\n dsn?: DsnLike;\n user?: {\n email?: string;\n name?: string;\n };\n lang?: string;\n title?: string;\n subtitle?: string;\n subtitle2?: string;\n labelName?: string;\n labelEmail?: string;\n labelComments?: string;\n labelClose?: string;\n labelSubmit?: string;\n errorGeneric?: string;\n errorFormEntry?: string;\n successMessage?: string;\n /** Callback after reportDialog showed up */\n onLoad?(this: void): void;\n /** Callback after reportDialog closed */\n onClose?(this: void): void;\n}\n\n/**\n * This is a slim shim of `browserTracingIntegration` for the CDN bundles.\n * Since the actual functional integration uses a different code from `BrowserTracing`,\n * we want to avoid shipping both of them in the CDN bundles, as that would blow up the size.\n * Instead, we provide a functional integration with the same API, but the old implementation.\n * This means that it's not possible to register custom routing instrumentation, but that's OK for now.\n * We also don't expose the utilities for this anyhow in the CDN bundles.\n * For users that need custom routing in CDN bundles, they have to continue using `new BrowserTracing()` until v8.\n */\nexport function bundleBrowserTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] = {},\n): Integration {\n // Migrate some options from the old integration to the new one\n // eslint-disable-next-line deprecation/deprecation\n const opts: ConstructorParameters<typeof BrowserTracing>[0] = options;\n\n if (typeof options.markBackgroundSpan === 'boolean') {\n opts.markBackgroundTransactions = options.markBackgroundSpan;\n }\n\n if (typeof options.instrumentPageLoad === 'boolean') {\n opts.startTransactionOnPageLoad = options.instrumentPageLoad;\n }\n\n if (typeof options.instrumentNavigation === 'boolean') {\n opts.startTransactionOnLocationChange = options.instrumentNavigation;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return new BrowserTracing(opts);\n}\n","import type { Scope } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport { BaseClient } from '@sentry/core';\nimport type {\n BrowserClientProfilingOptions,\n BrowserClientReplayOptions,\n ClientOptions,\n Event,\n EventHint,\n Options,\n ParameterizedString,\n Severity,\n SeverityLevel,\n UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options<BrowserTransportOptions> &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions<BrowserTransportOptions> &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient<BrowserClientOptions> {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n public constructor(options: BrowserClientOptions) {\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(options, 'browser', ['browser'], sdkSource);\n\n super(options);\n\n if (options.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike<Event> {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n public captureUserFeedback(feedback: UserFeedback): void {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n\n /**\n * Sends client reports as an envelope.\n */\n private _flushOutcomes(): void {\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n feedback: UserFeedback,\n {\n metadata,\n tunnel,\n dsn,\n }: {\n metadata: SdkMetadata | undefined;\n tunnel: string | undefined;\n dsn: DsnComponents | undefined;\n },\n): EventEnvelope {\n const headers: EventEnvelope[0] = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata &&\n metadata.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n const feedbackHeaders: UserFeedbackItem[0] = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n discarded_events: ClientReport['discarded_events'],\n dsn?: string,\n timestamp?: number,\n): ClientReportEnvelope {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args: any[]): void {\n const handlerData: HandlerDataConsole = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataDom } from '@sentry/types';\n\nimport { uuid4 } from '../misc';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n __sentry_instrumentation_handlers__?: {\n [key in 'click' | 'keypress']?: {\n handler?: Function;\n /** The number of custom listeners attached to this element */\n refCount: number;\n };\n };\n};\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): AddEventListener {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler: (data: HandlerDataDom) => void,\n globalListener: boolean = false,\n): (event: Event) => void {\n return (event: Event & { _sentryCaptured?: true }): void => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData: HandlerDataDom = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n try {\n return event.target as SentryWrappedTarget | null;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { isString } from '../is';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!(WINDOW as any).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const startTimestamp = Date.now();\n\n // open() should always be called with two or more arguments\n // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n const url = parseUrl(args[1]);\n\n if (!method || !url) {\n return originalOpen.apply(this, args);\n }\n\n this[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {},\n };\n\n // if Sentry key appears in URL, don't capture it as a request\n if (method === 'POST' && url.match(/sentry_key/)) {\n this.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler: () => void = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (this.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = this.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData: HandlerDataXhr = {\n args: [method, url],\n endTimestamp: Date.now(),\n startTimestamp,\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n onreadystatechangeHandler();\n return original.apply(this, readyStateArgs);\n };\n });\n } else {\n this.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n const [header, value] = setRequestHeaderArgs;\n\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return original.apply(this, setRequestHeaderArgs);\n };\n });\n\n return originalOpen.apply(this, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(this, args);\n }\n\n if (args[0] !== undefined) {\n sentryXhrData.body = args[0];\n }\n\n const handlerData: HandlerDataXhr = {\n args: [sentryXhrData.method, sentryXhrData.url],\n startTimestamp: Date.now(),\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n if (isString(url)) {\n return url;\n }\n\n try {\n // url can be a string or URL\n // but since URL is not available in IE11, we do not check for it,\n // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n // If that fails, we just return undefined\n return (url as URL).toString();\n } catch {} // eslint-disable-line no-empty\n\n return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch(): void {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n return function (...args: any[]): void {\n const { method, url } = parseFetchArgs(args);\n\n const handlerData: HandlerDataFetch = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: Date.now(),\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n (response: Response) => {\n const finishedHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: Date.now(),\n response,\n };\n\n triggerHandlers('fetch', finishedHandlerData);\n return response;\n },\n (error: Error) => {\n const erroredHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: Date.now(),\n error,\n };\n\n triggerHandlers('fetch', erroredHandlerData);\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs as [FetchResource, object];\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg as FetchResource),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n","/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","type PartialURL = {\n host?: string;\n path?: string;\n protocol?: string;\n relative?: string;\n search?: string;\n hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n const { protocol, host, path } = url;\n\n const filteredHost =\n (host &&\n host\n // Always filter out authority\n .replace(/^.*@/, '[filtered]:[filtered]@')\n // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n // TODO: Use new URL global if it exists\n .replace(/(:80)$/, '')\n .replace(/(:443)$/, '')) ||\n '';\n\n return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","/* eslint-disable max-lines */\nimport { addBreadcrumb, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n Client,\n Event as SentryEvent,\n HandlerDataConsole,\n HandlerDataDom,\n HandlerDataFetch,\n HandlerDataHistory,\n HandlerDataXhr,\n Integration,\n IntegrationClass,\n IntegrationFn,\n} from '@sentry/types';\nimport type {\n Breadcrumb,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n XhrBreadcrumbData,\n XhrBreadcrumbHint,\n} from '@sentry/types/build/types/breadcrumb';\nimport {\n SENTRY_XHR_DATA_KEY,\n addClickKeypressInstrumentationHandler,\n addConsoleInstrumentationHandler,\n addFetchInstrumentationHandler,\n addHistoryInstrumentationHandler,\n addXhrInstrumentationHandler,\n getComponentName,\n getEventDescription,\n htmlTreeAsString,\n logger,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry && client.on) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Default Breadcrumbs instrumentations\n *\n * @deprecated Use `breadcrumbsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration) as IntegrationClass<\n Integration & { setup: (client: Client) => void }\n> & {\n new (\n options?: Partial<{\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n }>,\n ): Integration;\n};\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n return function addSentryBreadcrumb(event: SentryEvent): void {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client: Client,\n dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event as Event | Node;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb: Breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data: XhrBreadcrumbData = {\n method,\n url,\n status_code,\n };\n\n const hint: XhrBreadcrumbHint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data: FetchBreadcrumbData = handlerData.fetchData;\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response as Response | undefined;\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n if (getClient() !== client) {\n return;\n }\n\n let from: string | undefined = handlerData.from;\n let to: string | undefined = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n return !!event && !!(event as Record<string, unknown>).target;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Exception, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent: Event | undefined;\n\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n}) satisfies IntegrationFn;\n\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration) as IntegrationClass<\n Integration & { processEvent: (event: Event) => Event }\n>;\n\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n let currentFrames = _getFramesFromEvent(currentEvent);\n let previousFrames = _getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames as StackFrame[];\n previousFrames = previousFrames as StackFrame[];\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint as string[];\n previousFingerprint = previousFingerprint as string[];\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n try {\n // @ts-expect-error Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n","import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n GLOBAL_OBJ.onerror = function (\n msg: string | object,\n url?: string,\n line?: number,\n column?: number,\n error?: Error,\n ): boolean {\n const handlerData: HandlerDataError = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n const handlerData: HandlerDataUnhandledRejection = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { captureEvent, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n Client,\n Event,\n Integration,\n IntegrationClass,\n IntegrationFn,\n Primitive,\n StackParser,\n} from '@sentry/types';\nimport {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n getLocationHref,\n isErrorEvent,\n isPrimitive,\n isString,\n logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial<GlobalHandlersIntegrations> = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\n/**\n * Global handlers.\n * @deprecated Use `globalHandlersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const GlobalHandlers = convertIntegrationFnToClass(\n INTEGRATION_NAME,\n globalHandlersIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n new (options?: Partial<GlobalHandlersIntegrations>): Integration;\n};\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event =\n error === undefined && isString(msg)\n ? _eventFromIncompleteOnError(msg, url, line, column)\n : _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e as unknown);\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onunhandledrejection',\n },\n });\n });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n if (isPrimitive(error)) {\n return error;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const e = error as any;\n\n // dig the object of the rejection out of known event types\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in e) {\n return e.reason;\n }\n\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in e && 'reason' in e.detail) {\n return e.detail.reason;\n }\n } catch {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n const ERROR_TYPES_RE =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n // If 'message' is ErrorEvent, get real message from inside\n let message = isErrorEvent(msg) ? msg.message : msg;\n let name = 'Error';\n\n const groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n\n const event = {\n exception: {\n values: [\n {\n type: name,\n value: message,\n },\n ],\n },\n };\n\n return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: '?',\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n const client = getClient<BrowserClient>();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\nimport { WINDOW } from '../helpers';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst _httpContextIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n preprocessEvent(event) {\n // if none of the information we want exists, don't bother\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...event.request, ...(url && { url }), headers };\n\n event.request = request;\n },\n };\n}) satisfies IntegrationFn;\n\nexport const httpContextIntegration = defineIntegration(_httpContextIntegration);\n\n/**\n * HttpContext integration collects information about HTTP request headers.\n * @deprecated Use `httpContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration) as IntegrationClass<\n Integration & { preprocessEvent: (event: Event) => void }\n>;\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n maxValueLimit: number = 250,\n key: string,\n limit: number,\n event: Event,\n hint?: EventHint,\n): void {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException: Exception | undefined =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException as ExtendedError,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n limit: number,\n error: ExtendedError,\n key: string,\n prevExceptions: Exception[],\n exception: Exception,\n exceptionId: number,\n): Exception[] {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n // Recursively call this function in order to walk down a chain of errors\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception: Exception,\n source: string,\n exceptionId: number,\n parentId: number | undefined,\n): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder';\n\ninterface LinkedErrorsOptions {\n key?: string;\n limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n}) satisfies IntegrationFn;\n\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Aggregrate linked errors in an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration) as IntegrationClass<\n Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }\n> & { new (options?: { key?: string; limit?: number }): Integration };\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'BroadcastChannel',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'SharedWorker',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\nconst _browserApiErrorsIntegration = ((options: Partial<TryCatchOptions> = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n }\n\n if (_options.setInterval) {\n fill(WINDOW, 'setInterval', _wrapTimeFunction);\n }\n\n if (_options.requestAnimationFrame) {\n fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n * @deprecated Use `browserApiErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const TryCatch = convertIntegrationFnToClass(\n INTEGRATION_NAME,\n browserApiErrorsIntegration,\n) as IntegrationClass<Integration> & {\n new (options?: {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n }): Integration;\n};\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: false,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalObject = WINDOW as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = globalObject[target] && globalObject[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: VoidFunction,): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n const parts = chromeRegex.exec(line);\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line);\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line);\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n // exposes the internal array so tests can assert on the state of it.\n // XXX: this really should not be public api.\n $: Array<PromiseLike<T>>;\n add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n const buffer: Array<PromiseLike<T>> = [];\n\n function isReady(): boolean {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns Removed promise.\n */\n function remove(task: PromiseLike<T>): PromiseLike<T> {\n return buffer.splice(buffer.indexOf(task), 1)[0];\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n * PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout?: number): PromiseLike<boolean> {\n return new SyncPromise<boolean>((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n","import type { DataCategory, TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n limits: RateLimits,\n { statusCode, headers }: TransportMakeRequestResponse,\n now: number = Date.now(),\n): RateLimits {\n const updatedRateLimits: RateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n * <header>,<header>,..\n * where each <header> is of the form\n * <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n * where\n * <retry_after> is a delay in seconds\n * <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * <category>;<category>;...\n * <scope> is what's being limited (org, project, or key) - ignored by SDK\n * <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n * <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n","import type {\n Envelope,\n EnvelopeItem,\n EnvelopeItemType,\n Event,\n EventDropReason,\n EventItem,\n InternalBaseTransportOptions,\n Transport,\n TransportMakeRequestResponse,\n TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n SentryError,\n createEnvelope,\n envelopeItemTypeToDataCategory,\n forEachEnvelopeItem,\n isRateLimited,\n logger,\n makePromiseBuffer,\n resolvedSyncPromise,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n options: InternalBaseTransportOptions,\n makeRequest: TransportRequestExecutor,\n buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n): Transport {\n let rateLimits: RateLimits = {};\n const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason: EventDropReason): void => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise();\n } else {\n throw error;\n }\n },\n );\n }\n\n // We use this to identifify if the transport is the base transport\n // TODO (v8): Remove this again as we'll no longer need it\n send.__sentry__baseTransport__ = true;\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import { isNativeFetch, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\nlet cachedFetchImpl: FetchImpl | undefined = undefined;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n if (cachedFetchImpl) {\n return cachedFetchImpl;\n }\n\n /* eslint-disable @typescript-eslint/unbound-method */\n\n // Fast path to avoid DOM I/O\n if (isNativeFetch(WINDOW.fetch)) {\n return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n }\n\n const document = WINDOW.document;\n let fetchImpl = WINDOW.fetch;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.fetch) {\n fetchImpl = contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nexport function clearCachedFetchImplementation(): void {\n cachedFetchImpl = undefined;\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\nimport type { FetchImpl } from './utils';\nimport { clearCachedFetchImplementation, getNativeFetchImplementation } from './utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n options: BrowserTransportOptions,\n nativeFetch: FetchImpl = getNativeFetchImplementation(),\n): Transport {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions: RequestInit = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n try {\n return nativeFetch(options.url, requestOptions).then(response => {\n pendingBodySize -= requestSize;\n pendingCount--;\n return {\n statusCode: response.status,\n headers: {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n },\n };\n });\n } catch (e) {\n clearCachedFetchImplementation();\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nexport function makeXHRTransport(options: BrowserTransportOptions): Transport {\n function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n return new SyncPromise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n\n xhr.onerror = reject;\n\n xhr.onreadystatechange = (): void => {\n if (xhr.readyState === XHR_READYSTATE_DONE) {\n resolve({\n statusCode: xhr.status,\n headers: {\n 'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': xhr.getResponseHeader('Retry-After'),\n },\n });\n }\n };\n\n xhr.open('POST', options.url);\n\n for (const header in options.headers) {\n if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n xhr.setRequestHeader(header, options.headers[header]);\n }\n }\n\n xhr.send(request.body);\n });\n }\n\n return createTransport(options, makeRequest);\n}\n","import type { Hub } from '@sentry/core';\nimport { functionToStringIntegration, inboundFiltersIntegration } from '@sentry/core';\nimport {\n captureSession,\n getClient,\n getCurrentHub,\n getIntegrationsToSetup,\n getReportDialogEndpoint,\n initAndBind,\n startSession,\n} from '@sentry/core';\nimport type { Integration, Options, UserFeedback } from '@sentry/types';\nimport {\n addHistoryInstrumentationHandler,\n logger,\n stackParserFromStackParserOptions,\n supportsFetch,\n} from '@sentry/utils';\n\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { ReportDialogOptions } from './helpers';\nimport { WINDOW, wrap as internalWrap } from './helpers';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs';\nimport { dedupeIntegration } from './integrations/dedupe';\nimport { globalHandlersIntegration } from './integrations/globalhandlers';\nimport { httpContextIntegration } from './integrations/httpcontext';\nimport { linkedErrorsIntegration } from './integrations/linkederrors';\nimport { browserApiErrorsIntegration } from './integrations/trycatch';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nexport const defaultIntegrations = [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n];\n\n/** Get the default integrations for the browser SDK. */\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n // We return a copy of the defaultIntegrations here to avoid mutating this\n return [\n // eslint-disable-next-line deprecation/deprecation\n ...defaultIntegrations,\n ];\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = getDefaultIntegrations(options);\n }\n if (options.release === undefined) {\n // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n if (typeof __SENTRY_RELEASE__ === 'string') {\n options.release = __SENTRY_RELEASE__;\n }\n\n // This supports the variable that sentry-webpack-plugin injects\n if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n options.release = WINDOW.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n const clientOptions: BrowserClientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n };\n\n initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\ntype NewReportDialogOptions = ReportDialogOptions & { eventId: string }; // eslint-disable-line\n\ninterface ShowReportDialogFunction {\n /**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\n (options: NewReportDialogOptions): void;\n\n /**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n *\n * @deprecated Please always pass an `options` argument with `eventId`. The `hub` argument will not be used in the next version of the SDK.\n */\n // eslint-disable-next-line deprecation/deprecation\n (options?: ReportDialogOptions, hub?: Hub): void;\n}\n\nexport const showReportDialog: ShowReportDialogFunction = (\n // eslint-disable-next-line deprecation/deprecation\n options: ReportDialogOptions = {},\n // eslint-disable-next-line deprecation/deprecation\n hub: Hub = getCurrentHub(),\n) => {\n // doesn't work without a document (React Native)\n if (!WINDOW.document) {\n DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const { client, scope } = hub.getStackTop();\n const dsn = options.dsn || (client && client.getDsn());\n if (!dsn) {\n DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n // TODO(v8): Remove this entire if statement. `eventId` will be a required option.\n // eslint-disable-next-line deprecation/deprecation\n if (!options.eventId) {\n // eslint-disable-next-line deprecation/deprecation\n options.eventId = hub.lastEventId();\n }\n\n const script = WINDOW.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n const { onClose } = options;\n if (onClose) {\n const reportDialogClosedMessageHandler = (event: MessageEvent): void => {\n if (event.data === '__sentry_reportdialog_closed__') {\n try {\n onClose();\n } finally {\n WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n }\n }\n };\n WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n }\n\n const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n const client = getClient<BrowserClient>();\n if (client) {\n client.captureUserFeedback(feedback);\n }\n}\n","import type { MeasurementUnit, Span } from '@sentry/types';\nimport type { MetricSummary } from '@sentry/types';\nimport type { Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getActiveSpan } from '../tracing';\nimport type { MetricType } from './types';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\ntype MetricSummaryStorage = Map<string, [string, MetricSummary]>;\n\nlet SPAN_METRIC_SUMMARY: WeakMap<Span, MetricSummaryStorage> | undefined;\n\nfunction getMetricStorageForSpan(span: Span): MetricSummaryStorage | undefined {\n return SPAN_METRIC_SUMMARY ? SPAN_METRIC_SUMMARY.get(span) : undefined;\n}\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nexport function getMetricSummaryJsonForSpan(span: Span): Record<string, Array<MetricSummary>> | undefined {\n const storage = getMetricStorageForSpan(span);\n\n if (!storage) {\n return undefined;\n }\n const output: Record<string, Array<MetricSummary>> = {};\n\n for (const [, [exportKey, summary]] of storage) {\n if (!output[exportKey]) {\n output[exportKey] = [];\n }\n\n output[exportKey].push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nexport function updateMetricSummaryOnActiveSpan(\n metricType: MetricType,\n sanitizedName: string,\n value: number,\n unit: MeasurementUnit,\n tags: Record<string, Primitive>,\n bucketKey: string,\n): void {\n const span = getActiveSpan();\n if (span) {\n const storage = getMetricStorageForSpan(span) || new Map<string, [string, MetricSummary]>();\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n\n if (!SPAN_METRIC_SUMMARY) {\n SPAN_METRIC_SUMMARY = new WeakMap();\n }\n\n SPAN_METRIC_SUMMARY.set(span, storage);\n }\n}\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/**\n * The id of the profile that this span occured in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'profile_id';\n","import type { Span } from '@sentry/types';\n\n/** The status of an Span.\n *\n * @deprecated Use string literals - if you require type casting, cast to SpanStatusType type\n */\nexport enum SpanStatus {\n /** The operation completed successfully. */\n Ok = 'ok',\n /** Deadline expired before operation could complete. */\n DeadlineExceeded = 'deadline_exceeded',\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n Unauthenticated = 'unauthenticated',\n /** 403 Forbidden */\n PermissionDenied = 'permission_denied',\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n NotFound = 'not_found',\n /** 429 Too Many Requests */\n ResourceExhausted = 'resource_exhausted',\n /** Client specified an invalid argument. 4xx. */\n InvalidArgument = 'invalid_argument',\n /** 501 Not Implemented */\n Unimplemented = 'unimplemented',\n /** 503 Service Unavailable */\n Unavailable = 'unavailable',\n /** Other/generic 5xx. */\n InternalError = 'internal_error',\n /** Unknown. Any non-standard HTTP status code. */\n UnknownError = 'unknown_error',\n /** The operation was cancelled (typically by the user). */\n Cancelled = 'cancelled',\n /** Already exists (409) */\n AlreadyExists = 'already_exists',\n /** Operation was rejected because the system is not in a state required for the operation's */\n FailedPrecondition = 'failed_precondition',\n /** The operation was aborted, typically due to a concurrency issue. */\n Aborted = 'aborted',\n /** Operation was attempted past the valid range. */\n OutOfRange = 'out_of_range',\n /** Unrecoverable data loss or corruption */\n DataLoss = 'data_loss',\n}\n\nexport type SpanStatusType =\n /** The operation completed successfully. */\n | 'ok'\n /** Deadline expired before operation could complete. */\n | 'deadline_exceeded'\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n | 'unauthenticated'\n /** 403 Forbidden */\n | 'permission_denied'\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n | 'not_found'\n /** 429 Too Many Requests */\n | 'resource_exhausted'\n /** Client specified an invalid argument. 4xx. */\n | 'invalid_argument'\n /** 501 Not Implemented */\n | 'unimplemented'\n /** 503 Service Unavailable */\n | 'unavailable'\n /** Other/generic 5xx. */\n | 'internal_error'\n /** Unknown. Any non-standard HTTP status code. */\n | 'unknown_error'\n /** The operation was cancelled (typically by the user). */\n | 'cancelled'\n /** Already exists (409) */\n | 'already_exists'\n /** Operation was rejected because the system is not in a state required for the operation's */\n | 'failed_precondition'\n /** The operation was aborted, typically due to a concurrency issue. */\n | 'aborted'\n /** Operation was attempted past the valid range. */\n | 'out_of_range'\n /** Unrecoverable data loss or corruption */\n | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatusType {\n if (httpStatus < 400 && httpStatus >= 100) {\n return 'ok';\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission_denied';\n case 404:\n return 'not_found';\n case 409:\n return 'already_exists';\n case 413:\n return 'failed_precondition';\n case 429:\n return 'resource_exhausted';\n default:\n return 'invalid_argument';\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline_exceeded';\n default:\n return 'internal_error';\n }\n }\n\n return 'unknown_error';\n}\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @deprecated Use {@link spanStatusFromHttpCode} instead.\n * This export will be removed in v8 as the signature contains a typo.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport const spanStatusfromHttpCode = getSpanStatusFromHttpCode;\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n // TODO (v8): Remove these calls\n // Relay does not require us to send the status code as a tag\n // For now, just because users might expect it to land as a tag we keep sending it.\n // Same with data.\n // In v8, we replace both, simply with\n // span.setAttribute('http.response.status_code', httpStatus);\n\n // eslint-disable-next-line deprecation/deprecation\n span.setTag('http.status_code', String(httpStatus));\n // eslint-disable-next-line deprecation/deprecation\n span.setData('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n Instrumenter,\n Measurements,\n Primitive,\n Span as SpanInterface,\n SpanAttributeValue,\n SpanAttributes,\n SpanContext,\n SpanContextData,\n SpanJSON,\n SpanOrigin,\n SpanTimeInput,\n TraceContext,\n Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport {\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n} from '../semanticAttributes';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport {\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTraceContext,\n spanToTraceHeader,\n} from '../utils/spanUtils';\nimport type { SpanStatusType } from './spanstatus';\nimport { setHttpStatus } from './spanstatus';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n public spans: Span[];\n\n private readonly _maxlen: number;\n\n public constructor(maxlen: number = 1000) {\n this._maxlen = maxlen;\n this.spans = [];\n }\n\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n public add(span: Span): void {\n if (this.spans.length > this._maxlen) {\n // eslint-disable-next-line deprecation/deprecation\n span.spanRecorder = undefined;\n } else {\n this.spans.push(span);\n }\n }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n /**\n * Tags for the span.\n * @deprecated Use `spanToJSON(span).atttributes` instead.\n */\n public tags: { [key: string]: Primitive };\n\n /**\n * Data for the span.\n * @deprecated Use `spanToJSON(span).atttributes` instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: { [key: string]: any };\n\n /**\n * List of spans that were finalized\n *\n * @deprecated This property will no longer be public. Span recording will be handled internally.\n */\n public spanRecorder?: SpanRecorder;\n\n /**\n * @inheritDoc\n * @deprecated Use top level `Sentry.getRootSpan()` instead\n */\n public transaction?: Transaction;\n\n /**\n * The instrumenter that created this span.\n *\n * TODO (v8): This can probably be replaced by an `instanceOf` check of the span class.\n * the instrumenter can only be sentry or otel so we can check the span instance\n * to verify which one it is and remove this field entirely.\n *\n * @deprecated This field will be removed.\n */\n public instrumenter: Instrumenter;\n\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatusType | string | undefined;\n protected _exclusiveTime?: number;\n\n protected _measurements: Measurements;\n\n private _logMessage?: string;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SpanContext = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n // eslint-disable-next-line deprecation/deprecation\n this.tags = spanContext.tags ? { ...spanContext.tags } : {};\n // eslint-disable-next-line deprecation/deprecation\n this.data = spanContext.data ? { ...spanContext.data } : {};\n // eslint-disable-next-line deprecation/deprecation\n this.instrumenter = spanContext.instrumenter || 'sentry';\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanContext.origin || 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n // eslint-disable-next-line deprecation/deprecation\n this._name = spanContext.name || spanContext.description;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.status) {\n this._status = spanContext.status;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n if (spanContext.exclusiveTime !== undefined) {\n this._exclusiveTime = spanContext.exclusiveTime;\n }\n this._measurements = spanContext.measurements ? { ...spanContext.measurements } : {};\n }\n\n // This rule conflicts with another eslint rule :(\n /* eslint-disable @typescript-eslint/member-ordering */\n\n /**\n * An alias for `description` of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get name(): string {\n return this._name || '';\n }\n\n /**\n * Update the name of the span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public set name(name: string) {\n this.updateName(name);\n }\n\n /**\n * Get the description of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get description(): string | undefined {\n return this._name;\n }\n\n /**\n * Get the description of the Span.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public set description(description: string | undefined) {\n this._name = description;\n }\n\n /**\n * The ID of the trace.\n * @deprecated Use `spanContext().traceId` instead.\n */\n public get traceId(): string {\n return this._traceId;\n }\n\n /**\n * The ID of the trace.\n * @deprecated You cannot update the traceId of a span after span creation.\n */\n public set traceId(traceId: string) {\n this._traceId = traceId;\n }\n\n /**\n * The ID of the span.\n * @deprecated Use `spanContext().spanId` instead.\n */\n public get spanId(): string {\n return this._spanId;\n }\n\n /**\n * The ID of the span.\n * @deprecated You cannot update the spanId of a span after span creation.\n */\n public set spanId(spanId: string) {\n this._spanId = spanId;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `startSpan` functions instead.\n */\n public set parentSpanId(string) {\n this._parentSpanId = string;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `spanToJSON(span).parent_span_id` instead.\n */\n public get parentSpanId(): string | undefined {\n return this._parentSpanId;\n }\n\n /**\n * Was this span chosen to be sent as part of the sample?\n * @deprecated Use `isRecording()` instead.\n */\n public get sampled(): boolean | undefined {\n return this._sampled;\n }\n\n /**\n * Was this span chosen to be sent as part of the sample?\n * @deprecated You cannot update the sampling decision of a span after span creation.\n */\n public set sampled(sampled: boolean | undefined) {\n this._sampled = sampled;\n }\n\n /**\n * Attributes for the span.\n * @deprecated Use `spanToJSON(span).atttributes` instead.\n */\n public get attributes(): SpanAttributes {\n return this._attributes;\n }\n\n /**\n * Attributes for the span.\n * @deprecated Use `setAttributes()` instead.\n */\n public set attributes(attributes: SpanAttributes) {\n this._attributes = attributes;\n }\n\n /**\n * Timestamp in seconds (epoch time) indicating when the span started.\n * @deprecated Use `spanToJSON()` instead.\n */\n public get startTimestamp(): number {\n return this._startTime;\n }\n\n /**\n * Timestamp in seconds (epoch time) indicating when the span started.\n * @deprecated In v8, you will not be able to update the span start time after creation.\n */\n public set startTimestamp(startTime: number) {\n this._startTime = startTime;\n }\n\n /**\n * Timestamp in seconds when the span ended.\n * @deprecated Use `spanToJSON()` instead.\n */\n public get endTimestamp(): number | undefined {\n return this._endTime;\n }\n\n /**\n * Timestamp in seconds when the span ended.\n * @deprecated Set the end time via `span.end()` instead.\n */\n public set endTimestamp(endTime: number | undefined) {\n this._endTime = endTime;\n }\n\n /**\n * The status of the span.\n *\n * @deprecated Use `spanToJSON().status` instead to get the status.\n */\n public get status(): SpanStatusType | string | undefined {\n return this._status;\n }\n\n /**\n * The status of the span.\n *\n * @deprecated Use `.setStatus()` instead to set or update the status.\n */\n public set status(status: SpanStatusType | string | undefined) {\n this._status = status;\n }\n\n /**\n * Operation of the span\n *\n * @deprecated Use `spanToJSON().op` to read the op instead.\n */\n public get op(): string | undefined {\n return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined;\n }\n\n /**\n * Operation of the span\n *\n * @deprecated Use `startSpan()` functions to set or `span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'op')\n * to update the span instead.\n */\n public set op(op: string | undefined) {\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, op);\n }\n\n /**\n * The origin of the span, giving context about what created the span.\n *\n * @deprecated Use `spanToJSON().origin` to read the origin instead.\n */\n public get origin(): SpanOrigin | undefined {\n return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined;\n }\n\n /**\n * The origin of the span, giving context about what created the span.\n *\n * @deprecated Use `startSpan()` functions to set the origin instead.\n */\n public set origin(origin: SpanOrigin | undefined) {\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n }\n\n /* eslint-enable @typescript-eslint/member-ordering */\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * Also the `sampled` decision will be inherited.\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\n public startChild(\n spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n ): SpanInterface {\n const childSpan = new Span({\n ...spanContext,\n parentSpanId: this._spanId,\n sampled: this._sampled,\n traceId: this._traceId,\n });\n\n // eslint-disable-next-line deprecation/deprecation\n childSpan.spanRecorder = this.spanRecorder;\n // eslint-disable-next-line deprecation/deprecation\n if (childSpan.spanRecorder) {\n // eslint-disable-next-line deprecation/deprecation\n childSpan.spanRecorder.add(childSpan);\n }\n\n const rootSpan = getRootSpan(this);\n // TODO: still set span.transaction here until we have a more permanent solution\n // Probably similarly to the weakmap we hold in node-experimental\n // eslint-disable-next-line deprecation/deprecation\n childSpan.transaction = rootSpan as Transaction;\n\n if (DEBUG_BUILD && rootSpan) {\n const opStr = (spanContext && spanContext.op) || '< unknown op >';\n const nameStr = spanToJSON(childSpan).description || '< unknown name >';\n const idStr = rootSpan.spanContext().spanId;\n\n const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n logger.log(logMessage);\n this._logMessage = logMessage;\n }\n\n return childSpan;\n }\n\n /**\n * Sets the tag attribute on the current span.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key Tag key\n * @param value Tag value\n * @deprecated Use `setAttribute()` instead.\n */\n public setTag(key: string, value: Primitive): this {\n // eslint-disable-next-line deprecation/deprecation\n this.tags = { ...this.tags, [key]: value };\n return this;\n }\n\n /**\n * Sets the data attribute on the current span\n * @param key Data key\n * @param value Data value\n * @deprecated Use `setAttribute()` instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setData(key: string, value: any): this {\n // eslint-disable-next-line deprecation/deprecation\n this.data = { ...this.data, [key]: value };\n return this;\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): void {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatusType): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n * @deprecated Use top-level `setHttpStatus()` instead.\n */\n public setHttpStatus(httpStatus: number): this {\n setHttpStatus(this, httpStatus);\n return this;\n }\n\n /**\n * @inheritdoc\n *\n * @deprecated Use `.updateName()` instead.\n */\n public setName(name: string): void {\n this.updateName(name);\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n return this;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `spanToJSON(span).status === 'ok'` instead.\n */\n public isSuccess(): boolean {\n return this._status === 'ok';\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `.end()` instead.\n */\n public finish(endTimestamp?: number): void {\n return this.end(endTimestamp);\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n const rootSpan = getRootSpan(this);\n if (\n DEBUG_BUILD &&\n // Don't call this for transactions\n rootSpan &&\n rootSpan.spanContext().spanId !== this._spanId\n ) {\n const logMessage = this._logMessage;\n if (logMessage) {\n logger.log((logMessage as string).replace('Starting', 'Finishing'));\n }\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `spanToTraceHeader()` instead.\n */\n public toTraceparent(): string {\n return spanToTraceHeader(this);\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `spanToJSON()` or access the fields directly instead.\n */\n public toContext(): SpanContext {\n return dropUndefinedKeys({\n data: this._getData(),\n description: this._name,\n endTimestamp: this._endTime,\n // eslint-disable-next-line deprecation/deprecation\n op: this.op,\n parentSpanId: this._parentSpanId,\n sampled: this._sampled,\n spanId: this._spanId,\n startTimestamp: this._startTime,\n status: this._status,\n // eslint-disable-next-line deprecation/deprecation\n tags: this.tags,\n traceId: this._traceId,\n });\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Update the fields directly instead.\n */\n public updateWithContext(spanContext: SpanContext): this {\n // eslint-disable-next-line deprecation/deprecation\n this.data = spanContext.data || {};\n // eslint-disable-next-line deprecation/deprecation\n this._name = spanContext.name || spanContext.description;\n this._endTime = spanContext.endTimestamp;\n // eslint-disable-next-line deprecation/deprecation\n this.op = spanContext.op;\n this._parentSpanId = spanContext.parentSpanId;\n this._sampled = spanContext.sampled;\n this._spanId = spanContext.spanId || this._spanId;\n this._startTime = spanContext.startTimestamp || this._startTime;\n this._status = spanContext.status;\n // eslint-disable-next-line deprecation/deprecation\n this.tags = spanContext.tags || {};\n this._traceId = spanContext.traceId || this._traceId;\n\n return this;\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use `spanToTraceContext()` util function instead.\n */\n public getTraceContext(): TraceContext {\n return spanToTraceContext(this);\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return dropUndefinedKeys({\n data: this._getData(),\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined,\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: this._status,\n // eslint-disable-next-line deprecation/deprecation\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._exclusiveTime,\n measurements: Object.keys(this._measurements).length > 0 ? this._measurements : undefined,\n });\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * Convert the object to JSON.\n * @deprecated Use `spanToJSON(span)` instead.\n */\n public toJSON(): SpanJSON {\n return this.getSpanJSON();\n }\n\n /**\n * Get the merged data for this span.\n * For now, this combines `data` and `attributes` together,\n * until eventually we can ingest `attributes` directly.\n */\n private _getData():\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const { data, _attributes: attributes } = this;\n\n const hasData = Object.keys(data).length > 0;\n const hasAttributes = Object.keys(attributes).length > 0;\n\n if (!hasData && !hasAttributes) {\n return undefined;\n }\n\n if (hasData && hasAttributes) {\n return {\n ...data,\n ...attributes,\n };\n }\n\n return hasData ? data : attributes;\n }\n}\n","import type { Options } from '@sentry/types';\n\nimport { getClient } from '../exports';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(\n maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,\n): boolean {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n","import type { Scope, Span, SpanTimeInput, StartSpanOptions, TransactionContext } from '@sentry/types';\n\nimport { addNonEnumerableProperty, dropUndefinedKeys, logger, tracingContextFromHeaders } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '.';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getCurrentScope, withScope } from '../exports';\nimport type { Hub } from '../hub';\nimport { runWithAsyncContext } from '../hub';\nimport { getIsolationScope } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport type { Scope as ScopeClass } from '../scope';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n *\n * @deprecated Use `startSpan` instead.\n */\nexport function trace<T>(\n context: TransactionContext,\n callback: (span?: Span) => T,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onError: (error: unknown, span?: Span) => void = () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n afterFinish: () => void = () => {},\n): T {\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n const scope = getCurrentScope();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const spanContext = normalizeContext(context);\n const activeSpan = createChildSpanOrTransaction(hub, {\n parentSpan,\n spanContext,\n forceTransaction: false,\n scope,\n });\n\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n error => {\n activeSpan && activeSpan.setStatus('internal_error');\n onError(error, activeSpan);\n },\n () => {\n activeSpan && activeSpan.end();\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(parentSpan);\n afterFinish();\n },\n );\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: StartSpanOptions, callback: (span: Span | undefined) => T): T {\n const spanContext = normalizeContext(context);\n\n return runWithAsyncContext(() => {\n return withScope(context.scope, scope => {\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? undefined\n : createChildSpanOrTransaction(hub, {\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope,\n });\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet\n if (activeSpan) {\n const { status } = spanToJSON(activeSpan);\n if (!status || status === 'ok') {\n activeSpan.setStatus('internal_error');\n }\n }\n },\n () => activeSpan && activeSpan.end(),\n );\n });\n });\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n context: StartSpanOptions,\n callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n const spanContext = normalizeContext(context);\n\n return runWithAsyncContext(() => {\n return withScope(context.scope, scope => {\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const parentSpan = scope.getSpan();\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? undefined\n : createChildSpanOrTransaction(hub, {\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope,\n });\n\n function finishAndSetSpan(): void {\n activeSpan && activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n if (activeSpan && activeSpan.isRecording()) {\n const { status } = spanToJSON(activeSpan);\n if (!status || status === 'ok') {\n activeSpan.setStatus('internal_error');\n }\n }\n },\n );\n });\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: StartSpanOptions): Span | undefined {\n if (!hasTracingEnabled()) {\n return undefined;\n }\n\n const spanContext = normalizeContext(context);\n // eslint-disable-next-line deprecation/deprecation\n const hub = getCurrentHub();\n const parentSpan = context.scope\n ? // eslint-disable-next-line deprecation/deprecation\n context.scope.getSpan()\n : getActiveSpan();\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n\n if (shouldSkipSpan) {\n return undefined;\n }\n\n const scope = context.scope || getCurrentScope();\n\n // Even though we don't actually want to make this span active on the current scope,\n // we need to make it active on a temporary scope that we use for event processing\n // as otherwise, it won't pick the correct span for the event when processing it\n const temporaryScope = (scope as ScopeClass).clone();\n\n return createChildSpanOrTransaction(hub, {\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope: temporaryScope,\n });\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n // eslint-disable-next-line deprecation/deprecation\n return getCurrentScope().getSpan();\n}\n\ninterface ContinueTrace {\n /**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers,\n * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n *\n * @deprecated Use the version of this function taking a callback as second parameter instead:\n *\n * ```\n * Sentry.continueTrace(sentryTrace: '...', baggage: '...' }, () => {\n * // ...\n * })\n * ```\n *\n */\n ({\n sentryTrace,\n baggage,\n }: {\n // eslint-disable-next-line deprecation/deprecation\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n // eslint-disable-next-line deprecation/deprecation\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n }): Partial<TransactionContext>;\n\n /**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n *\n * Deprecation notice: In the next major version of the SDK the provided callback will not receive a transaction\n * context argument.\n */\n <V>(\n {\n sentryTrace,\n baggage,\n }: {\n // eslint-disable-next-line deprecation/deprecation\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n // eslint-disable-next-line deprecation/deprecation\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n },\n // TODO(v8): Remove parameter from this callback.\n callback: (transactionContext: Partial<TransactionContext>) => V,\n ): V;\n}\n\nexport const continueTrace: ContinueTrace = <V>(\n {\n sentryTrace,\n baggage,\n }: {\n // eslint-disable-next-line deprecation/deprecation\n sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n // eslint-disable-next-line deprecation/deprecation\n baggage: Parameters<typeof tracingContextFromHeaders>[1];\n },\n callback?: (transactionContext: Partial<TransactionContext>) => V,\n): V | Partial<TransactionContext> => {\n // TODO(v8): Change this function so it doesn't do anything besides setting the propagation context on the current scope:\n /*\n return withScope((scope) => {\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n scope.setPropagationContext(propagationContext);\n return callback();\n })\n */\n\n const currentScope = getCurrentScope();\n\n // eslint-disable-next-line deprecation/deprecation\n const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n sentryTrace,\n baggage,\n );\n\n currentScope.setPropagationContext(propagationContext);\n\n if (DEBUG_BUILD && traceparentData) {\n logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n }\n\n const transactionContext: Partial<TransactionContext> = {\n ...traceparentData,\n metadata: dropUndefinedKeys({\n dynamicSamplingContext,\n }),\n };\n\n if (!callback) {\n return transactionContext;\n }\n\n return runWithAsyncContext(() => {\n return callback(transactionContext);\n });\n};\n\nfunction createChildSpanOrTransaction(\n // eslint-disable-next-line deprecation/deprecation\n hub: Hub,\n {\n parentSpan,\n spanContext,\n forceTransaction,\n scope,\n }: {\n parentSpan: Span | undefined;\n spanContext: TransactionContext;\n forceTransaction?: boolean;\n scope: Scope;\n },\n): Span | undefined {\n if (!hasTracingEnabled()) {\n return undefined;\n }\n\n const isolationScope = getIsolationScope();\n\n let span: Span | undefined;\n if (parentSpan && !forceTransaction) {\n // eslint-disable-next-line deprecation/deprecation\n span = parentSpan.startChild(spanContext);\n } else if (parentSpan) {\n // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n const sampled = spanIsSampled(parentSpan);\n\n // eslint-disable-next-line deprecation/deprecation\n span = hub.startTransaction({\n traceId,\n parentSpanId,\n parentSampled: sampled,\n ...spanContext,\n metadata: {\n dynamicSamplingContext: dsc,\n // eslint-disable-next-line deprecation/deprecation\n ...spanContext.metadata,\n },\n });\n } else {\n const { traceId, dsc, parentSpanId, sampled } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n // eslint-disable-next-line deprecation/deprecation\n span = hub.startTransaction({\n traceId,\n parentSpanId,\n parentSampled: sampled,\n ...spanContext,\n metadata: {\n dynamicSamplingContext: dsc,\n // eslint-disable-next-line deprecation/deprecation\n ...spanContext.metadata,\n },\n });\n }\n\n // We always set this as active span on the scope\n // In the case of this being an inactive span, we ensure to pass a detached scope in here in the first place\n // But by having this here, we can ensure that the lookup through `getCapturedScopesOnSpan` results in the correct scope & span combo\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(span);\n\n setCapturedScopesOnSpan(span, scope, isolationScope);\n\n return span;\n}\n\n/**\n * This converts StartSpanOptions to TransactionContext.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): TransactionContext {\n if (context.startTime) {\n const ctx: TransactionContext & { startTime?: SpanTimeInput } = { ...context };\n ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return context;\n}\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: Scope;\n};\n\nfunction setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n return {\n scope: (span as SpanWithScopes)[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span as SpanWithScopes)[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n","import type {\n Context,\n Contexts,\n DynamicSamplingContext,\n MeasurementUnit,\n SpanTimeInput,\n Transaction as TransactionInterface,\n TransactionContext,\n TransactionEvent,\n TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { spanTimeInputToSeconds, spanToJSON, spanToTraceContext } from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\nimport { getCapturedScopesOnSpan } from './trace';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n /**\n * The reference to the current hub.\n */\n // eslint-disable-next-line deprecation/deprecation\n public _hub: Hub;\n\n protected _name: string;\n\n private _contexts: Contexts;\n\n private _trimEnd?: boolean | undefined;\n\n // DO NOT yet remove this property, it is used in a hack for v7 backwards compatibility.\n private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n private _metadata: Partial<TransactionMetadata>;\n\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n *\n * @deprecated Transactions will be removed in v8. Use spans instead.\n */\n // eslint-disable-next-line deprecation/deprecation\n public constructor(transactionContext: TransactionContext, hub?: Hub) {\n super(transactionContext);\n this._contexts = {};\n\n // eslint-disable-next-line deprecation/deprecation\n this._hub = hub || getCurrentHub();\n\n this._name = transactionContext.name || '';\n\n this._metadata = {\n // eslint-disable-next-line deprecation/deprecation\n ...transactionContext.metadata,\n };\n\n this._trimEnd = transactionContext.trimEnd;\n\n // this is because transactions are also spans, and spans have a transaction pointer\n // TODO (v8): Replace this with another way to set the root span\n // eslint-disable-next-line deprecation/deprecation\n this.transaction = this;\n\n // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n const incomingDynamicSamplingContext = this._metadata.dynamicSamplingContext;\n if (incomingDynamicSamplingContext) {\n // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n }\n }\n\n // This sadly conflicts with the getter/setter ordering :(\n /* eslint-disable @typescript-eslint/member-ordering */\n\n /**\n * Getter for `name` property.\n * @deprecated Use `spanToJSON(span).description` instead.\n */\n public get name(): string {\n return this._name;\n }\n\n /**\n * Setter for `name` property, which also sets `source` as custom.\n * @deprecated Use `updateName()` and `setMetadata()` instead.\n */\n public set name(newName: string) {\n // eslint-disable-next-line deprecation/deprecation\n this.setName(newName);\n }\n\n /**\n * Get the metadata for this transaction.\n * @deprecated Use `spanGetMetadata(transaction)` instead.\n */\n public get metadata(): TransactionMetadata {\n // We merge attributes in for backwards compatibility\n return {\n // Defaults\n // eslint-disable-next-line deprecation/deprecation\n source: 'custom',\n spanMetadata: {},\n\n // Legacy metadata\n ...this._metadata,\n\n // From attributes\n ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {\n source: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionMetadata['source'],\n }),\n ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {\n sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'],\n }),\n };\n }\n\n /**\n * Update the metadata for this transaction.\n * @deprecated Use `spanGetMetadata(transaction)` instead.\n */\n public set metadata(metadata: TransactionMetadata) {\n this._metadata = metadata;\n }\n\n /* eslint-enable @typescript-eslint/member-ordering */\n\n /**\n * Setter for `name` property, which also sets `source` on the metadata.\n *\n * @deprecated Use `.updateName()` and `.setAttribute()` instead.\n */\n public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n }\n\n /** @inheritdoc */\n public updateName(name: string): this {\n this._name = name;\n return this;\n }\n\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n public initSpanRecorder(maxlen: number = 1000): void {\n // eslint-disable-next-line deprecation/deprecation\n if (!this.spanRecorder) {\n // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder = new SpanRecorder(maxlen);\n }\n // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder.add(this);\n }\n\n /**\n * Set the context of a transaction event.\n * @deprecated Use either `.setAttribute()`, or set the context on the scope before creating the transaction.\n */\n public setContext(key: string, context: Context | null): void {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n }\n\n /**\n * @inheritDoc\n *\n * @deprecated Use top-level `setMeasurement()` instead.\n */\n public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n this._measurements[name] = { value, unit };\n }\n\n /**\n * Store metadata on this transaction.\n * @deprecated Use attributes or store data on the scope instead.\n */\n public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n this._metadata = { ...this._metadata, ...newMetadata };\n }\n\n /**\n * @inheritDoc\n */\n public end(endTimestamp?: SpanTimeInput): string | undefined {\n const timestampInS = spanTimeInputToSeconds(endTimestamp);\n const transaction = this._finishTransaction(timestampInS);\n if (!transaction) {\n return undefined;\n }\n // eslint-disable-next-line deprecation/deprecation\n return this._hub.captureEvent(transaction);\n }\n\n /**\n * @inheritDoc\n */\n public toContext(): TransactionContext {\n // eslint-disable-next-line deprecation/deprecation\n const spanContext = super.toContext();\n\n return dropUndefinedKeys({\n ...spanContext,\n name: this._name,\n trimEnd: this._trimEnd,\n });\n }\n\n /**\n * @inheritDoc\n */\n public updateWithContext(transactionContext: TransactionContext): this {\n // eslint-disable-next-line deprecation/deprecation\n super.updateWithContext(transactionContext);\n\n this._name = transactionContext.name || '';\n this._trimEnd = transactionContext.trimEnd;\n\n return this;\n }\n\n /**\n * @inheritdoc\n *\n * @experimental\n *\n * @deprecated Use top-level `getDynamicSamplingContextFromSpan` instead.\n */\n public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n return getDynamicSamplingContextFromSpan(this);\n }\n\n /**\n * Override the current hub with a new one.\n * Used if you want another hub to finish the transaction.\n *\n * @internal\n */\n // eslint-disable-next-line deprecation/deprecation\n public setHub(hub: Hub): void {\n this._hub = hub;\n }\n\n /**\n * Get the profile id of the transaction.\n */\n public getProfileId(): string | undefined {\n if (this._contexts !== undefined && this._contexts['profile'] !== undefined) {\n return this._contexts['profile'].profile_id as string;\n }\n return undefined;\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n // This transaction is already finished, so we should not flush it again.\n if (this._endTime !== undefined) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n // just sets the end timestamp\n super.end(endTimestamp);\n\n // eslint-disable-next-line deprecation/deprecation\n const client = this._hub.getClient();\n if (client && client.emit) {\n client.emit('finishTransaction', this);\n }\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const finishedSpans = this.spanRecorder\n ? // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder.spans.filter(span => span !== this && spanToJSON(span).timestamp)\n : [];\n\n if (this._trimEnd && finishedSpans.length > 0) {\n const endTimes = finishedSpans.map(span => spanToJSON(span).timestamp).filter(Boolean) as number[];\n this._endTime = endTimes.reduce((prev, current) => {\n return prev > current ? prev : current;\n });\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n // eslint-disable-next-line deprecation/deprecation\n const { metadata } = this;\n // eslint-disable-next-line deprecation/deprecation\n const { source } = metadata;\n\n const transaction: TransactionEvent = {\n contexts: {\n ...this._contexts,\n // We don't want to override trace context\n trace: spanToTraceContext(this),\n },\n // TODO: Pass spans serialized via `spanToJSON()` here instead in v8.\n spans: finishedSpans,\n start_timestamp: this._startTime,\n // eslint-disable-next-line deprecation/deprecation\n tags: this.tags,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n ...metadata,\n capturedSpanScope,\n capturedSpanIsolationScope,\n ...dropUndefinedKeys({\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n }),\n },\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log(\n '[Measurements] Adding measurements to transaction',\n JSON.stringify(this._measurements, undefined, 2),\n );\n transaction.measurements = this._measurements;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n DEBUG_BUILD && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`);\n\n return transaction;\n }\n}\n","/* eslint-disable max-lines */\nimport type { SpanTimeInput, TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n idleTimeout: 1000,\n finalTimeout: 30000,\n heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n 'heartbeatFailed',\n 'idleTimeout',\n 'documentHidden',\n 'finalTimeout',\n 'externalFinish',\n 'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n public constructor(\n private readonly _pushActivity: (id: string) => void,\n private readonly _popActivity: (id: string) => void,\n public transactionSpanId: string,\n maxlen?: number,\n ) {\n super(maxlen);\n }\n\n /**\n * @inheritDoc\n */\n public add(span: Span): void {\n // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n if (span.spanContext().spanId !== this.transactionSpanId) {\n // We patch span.end() to pop an activity after setting an endTimestamp.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalEnd = span.end;\n span.end = (...rest: unknown[]) => {\n this._popActivity(span.spanContext().spanId);\n return originalEnd.apply(span, rest);\n };\n\n // We should only push new activities if the span does not have an end timestamp.\n if (spanToJSON(span).timestamp === undefined) {\n this._pushActivity(span.spanContext().spanId);\n }\n }\n\n super.add(span);\n }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n // Activities store a list of active spans\n public activities: Record<string, boolean>;\n // Track state of activities in previous heartbeat\n private _prevHeartbeatString: string | undefined;\n\n // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n private _heartbeatCounter: number;\n\n // We should not use heartbeat if we finished a transaction\n private _finished: boolean;\n\n // Idle timeout was canceled and we should finish the transaction with the last span end.\n private _idleTimeoutCanceledPermanently: boolean;\n\n private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n /**\n * Timer that tracks Transaction idleTimeout\n */\n private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n private _autoFinishAllowed: boolean;\n\n /**\n * @deprecated Transactions will be removed in v8. Use spans instead.\n */\n public constructor(\n transactionContext: TransactionContext,\n // eslint-disable-next-line deprecation/deprecation\n private readonly _idleHub: Hub,\n /**\n * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n * there are no active spans on this transaction.\n */\n private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n /**\n * The final value in ms that a transaction cannot exceed\n */\n private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n private readonly _onScope: boolean = false,\n /**\n * When set to `true`, will disable the idle timeout (`_idleTimeout` option) and heartbeat mechanisms (`_heartbeatInterval`\n * option) until the `sendAutoFinishSignal()` method is called. The final timeout mechanism (`_finalTimeout` option)\n * will not be affected by this option, meaning the transaction will definitely be finished when the final timeout is\n * reached, no matter what this option is configured to.\n *\n * Defaults to `false`.\n */\n delayAutoFinishUntilSignal: boolean = false,\n ) {\n super(transactionContext, _idleHub);\n\n this.activities = {};\n this._heartbeatCounter = 0;\n this._finished = false;\n this._idleTimeoutCanceledPermanently = false;\n this._beforeFinishCallbacks = [];\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n this._autoFinishAllowed = !delayAutoFinishUntilSignal;\n\n if (_onScope) {\n // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n DEBUG_BUILD && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`);\n // eslint-disable-next-line deprecation/deprecation\n _idleHub.getScope().setSpan(this);\n }\n\n if (!delayAutoFinishUntilSignal) {\n this._restartIdleTimeout();\n }\n\n setTimeout(() => {\n if (!this._finished) {\n this.setStatus('deadline_exceeded');\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n this.end();\n }\n }, this._finalTimeout);\n }\n\n /** {@inheritDoc} */\n public end(endTimestamp?: SpanTimeInput): string | undefined {\n const endTimestampInS = spanTimeInputToSeconds(endTimestamp);\n\n this._finished = true;\n this.activities = {};\n\n // eslint-disable-next-line deprecation/deprecation\n if (this.op === 'ui.action.click') {\n this.setAttribute(FINISH_REASON_TAG, this._finishReason);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n if (this.spanRecorder) {\n DEBUG_BUILD &&\n // eslint-disable-next-line deprecation/deprecation\n logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestampInS * 1000).toISOString(), this.op);\n\n for (const callback of this._beforeFinishCallbacks) {\n callback(this, endTimestampInS);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanContext().spanId === this.spanContext().spanId) {\n return true;\n }\n\n // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n if (!spanToJSON(span).timestamp) {\n span.setStatus('cancelled');\n span.end(endTimestampInS);\n DEBUG_BUILD &&\n logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n\n const { start_timestamp: startTime, timestamp: endTime } = spanToJSON(span);\n const spanStartedBeforeTransactionFinish = startTime && startTime < endTimestampInS;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = endTime && startTime && endTime - startTime < timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(span, undefined, 2);\n if (!spanStartedBeforeTransactionFinish) {\n logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n }\n }\n\n return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n });\n\n DEBUG_BUILD && logger.log('[Tracing] flushing IdleTransaction');\n } else {\n DEBUG_BUILD && logger.log('[Tracing] No active IdleTransaction');\n }\n\n // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n if (this._onScope) {\n // eslint-disable-next-line deprecation/deprecation\n const scope = this._idleHub.getScope();\n // eslint-disable-next-line deprecation/deprecation\n if (scope.getTransaction() === this) {\n // eslint-disable-next-line deprecation/deprecation\n scope.setSpan(undefined);\n }\n }\n\n return super.end(endTimestamp);\n }\n\n /**\n * Register a callback function that gets executed before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n this._beforeFinishCallbacks.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public initSpanRecorder(maxlen?: number): void {\n // eslint-disable-next-line deprecation/deprecation\n if (!this.spanRecorder) {\n const pushActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._pushActivity(id);\n };\n const popActivity = (id: string): void => {\n if (this._finished) {\n return;\n }\n this._popActivity(id);\n };\n\n // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanContext().spanId, maxlen);\n\n // Start heartbeat so that transactions do not run forever.\n DEBUG_BUILD && logger.log('Starting heartbeat');\n this._pingHeartbeat();\n }\n // eslint-disable-next-line deprecation/deprecation\n this.spanRecorder.add(this);\n }\n\n /**\n * Cancels the existing idle timeout, if there is one.\n * @param restartOnChildSpanChange Default is `true`.\n * If set to false the transaction will end\n * with the last child span.\n */\n public cancelIdleTimeout(\n endTimestamp?: Parameters<IdleTransaction['end']>[0],\n {\n restartOnChildSpanChange,\n }: {\n restartOnChildSpanChange?: boolean;\n } = {\n restartOnChildSpanChange: true,\n },\n ): void {\n this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n if (this._idleTimeoutID) {\n clearTimeout(this._idleTimeoutID);\n this._idleTimeoutID = undefined;\n\n if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n this.end(endTimestamp);\n }\n }\n }\n\n /**\n * Temporary method used to externally set the transaction's `finishReason`\n *\n * ** WARNING**\n * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n *\n * @internal\n *\n */\n public setFinishReason(reason: string): void {\n this._finishReason = reason;\n }\n\n /**\n * Permits the IdleTransaction to automatically end itself via the idle timeout and heartbeat mechanisms when the `delayAutoFinishUntilSignal` option was set to `true`.\n */\n public sendAutoFinishSignal(): void {\n if (!this._autoFinishAllowed) {\n DEBUG_BUILD && logger.log('[Tracing] Received finish signal for idle transaction.');\n this._restartIdleTimeout();\n this._autoFinishAllowed = true;\n }\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['end']>[0]): void {\n this.cancelIdleTimeout();\n this._idleTimeoutID = setTimeout(() => {\n if (!this._finished && Object.keys(this.activities).length === 0) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n this.end(endTimestamp);\n }\n }, this._idleTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n private _pushActivity(spanId: string): void {\n this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n DEBUG_BUILD && logger.log(`[Tracing] pushActivity: ${spanId}`);\n this.activities[spanId] = true;\n DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n private _popActivity(spanId: string): void {\n if (this.activities[spanId]) {\n DEBUG_BUILD && logger.log(`[Tracing] popActivity ${spanId}`);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.activities[spanId];\n DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n if (Object.keys(this.activities).length === 0) {\n const endTimestamp = timestampInSeconds();\n if (this._idleTimeoutCanceledPermanently) {\n if (this._autoFinishAllowed) {\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n this.end(endTimestamp);\n }\n } else {\n // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampInSeconds is in seconds, timeout is in ms\n this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n }\n }\n }\n\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n private _beat(): void {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n\n const heartbeatString = Object.keys(this.activities).join('');\n\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter++;\n } else {\n this._heartbeatCounter = 1;\n }\n\n this._prevHeartbeatString = heartbeatString;\n\n if (this._heartbeatCounter >= 3) {\n if (this._autoFinishAllowed) {\n DEBUG_BUILD && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n this.setStatus('deadline_exceeded');\n this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n this.end();\n }\n } else {\n this._pingHeartbeat();\n }\n }\n\n /**\n * Pings the heartbeat\n */\n private _pingHeartbeat(): void {\n DEBUG_BUILD && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n setTimeout(() => {\n this._beat();\n }, this._heartbeatInterval);\n }\n}\n","import type { Transaction } from '@sentry/types';\nimport { extractTraceparentData as _extractTraceparentData } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const hub = maybeHub || getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const scope = hub.getScope();\n // eslint-disable-next-line deprecation/deprecation\n return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n *\n * @deprecated Import this function from `@sentry/utils` instead\n */\nexport const extractTraceparentData = _extractTraceparentData;\n","import {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SpanStatusType } from './spanstatus';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n const status: SpanStatusType = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n activeTransaction.setStatus(status);\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanToJSON } from '../utils/spanUtils';\nimport type { Transaction } from './transaction';\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<T extends Transaction>(\n transaction: T,\n options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n samplingContext: SamplingContext,\n): T {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n // eslint-disable-next-line deprecation/deprecation\n if (transaction.sampled !== undefined) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(transaction.sampled));\n return transaction;\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(sampleRate)) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!sampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = false;\n return transaction;\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n // eslint-disable-next-line deprecation/deprecation\n transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n // if we're not going to keep it, we're done\n // eslint-disable-next-line deprecation/deprecation\n if (!transaction.sampled) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return transaction;\n }\n\n DEBUG_BUILD &&\n // eslint-disable-next-line deprecation/deprecation\n logger.log(`[Tracing] starting ${transaction.op} transaction - ${spanToJSON(transaction).description}`);\n return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nexport function isValidSampleRate(rate: unknown): boolean {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n rate,\n )} of type ${JSON.stringify(typeof rate)}.`,\n );\n return false;\n }\n\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n return false;\n }\n return true;\n}\n","import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { spanToTraceHeader } from '../utils/spanUtils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\n// eslint-disable-next-line deprecation/deprecation\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n // eslint-disable-next-line deprecation/deprecation\n const scope = this.getScope();\n // eslint-disable-next-line deprecation/deprecation\n const span = scope.getSpan();\n\n return span\n ? {\n 'sentry-trace': spanToTraceHeader(span),\n }\n : {};\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n // eslint-disable-next-line deprecation/deprecation\n this: Hub,\n transactionContext: TransactionContext,\n customSamplingContext?: CustomSamplingContext,\n): Transaction {\n // eslint-disable-next-line deprecation/deprecation\n const client = this.getClient();\n const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n const configInstrumenter = options.instrumenter || 'sentry';\n const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n if (configInstrumenter !== transactionInstrumenter) {\n DEBUG_BUILD &&\n logger.error(\n `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n );\n\n // eslint-disable-next-line deprecation/deprecation\n transactionContext.sampled = false;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n let transaction = new Transaction(transactionContext, this);\n transaction = sampleTransaction(transaction, options, {\n name: transactionContext.name,\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n attributes: {\n // eslint-disable-next-line deprecation/deprecation\n ...transactionContext.data,\n ...transactionContext.attributes,\n },\n ...customSamplingContext,\n });\n if (transaction.isRecording()) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n if (client && client.emit) {\n client.emit('startTransaction', transaction);\n }\n return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n // eslint-disable-next-line deprecation/deprecation\n hub: Hub,\n transactionContext: TransactionContext,\n idleTimeout: number,\n finalTimeout: number,\n onScope?: boolean,\n customSamplingContext?: CustomSamplingContext,\n heartbeatInterval?: number,\n delayAutoFinishUntilSignal: boolean = false,\n): IdleTransaction {\n // eslint-disable-next-line deprecation/deprecation\n const client = hub.getClient();\n const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n // eslint-disable-next-line deprecation/deprecation\n let transaction = new IdleTransaction(\n transactionContext,\n hub,\n idleTimeout,\n finalTimeout,\n heartbeatInterval,\n onScope,\n delayAutoFinishUntilSignal,\n );\n transaction = sampleTransaction(transaction, options, {\n name: transactionContext.name,\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n attributes: {\n // eslint-disable-next-line deprecation/deprecation\n ...transactionContext.data,\n ...transactionContext.attributes,\n },\n ...customSamplingContext,\n });\n if (transaction.isRecording()) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n }\n if (client && client.emit) {\n client.emit('startTransaction', transaction);\n }\n return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n const carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n\n registerErrorInstrumentation();\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ &\n // document is not available in all browser environments (webworkers). We make it optional so you have to explicitly check for it\n Omit<Window, 'document'> &\n Partial<Pick<Window, 'document'>>;\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n callback: ReportCallback,\n metric: Metric,\n reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n let prevValue: number;\n let delta: number;\n return (forceReport?: boolean) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n callback(metric);\n }\n }\n }\n };\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n // eslint-disable-next-line deprecation/deprecation\n const timing = WINDOW.performance.timing;\n // eslint-disable-next-line deprecation/deprecation\n const type = WINDOW.performance.navigation.type;\n\n const navigationEntry: { [key: string]: number | string } = {\n entryType: 'navigation',\n startTime: 0,\n type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n };\n\n for (const key in timing) {\n if (key !== 'navigationStart' && key !== 'toJSON') {\n // eslint-disable-next-line deprecation/deprecation\n navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n }\n }\n return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n if (WINDOW.__WEB_VITALS_POLYFILL__) {\n return (\n WINDOW.performance &&\n ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n getNavigationEntryFromPerformanceTiming())\n );\n } else {\n return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n const navEntry = getNavigationEntry();\n let navigationType: Metric['navigationType'] = 'navigate';\n\n if (navEntry) {\n if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else {\n navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n }\n }\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good', // Will be updated if the value changes.\n delta: 0,\n entries: [],\n id: generateUniqueID(),\n navigationType,\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n event: PerformanceEventTiming[];\n paint: PerformancePaintTiming[];\n 'layout-shift': LayoutShift[];\n 'largest-contentful-paint': LargestContentfulPaint[];\n 'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n resource: PerformanceResourceTiming[];\n longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n type: K,\n callback: (entries: PerformanceEntryMap[K]) => void,\n opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n callback(list.getEntries() as PerformanceEntryMap[K]);\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) as PerformanceObserverInit,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n const onHiddenOrPageHide = (event: Event): void => {\n if (event.type === 'pagehide' || WINDOW.document!.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n\n if (WINDOW.document) {\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (\n onReport: ReportCallback,\n options: { reportAllChanges?: boolean } = {},\n): StopListening | undefined => {\n const metric = initMetric('CLS', 0);\n let report: ReturnType<typeof bindReporter>;\n\n let sessionValue = 0;\n let sessionEntries: PerformanceEntry[] = [];\n\n // const handleEntries = (entries: Metric['entries']) => {\n const handleEntries = (entries: LayoutShift[]): void => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n if (\n sessionValue &&\n sessionEntries.length !== 0 &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n if (report) {\n report();\n }\n }\n }\n });\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, options.reportAllChanges);\n\n const stopListening = (): void => {\n handleEntries(po.takeRecords() as CLSMetric['entries']);\n report(true);\n };\n\n onHidden(stopListening);\n\n return stopListening;\n }\n\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): void => {\n // If the document is hidden and not prerendering, assume it was always\n // hidden and the page was loaded in the background.\n if (WINDOW.document && WINDOW.document.visibilityState) {\n firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n }\n};\n\nconst trackChanges = (): void => {\n // Update the time if/when the document becomes hidden.\n onHidden(({ timeStamp }) => {\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n readonly firstHiddenTime: number;\n} => {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n initHiddenTime();\n trackChanges();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report: ReturnType<typeof bindReporter>;\n\n const handleEntry = (entry: PerformanceEventTiming): void => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries: FIDMetric['entries']): void => {\n (entries as PerformanceEventTiming[]).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n report = bindReporter(onReport, metric);\n\n if (po) {\n onHidden(() => {\n handleEntries(po.takeRecords() as FIDMetric['entries']);\n po.disconnect();\n }, true);\n }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric } from '../../types';\nimport { observe } from '../observe';\n\ndeclare global {\n interface Performance {\n interactionCount: number;\n }\n}\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries: Metric['entries']): void => {\n (entries as PerformanceEventTiming[]).forEach(e => {\n if (e.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n }\n });\n};\n\nlet po: PerformanceObserver | undefined;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = (): number => {\n return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = (): void => {\n if ('interactionCount' in performance || po) return;\n\n po = observe('event', updateEstimate, {\n type: 'event',\n buffered: true,\n durationThreshold: 0,\n } as PerformanceObserverInit);\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { getInteractionCount, initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { INPMetric } from './types/inp';\n\ninterface Interaction {\n id: number;\n latency: number;\n entries: PerformanceEventTiming[];\n}\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = (): number => {\n return getInteractionCount();\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList: Interaction[] = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap: { [interactionId: string]: Interaction } = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry: PerformanceEventTiming): void => {\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const existingInteraction = longestInteractionMap[entry.interactionId!];\n\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (\n existingInteraction ||\n longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n entry.duration > minLongestInteraction.latency\n ) {\n // If the interaction already exists, update it. Otherwise create one.\n if (existingInteraction) {\n existingInteraction.entries.push(entry);\n existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n } else {\n const interaction = {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: entry.interactionId!,\n latency: entry.duration,\n entries: [entry],\n };\n longestInteractionMap[interaction.id] = interaction;\n longestInteractionList.push(interaction);\n }\n\n // Sort the entries by latency (descending) and keep only the top ten.\n longestInteractionList.sort((a, b) => b.latency - a.latency);\n longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete longestInteractionMap[i.id];\n });\n }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = (): Interaction => {\n const candidateInteractionIndex = Math.min(\n longestInteractionList.length - 1,\n Math.floor(getInteractionCountForNavigation() / 50),\n );\n\n return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/responsiveness/) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/inp/#what-is-a-good-inp-score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport: ReportCallback, opts?: ReportOpts): void => {\n // Set defaults\n // eslint-disable-next-line no-param-reassign\n opts = opts || {};\n\n // https://web.dev/inp/#what's-a-%22good%22-inp-value\n // const thresholds = [200, 500];\n\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n\n const metric = initMetric('INP');\n // eslint-disable-next-line prefer-const\n let report: ReturnType<typeof bindReporter>;\n\n const handleEntries = (entries: INPMetric['entries']): void => {\n entries.forEach(entry => {\n if (entry.interactionId) {\n processEntry(entry);\n }\n\n // Entries of type `first-input` don't currently have an `interactionId`,\n // so to consider them in INP we have to first check that an existing\n // entry doesn't match the `duration` and `startTime`.\n // Note that this logic assumes that `event` entries are dispatched\n // before `first-input` entries. This is true in Chrome but it is not\n // true in Firefox; however, Firefox doesn't support interactionId, so\n // it's not an issue at the moment.\n // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n if (entry.entryType === 'first-input') {\n const noMatchingEntry = !longestInteractionList.some(interaction => {\n return interaction.entries.some(prevEntry => {\n return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n });\n });\n if (noMatchingEntry) {\n processEntry(entry);\n }\n }\n });\n\n const inp = estimateP98LongestInteraction();\n\n if (inp && inp.latency !== metric.value) {\n metric.value = inp.latency;\n metric.entries = inp.entries;\n report();\n }\n };\n\n const po = observe('event', handleEntries, {\n // Event Timing entries have their durations rounded to the nearest 8ms,\n // so a duration of 40ms would be any event that spans 2.5 or more frames\n // at 60Hz. This threshold is chosen to strike a balance between usefulness\n // and performance. Running this callback for any interaction that spans\n // just one or two frames is likely not worth the insight that could be\n // gained.\n durationThreshold: opts.durationThreshold || 40,\n } as PerformanceObserverInit);\n\n report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n if (po) {\n // Also observe entries of type `first-input`. This is useful in cases\n // where the first interaction is less than the `durationThreshold`.\n po.observe({ type: 'first-input', buffered: true });\n\n onHidden(() => {\n handleEntries(po.takeRecords() as INPMetric['entries']);\n\n // If the interaction count shows that there were interactions but\n // none were captured by the PerformanceObserver, report a latency of 0.\n if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n metric.value = 0;\n metric.entries = [];\n }\n\n report(true);\n });\n }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report: ReturnType<typeof bindReporter>;\n\n const handleEntries = (entries: LCPMetric['entries']): void => {\n const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n if (lastEntry) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered.\n const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n // Only report if the page wasn't hidden prior to LCP.\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries = [lastEntry];\n report();\n }\n }\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric);\n\n const stopListening = (): void => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() as LCPMetric['entries']);\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n };\n\n // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n if (WINDOW.document) {\n addEventListener(type, stopListening, { once: true, capture: true });\n }\n });\n\n onHidden(stopListening, true);\n\n return stopListening;\n }\n\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getNavigationEntry } from './lib/getNavigationEntry';\nimport { initMetric } from './lib/initMetric';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { TTFBMetric } from './types/ttfb';\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback: () => void): void => {\n if (!WINDOW.document) {\n return;\n }\n\n if (WINDOW.document.prerendering) {\n addEventListener('prerenderingchange', () => whenReady(callback), true);\n } else if (WINDOW.document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n } else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback, 0);\n }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/time-to-first-byte/) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport: ReportCallback, opts?: ReportOpts): void => {\n // Set defaults\n // eslint-disable-next-line no-param-reassign\n opts = opts || {};\n\n // https://web.dev/ttfb/#what-is-a-good-ttfb-score\n // const thresholds = [800, 1800];\n\n const metric = initMetric('TTFB');\n const report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n whenReady(() => {\n const navEntry = getNavigationEntry() as TTFBMetric['entries'][number];\n\n if (navEntry) {\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(navEntry.responseStart - getActivationStart(), 0);\n\n // In some cases the value reported is negative or is larger\n // than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n if (metric.value < 0 || metric.value > performance.now()) return;\n\n metric.entries = [navEntry];\n\n report(true);\n }\n });\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onINP } from './web-vitals/getINP';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\nimport { onTTFB } from './web-vitals/onTTFB';\n\ntype InstrumentHandlerTypePerformanceObserver =\n | 'longtask'\n | 'event'\n | 'navigation'\n | 'paint'\n | 'resource'\n | 'first-input';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid' | 'ttfb' | 'inp';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n readonly duration: number;\n readonly entryType: string;\n readonly name: string;\n readonly startTime: number;\n toJSON(): Record<string, unknown>;\n}\ninterface PerformanceEventTiming extends PerformanceEntry {\n processingStart: number;\n processingEnd: number;\n duration: number;\n cancelable?: boolean;\n target?: unknown | null;\n interactionId?: number;\n}\n\ninterface Metric {\n /**\n * The name of the metric (in acronym form).\n */\n name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n /**\n * The current value of the metric.\n */\n value: number;\n\n /**\n * The rating as to whether the metric value is within the \"good\",\n * \"needs improvement\", or \"poor\" thresholds of the metric.\n */\n rating: 'good' | 'needs-improvement' | 'poor';\n\n /**\n * The delta between the current value and the last-reported value.\n * On the first report, `delta` and `value` will always be the same.\n */\n delta: number;\n\n /**\n * A unique ID representing this particular metric instance. This ID can\n * be used by an analytics tool to dedupe multiple values sent for the same\n * metric instance, or to group multiple deltas together and calculate a\n * total. It can also be used to differentiate multiple different metric\n * instances sent from the same page, which can happen if the page is\n * restored from the back/forward cache (in that case new metrics object\n * get created).\n */\n id: string;\n\n /**\n * Any performance entries relevant to the metric value calculation.\n * The array may also be empty if the metric value was not based on any\n * entries (e.g. a CLS value of 0 given no layout shifts).\n */\n entries: PerformanceEntry[];\n\n /**\n * The type of navigation\n *\n * Navigation Timing API (or `undefined` if the browser doesn't\n * support that API). For pages that are restored from the bfcache, this\n * value will be 'back-forward-cache'.\n */\n navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\nlet _previousTtfb: Metric | undefined;\nlet _previousInp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n callback: (data: { metric: Metric }) => void,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n callback: (data: { metric: Metric }) => void,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nexport function addTtfbInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addInpInstrumentationHandler(\n callback: (data: { metric: Omit<Metric, 'entries'> & { entries: PerformanceEventTiming[] } }) => void,\n): CleanupHandlerCallback {\n return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\nexport function addPerformanceInstrumentationHandler(\n type: 'event' | 'first-input',\n callback: (data: { entries: ((PerformanceEntry & { target?: unknown | null }) | PerformanceEventTiming)[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls(): StopListening {\n return onCLS(\n metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n },\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentFid(): void {\n return onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp(): StopListening {\n return onLCP(metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n });\n}\n\nfunction instrumentTtfb(): StopListening {\n return onTTFB(metric => {\n triggerHandlers('ttfb', {\n metric,\n });\n _previousTtfb = metric;\n });\n}\n\nfunction instrumentInp(): void {\n return onINP(metric => {\n triggerHandlers('inp', {\n metric,\n });\n _previousInp = metric;\n });\n}\n\nfunction addMetricObserver(\n type: InstrumentHandlerTypeMetric,\n callback: InstrumentHandlerCallback,\n instrumentFn: () => StopListening,\n previousValue: Metric | undefined,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n let stopListening: StopListening | undefined;\n\n if (!instrumented[type]) {\n stopListening = instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n const options: PerformanceObserverInit = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n type: InstrumentHandlerType,\n callback: InstrumentHandlerCallback,\n stopListening: StopListening,\n): CleanupHandlerCallback {\n return () => {\n if (stopListening) {\n stopListening();\n }\n\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n","import type { DsnComponents, SpanEnvelope, SpanItem } from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from Span item.\n */\nexport function createSpanEnvelope(spans: Span[], dsn?: DsnComponents): SpanEnvelope {\n const headers: SpanEnvelope[0] = {\n sent_at: new Date().toISOString(),\n };\n\n if (dsn) {\n headers.dsn = dsnToString(dsn);\n }\n\n const items = spans.map(createSpanItem);\n return createEnvelope<SpanEnvelope>(headers, items);\n}\n\nfunction createSpanItem(span: Span): SpanItem {\n const spanHeaders: SpanItem[0] = {\n type: 'span',\n };\n return [spanHeaders, span];\n}\n","import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n *\n * Note: this will not be possible anymore in v8,\n * unless we do some special handling for browser here...\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n // eslint-disable-next-line deprecation/deprecation\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.startTimestamp = startTimestamp;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return transaction.startChild({\n startTimestamp,\n ...ctx,\n });\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport {\n Span,\n getActiveTransaction,\n getClient,\n hasTracingEnabled,\n isValidSampleRate,\n setMeasurement,\n} from '@sentry/core';\nimport type { ClientOptions, Measurements, SpanContext, TransactionContext } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils';\n\nimport { spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport {\n addClsInstrumentationHandler,\n addFidInstrumentationHandler,\n addInpInstrumentationHandler,\n addLcpInstrumentationHandler,\n addPerformanceInstrumentationHandler,\n addTtfbInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type {\n InteractionRouteNameMapping,\n NavigatorDeviceMemory,\n NavigatorNetworkInformation,\n} from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\nimport { createSpanEnvelope } from '@sentry/core';\nimport { getNavigationEntry } from '../web-vitals/lib/getNavigationEntry';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCallback = _trackFID();\n const clsCallback = _trackCLS();\n const lcpCallback = _trackLCP();\n const ttfbCallback = _trackTtfb();\n\n return (): void => {\n fidCallback();\n clsCallback();\n lcpCallback();\n ttfbCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() as IdleTransaction | undefined;\n if (!transaction) {\n return;\n }\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild({\n description: 'Main UI thread blocked',\n op: 'ui.long-task',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n });\n }\n });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() as IdleTransaction | undefined;\n if (!transaction) {\n return;\n }\n\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const span: SpanContext = {\n description: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n span.attributes = { 'ui.component_name': componentName };\n }\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild(span);\n }\n }\n });\n}\n\n/**\n * Start tracking INP webvital events.\n */\nexport function startTrackingINP(\n interactionIdtoRouteNameMapping: InteractionRouteNameMapping,\n interactionsSampleRate: number,\n): () => void {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n const inpCallback = _trackINP(interactionIdtoRouteNameMapping, interactionsSampleRate);\n\n return (): void => {\n inpCallback();\n };\n }\n\n return () => undefined;\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry as LayoutShift;\n }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry as LargestContentfulPaint;\n }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n const startTime = msToSec(entry.startTime);\n DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\nfunction _trackTtfb(): () => void {\n return addTtfbInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n });\n}\n\nconst INP_ENTRY_MAP: Record<string, 'click' | 'hover' | 'drag' | 'press'> = {\n click: 'click',\n pointerdown: 'click',\n pointerup: 'click',\n mousedown: 'click',\n mouseup: 'click',\n touchstart: 'click',\n touchend: 'click',\n mouseover: 'hover',\n mouseout: 'hover',\n mouseenter: 'hover',\n mouseleave: 'hover',\n pointerover: 'hover',\n pointerout: 'hover',\n pointerenter: 'hover',\n pointerleave: 'hover',\n dragstart: 'drag',\n dragend: 'drag',\n drag: 'drag',\n dragenter: 'drag',\n dragleave: 'drag',\n dragover: 'drag',\n drop: 'drag',\n keydown: 'press',\n keyup: 'press',\n keypress: 'press',\n input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(\n interactionIdToRouteNameMapping: InteractionRouteNameMapping,\n interactionsSampleRate: number,\n): () => void {\n return addInpInstrumentationHandler(({ metric }) => {\n if (metric.value === undefined) {\n return;\n }\n const entry = metric.entries.find(\n entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name] !== undefined,\n );\n const client = getClient();\n if (!entry || !client) {\n return;\n }\n const interactionType = INP_ENTRY_MAP[entry.name];\n const options = client.getOptions();\n /** Build the INP span, create an envelope from the span, and then send the envelope */\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(metric.value);\n const interaction =\n entry.interactionId !== undefined ? interactionIdToRouteNameMapping[entry.interactionId] : undefined;\n if (interaction === undefined) {\n return;\n }\n const { routeName, parentContext, activeTransaction, user, replayId } = interaction;\n const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n // eslint-disable-next-line deprecation/deprecation\n const profileId = activeTransaction !== undefined ? activeTransaction.getProfileId() : undefined;\n const span = new Span({\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n op: `ui.interaction.${interactionType}`,\n name: htmlTreeAsString(entry.target),\n attributes: {\n release: options.release,\n environment: options.environment,\n transaction: routeName,\n ...(userDisplay !== undefined && userDisplay !== '' ? { user: userDisplay } : {}),\n ...(profileId !== undefined ? { profile_id: profileId } : {}),\n ...(replayId !== undefined ? { replay_id: replayId } : {}),\n },\n exclusiveTime: metric.value,\n measurements: {\n inp: { value: metric.value, unit: 'millisecond' },\n },\n });\n\n /** Check to see if the span should be sampled */\n const sampleRate = getSampleRate(parentContext, options, interactionsSampleRate);\n\n if (!sampleRate) {\n return;\n }\n\n if (Math.random() < (sampleRate as number | boolean)) {\n const envelope = span ? createSpanEnvelope([span], client.getDsn()) : undefined;\n const transport = client && client.getTransport();\n if (transport && envelope) {\n transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending interaction:', reason);\n });\n }\n return;\n }\n });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n const { op, start_timestamp: transactionStartTime } = spanToJSON(transaction);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(entry.duration);\n\n // eslint-disable-next-line deprecation/deprecation\n if (transaction.op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(transaction, entry, timeOrigin);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n _addResourceSpans(transaction, entry, entry.name as string, startTime, duration, timeOrigin);\n break;\n }\n default:\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(transaction);\n\n // Measurements are only available for pageload transactions\n if (op === 'pageload') {\n _addTtfbRequestTimeToMeasurements(_measurements);\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n const oldValue = _measurements[name].value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n const delta = normalizedValue - oldValue;\n\n DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n _measurements[name].value = normalizedValue;\n });\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n op: 'ui.action',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: fidMark.value,\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in _measurements)) {\n delete _measurements.cls;\n }\n\n Object.keys(_measurements).forEach(measurementName => {\n setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\n });\n\n _tagMetricInfo(transaction);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n transaction: Transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record<string, any>,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): number {\n const measureStartTimestamp = timeOrigin + startTime;\n const measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name as string,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType as string,\n origin: 'auto.resource.browser.metrics',\n startTimestamp: measureStartTimestamp,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n transaction: Transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record<string, any>,\n event: string,\n timeOrigin: number,\n description?: string,\n eventEnd?: string,\n): void {\n const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n const start = entry[`${event}Start`] as number | undefined;\n if (!start || !end) {\n return;\n }\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: description || event,\n startTimestamp: timeOrigin + msToSec(start),\n endTimestamp: timeOrigin + msToSec(end),\n });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n if (entry.responseEnd) {\n // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n // these spans when the responseEnd value is available. The backend (Relay) would drop the entire transaction if it contained faulty spans.\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'request',\n startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'response',\n startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n });\n }\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n initiatorType?: string;\n transferSize?: number;\n encodedBodySize?: number;\n decodedBodySize?: number;\n renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n transaction: Transaction,\n entry: ResourceEntry,\n resourceUrl: string,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): void {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const parsedUrl = parseUrl(resourceUrl);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data: Record<string, any> = {};\n setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n if ('renderBlockingStatus' in entry) {\n data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n }\n if (parsedUrl.protocol) {\n data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n }\n\n if (parsedUrl.host) {\n data['server.address'] = parsedUrl.host;\n }\n\n data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceUrl.replace(WINDOW.location.origin, ''),\n endTimestamp,\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n origin: 'auto.resource.browser.metrics',\n startTimestamp,\n data,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n if (_lcpEntry) {\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n data: Record<string, unknown>,\n entry: ResourceEntry,\n key: keyof Pick<ResourceEntry, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n data[dataKey] = entryVal;\n }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements: Measurements): void {\n const navEntry = getNavigationEntry();\n if (!navEntry) {\n return;\n }\n\n const { responseStart, requestStart } = navEntry;\n\n if (requestStart <= responseStart) {\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n _measurements['ttfb.requestTime'] = {\n value: responseStart - requestStart,\n unit: 'millisecond',\n };\n }\n}\n\n/** Taken from @sentry/core sampling.ts */\nfunction getSampleRate(\n transactionContext: TransactionContext | undefined,\n options: ClientOptions,\n interactionsSampleRate: number,\n): number | boolean {\n if (!hasTracingEnabled(options)) {\n return false;\n }\n let sampleRate;\n if (transactionContext !== undefined && typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler({\n transactionContext,\n name: transactionContext.name,\n parentSampled: transactionContext.parentSampled,\n attributes: {\n // eslint-disable-next-line deprecation/deprecation\n ...transactionContext.data,\n ...transactionContext.attributes,\n },\n location: WINDOW.location,\n });\n } else if (transactionContext !== undefined && transactionContext.sampled !== undefined) {\n sampleRate = transactionContext.sampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n } else {\n sampleRate = 1;\n }\n if (!isValidSampleRate(sampleRate)) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.');\n return false;\n }\n if (sampleRate === true) {\n return interactionsSampleRate;\n } else if (sampleRate === false) {\n return 0;\n }\n return sampleRate * interactionsSampleRate;\n}\n","import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction();\n if (transaction) {\n // eslint-disable-next-line deprecation/deprecation\n transaction.setMeasurement(name, value, unit);\n }\n}\n","import {\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n getIsolationScope,\n hasTracingEnabled,\n setHttpStatus,\n spanToTraceHeader,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n isInstanceOf,\n parseUrl,\n} from '@sentry/utils';\n\ntype PolymorphicRequestHeaders =\n | Record<string, string | undefined>\n | Array<[string, string]>\n // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n append: (key: string, value: string) => void;\n get: (key: string) => string | null | undefined;\n };\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n handlerData: HandlerDataFetch,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record<string, Span>,\n spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n if (!hasTracingEnabled() || !handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n endSpan(span, handlerData);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const client = getClient();\n\n const { method, url } = handlerData.fetchData;\n\n const fullUrl = getFullURL(url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const span = shouldCreateSpanResult\n ? startInactiveSpan({\n name: `${method} ${url}`,\n onlyIfParent: true,\n attributes: {\n url,\n type: 'fetch',\n 'http.method': method,\n 'http.url': fullUrl,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n },\n op: 'http.client',\n })\n : undefined;\n\n if (span) {\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n }\n\n if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n const request: string | Request = handlerData.args[0];\n\n // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n handlerData.args[1] = handlerData.args[1] || {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options: { [key: string]: any } = handlerData.args[1];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n client: Client,\n scope: Scope,\n options: {\n headers?:\n | {\n [key: string]: string[] | string | undefined;\n }\n | PolymorphicRequestHeaders;\n },\n requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const span = requestSpan || scope.getSpan();\n\n const isolationScope = getIsolationScope();\n\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc ||\n (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n );\n\n const headers =\n options.headers ||\n (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : undefined);\n\n if (!headers) {\n return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n const newHeaders = new Headers(headers as Headers);\n\n newHeaders.append('sentry-trace', sentryTraceHeader);\n\n if (sentryBaggageHeader) {\n // If the same header is appended multiple times the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else if (Array.isArray(headers)) {\n const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n if (sentryBaggageHeader) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n const newBaggageHeaders: string[] = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders.push(...existingBaggageHeader);\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(existingBaggageHeader);\n }\n\n if (sentryBaggageHeader) {\n newBaggageHeaders.push(sentryBaggageHeader);\n }\n\n return {\n ...(headers as Exclude<typeof headers, Headers>),\n 'sentry-trace': sentryTraceHeader,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\nfunction getFullURL(url: string): string | undefined {\n try {\n const parsed = new URL(url);\n return parsed.href;\n } catch {\n return undefined;\n }\n}\n\nfunction endSpan(span: Span, handlerData: HandlerDataFetch): void {\n if (handlerData.response) {\n setHttpStatus(span, handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus('internal_error');\n }\n span.end();\n}\n","/* eslint-disable max-lines */\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n getIsolationScope,\n hasTracingEnabled,\n setHttpStatus,\n spanToJSON,\n spanToTraceHeader,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n SENTRY_XHR_DATA_KEY,\n addFetchInstrumentationHandler,\n addXhrInstrumentationHandler,\n browserPerformanceTimeOrigin,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n parseUrl,\n stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { instrumentFetchRequest } from '../common/fetch';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport { WINDOW } from './types';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n /**\n * @deprecated Will be removed in v8.\n * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n * trace header attachment.\n */\n tracingOrigins: Array<string | RegExp>;\n\n /**\n * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n * headers attached.\n *\n * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n * This option will be removed in v8.\n *\n * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n */\n tracePropagationTargets: Array<string | RegExp>;\n\n /**\n * Flag to disable patching all together for fetch requests.\n *\n * Default: true\n */\n traceFetch: boolean;\n\n /**\n * Flag to disable patching all together for xhr requests.\n *\n * Default: true\n */\n traceXHR: boolean;\n\n /**\n * If true, Sentry will capture http timings and add them to the corresponding http spans.\n *\n * Default: true\n */\n enableHTTPTimings: boolean;\n\n /**\n * This function will be called before creating a span for a request with the given url.\n * Return false if you don't want a span for the given url.\n *\n * Default: (url: string) => true\n */\n shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n // TODO (v8): Remove this property\n tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n const {\n traceFetch,\n traceXHR,\n // eslint-disable-next-line deprecation/deprecation\n tracePropagationTargets,\n // eslint-disable-next-line deprecation/deprecation\n tracingOrigins,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n // TODO(v8) Remove tracingOrigins here\n // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n // and we don't want to break the API. We can remove it in v8.\n const shouldAttachHeadersWithTargets = (url: string): boolean =>\n shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n const spans: Record<string, Span> = {};\n\n if (traceFetch) {\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n // We cannot use `window.location` in the generic fetch instrumentation,\n // but we need it for reliable `server.address` attribute.\n // so we extend this in here\n if (createdSpan) {\n const fullUrl = getFullURL(handlerData.fetchData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n createdSpan.setAttributes({\n 'http.url': fullUrl,\n 'server.address': host,\n });\n }\n\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/');\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1];\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData: [string, string | number][] = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n handlerData: HandlerDataXhr,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record<string, Span>,\n): Span | undefined {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n setHttpStatus(span, sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const isolationScope = getIsolationScope();\n\n const fullUrl = getFullURL(sentryXhrData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const span = shouldCreateSpanResult\n ? startInactiveSpan({\n name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n onlyIfParent: true,\n attributes: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n 'http.url': fullUrl,\n url: sentryXhrData.url,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n },\n op: 'http.client',\n })\n : undefined;\n\n if (span) {\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n }\n\n const client = getClient();\n\n if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc ||\n (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n );\n\n setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n }\n\n return span;\n}\n\nfunction setHeaderOnXhr(\n xhr: SentryWrappedXMLHttpRequest,\n sentryTraceHeader: string,\n sentryBaggageHeader: string | undefined,\n): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nfunction getFullURL(url: string): string | undefined {\n try {\n // By adding a base URL to new URL(), this will also work for relative urls\n // If `url` is a full URL, the base URL is ignored anyhow\n const parsed = new URL(url, WINDOW.location.origin);\n return parsed.href;\n } catch {\n return undefined;\n }\n}\n","/* eslint-disable max-lines */\nimport type { Hub, IdleTransaction } from '@sentry/core';\nimport { getClient, getCurrentScope } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n TRACING_DEFAULTS,\n addTracingExtensions,\n getActiveTransaction,\n startIdleTransaction,\n} from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, propagationContextFromHeaders } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport {\n addPerformanceEntries,\n startTrackingINP,\n startTrackingInteractions,\n startTrackingLongTasks,\n startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nimport { WINDOW } from './types';\nimport type { InteractionRouteNameMapping } from './web-vitals/types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n /**\n * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n * by a moment where there are no in-progress spans.\n *\n * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n * Time is in ms.\n *\n * Default: 1000\n */\n idleTimeout: number;\n\n /**\n * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n * will be finished.\n * Time is in ms.\n *\n * Default: 30000\n */\n finalTimeout: number;\n\n /**\n * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n * the transaction will be finished.\n * Time is in ms.\n *\n * Default: 5000\n */\n heartbeatInterval: number;\n\n /**\n * Flag to enable/disable creation of `navigation` transaction on history changes.\n *\n * Default: true\n */\n startTransactionOnLocationChange: boolean;\n\n /**\n * Flag to enable/disable creation of `pageload` transaction on first pageload.\n *\n * Default: true\n */\n startTransactionOnPageLoad: boolean;\n\n /**\n * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n * not suited towards doing precise measurements of operations. By default, we recommend that this option\n * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n *\n * Default: true\n */\n markBackgroundTransactions: boolean;\n\n /**\n * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n *\n * Default: true\n */\n enableLongTask: boolean;\n\n /**\n * If true, Sentry will capture INP web vitals as standalone spans .\n *\n * Default: false\n */\n enableInp: boolean;\n\n /**\n * Sample rate to determine interaction span sampling.\n * interactionsSampleRate is applied on top of the global tracesSampleRate.\n * ie a tracesSampleRate of 0.1 and interactionsSampleRate of 0.5 will result in a 0.05 sample rate for interactions.\n *\n * Default: 1\n */\n interactionsSampleRate: number;\n\n /**\n * _metricOptions allows the user to send options to change how metrics are collected.\n *\n * _metricOptions is currently experimental.\n *\n * Default: undefined\n */\n _metricOptions?: Partial<{\n /**\n * @deprecated This property no longer has any effect and will be removed in v8.\n */\n _reportAllChanges: boolean;\n }>;\n\n /**\n * _experiments allows the user to send options to define how this integration works.\n * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n *\n * TODO (v8): Remove enableLongTask\n *\n * Default: undefined\n */\n _experiments: Partial<{\n enableLongTask: boolean;\n enableInteractions: boolean;\n // eslint-disable-next-line deprecation/deprecation\n onStartRouteTransaction: (t: Transaction | undefined, ctx: TransactionContext, getCurrentHub: () => Hub) => void;\n }>;\n\n /**\n * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n *\n * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n *\n * @param context: The context data which will be passed to `startTransaction` by default\n *\n * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n */\n beforeNavigate?(this: void, context: TransactionContext): TransactionContext | undefined;\n\n /**\n * Instrumentation that creates routing change transactions. By default creates\n * pageload and navigation transactions.\n */\n routingInstrumentation<T extends Transaction>(\n this: void,\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad?: boolean,\n startTransactionOnLocationChange?: boolean,\n ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n ...TRACING_DEFAULTS,\n markBackgroundTransactions: true,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true,\n enableLongTask: true,\n enableInp: false,\n interactionsSampleRate: 1,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/** We store up to 10 interaction candidates max to cap memory usage. This is the same cap as getINP from web-vitals */\nconst MAX_INTERACTIONS = 10;\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n *\n * @deprecated Use `browserTracingIntegration()` instead.\n */\nexport class BrowserTracing implements Integration {\n // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n // integrations.\n\n /** Browser Tracing integration options */\n public options: BrowserTracingOptions;\n\n /**\n * @inheritDoc\n */\n public name: string;\n\n // eslint-disable-next-line deprecation/deprecation\n private _getCurrentHub?: () => Hub;\n\n private _collectWebVitals: () => void;\n\n private _hasSetTracePropagationTargets: boolean;\n private _interactionIdToRouteNameMapping: InteractionRouteNameMapping;\n private _latestRoute: {\n name: string | undefined;\n context: TransactionContext | undefined;\n };\n\n public constructor(_options?: Partial<BrowserTracingOptions>) {\n this.name = BROWSER_TRACING_INTEGRATION_ID;\n this._hasSetTracePropagationTargets = false;\n\n addTracingExtensions();\n\n if (DEBUG_BUILD) {\n this._hasSetTracePropagationTargets = !!(\n _options &&\n // eslint-disable-next-line deprecation/deprecation\n (_options.tracePropagationTargets || _options.tracingOrigins)\n );\n }\n\n this.options = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n // Special case: enableLongTask can be set in _experiments\n // TODO (v8): Remove this in v8\n if (this.options._experiments.enableLongTask !== undefined) {\n this.options.enableLongTask = this.options._experiments.enableLongTask;\n }\n\n // TODO (v8): remove this block after tracingOrigins is removed\n // Set tracePropagationTargets to tracingOrigins if specified by the user\n // In case both are specified, tracePropagationTargets takes precedence\n // eslint-disable-next-line deprecation/deprecation\n if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n // eslint-disable-next-line deprecation/deprecation\n this.options.tracePropagationTargets = _options.tracingOrigins;\n }\n\n this._collectWebVitals = startTrackingWebVitals();\n /** Stores a mapping of interactionIds from PerformanceEventTimings to the origin interaction path */\n this._interactionIdToRouteNameMapping = {};\n\n if (this.options.enableInp) {\n startTrackingINP(this._interactionIdToRouteNameMapping, this.options.interactionsSampleRate);\n }\n if (this.options.enableLongTask) {\n startTrackingLongTasks();\n }\n if (this.options._experiments.enableInteractions) {\n startTrackingInteractions();\n }\n\n this._latestRoute = {\n name: undefined,\n context: undefined,\n };\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n this._getCurrentHub = getCurrentHub;\n const hub = getCurrentHub();\n // eslint-disable-next-line deprecation/deprecation\n const client = hub.getClient();\n const clientOptions = client && client.getOptions();\n\n const {\n routingInstrumentation: instrumentRouting,\n startTransactionOnLocationChange,\n startTransactionOnPageLoad,\n markBackgroundTransactions,\n traceFetch,\n traceXHR,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n _experiments,\n } = this.options;\n\n const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n // There are three ways to configure tracePropagationTargets:\n // 1. via top level client option `tracePropagationTargets`\n // 2. via BrowserTracing option `tracePropagationTargets`\n // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n //\n // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n // This is done as it minimizes bundle size (we don't have to have undefined checks).\n //\n // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n // eslint-disable-next-line deprecation/deprecation\n const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n if (DEBUG_BUILD && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n logger.warn(\n '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n );\n }\n\n instrumentRouting(\n (context: TransactionContext) => {\n const transaction = this._createRouteTransaction(context);\n\n this.options._experiments.onStartRouteTransaction &&\n this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n return transaction;\n },\n startTransactionOnPageLoad,\n startTransactionOnLocationChange,\n );\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n if (_experiments.enableInteractions) {\n this._registerInteractionListener();\n }\n\n if (this.options.enableInp) {\n this._registerInpInteractionListener();\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n }\n\n /** Create routing idle transaction. */\n private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n if (!this._getCurrentHub) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n\n const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n const isPageloadTransaction = context.op === 'pageload';\n\n let expandedContext: TransactionContext;\n if (isPageloadTransaction) {\n const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n const baggage = isPageloadTransaction ? getMetaContent('baggage') : undefined;\n const { traceId, dsc, parentSpanId, sampled } = propagationContextFromHeaders(sentryTrace, baggage);\n expandedContext = {\n traceId,\n parentSpanId,\n parentSampled: sampled,\n ...context,\n metadata: {\n // eslint-disable-next-line deprecation/deprecation\n ...context.metadata,\n dynamicSamplingContext: dsc,\n },\n trimEnd: true,\n };\n } else {\n expandedContext = {\n trimEnd: true,\n ...context,\n };\n }\n\n const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n // If `beforeNavigate` set a custom name, record that fact\n // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata =\n finalContext.name !== expandedContext.name\n ? // eslint-disable-next-line deprecation/deprecation\n { ...finalContext.metadata, source: 'custom' }\n : // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata;\n\n this._latestRoute.name = finalContext.name;\n this._latestRoute.context = finalContext;\n\n // eslint-disable-next-line deprecation/deprecation\n if (finalContext.sampled === false) {\n DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n }\n\n DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n const { location } = WINDOW;\n\n const idleTransaction = startIdleTransaction(\n hub,\n finalContext,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n );\n\n if (isPageloadTransaction) {\n if (WINDOW.document) {\n WINDOW.document.addEventListener('readystatechange', () => {\n if (['interactive', 'complete'].includes(WINDOW.document!.readyState)) {\n idleTransaction.sendAutoFinishSignal();\n }\n });\n\n if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n idleTransaction.sendAutoFinishSignal();\n }\n }\n }\n\n idleTransaction.registerBeforeFinishCallback(transaction => {\n this._collectWebVitals();\n addPerformanceEntries(transaction);\n });\n\n return idleTransaction as Transaction;\n }\n\n /** Start listener for interaction transactions */\n private _registerInteractionListener(): void {\n let inflightInteractionTransaction: IdleTransaction | undefined;\n const registerInteractionTransaction = (): void => {\n const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n const op = 'ui.action.click';\n\n // eslint-disable-next-line deprecation/deprecation\n const currentTransaction = getActiveTransaction();\n if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n );\n return undefined;\n }\n\n if (inflightInteractionTransaction) {\n inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n inflightInteractionTransaction.end();\n inflightInteractionTransaction = undefined;\n }\n\n if (!this._getCurrentHub) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n if (!this._latestRoute.name) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n const { location } = WINDOW;\n\n const context: TransactionContext = {\n name: this._latestRoute.name,\n op,\n trimEnd: true,\n data: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context\n ? getSource(this._latestRoute.context)\n : undefined || 'url',\n },\n };\n\n inflightInteractionTransaction = startIdleTransaction(\n hub,\n context,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n );\n };\n\n ['click'].forEach(type => {\n if (WINDOW.document) {\n addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n }\n });\n }\n\n /** Creates a listener on interaction entries, and maps interactionIds to the origin path of the interaction */\n private _registerInpInteractionListener(): void {\n const handleEntries = ({ entries }: { entries: PerformanceEntry[] }): void => {\n const client = getClient();\n // We need to get the replay, user, and activeTransaction from the current scope\n // so that we can associate replay id, profile id, and a user display to the span\n const replay =\n client !== undefined && client.getIntegrationByName !== undefined\n ? (client.getIntegrationByName('Replay') as Integration & { getReplayId: () => string })\n : undefined;\n const replayId = replay !== undefined ? replay.getReplayId() : undefined;\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction();\n const currentScope = getCurrentScope();\n const user = currentScope !== undefined ? currentScope.getUser() : undefined;\n entries.forEach(entry => {\n if (isPerformanceEventTiming(entry)) {\n const interactionId = entry.interactionId;\n if (interactionId === undefined) {\n return;\n }\n const existingInteraction = this._interactionIdToRouteNameMapping[interactionId];\n const duration = entry.duration;\n const startTime = entry.startTime;\n const keys = Object.keys(this._interactionIdToRouteNameMapping);\n const minInteractionId =\n keys.length > 0\n ? keys.reduce((a, b) => {\n return this._interactionIdToRouteNameMapping[a].duration <\n this._interactionIdToRouteNameMapping[b].duration\n ? a\n : b;\n })\n : undefined;\n // For a first input event to be considered, we must check that an interaction event does not already exist with the same duration and start time.\n // This is also checked in the web-vitals library.\n if (entry.entryType === 'first-input') {\n const matchingEntry = keys\n .map(key => this._interactionIdToRouteNameMapping[key])\n .some(interaction => {\n return interaction.duration === duration && interaction.startTime === startTime;\n });\n if (matchingEntry) {\n return;\n }\n }\n // Interactions with an id of 0 and are not first-input are not valid.\n if (!interactionId) {\n return;\n }\n // If the interaction already exists, we want to use the duration of the longest entry, since that is what the INP metric uses.\n if (existingInteraction) {\n existingInteraction.duration = Math.max(existingInteraction.duration, duration);\n } else if (\n keys.length < MAX_INTERACTIONS ||\n minInteractionId === undefined ||\n duration > this._interactionIdToRouteNameMapping[minInteractionId].duration\n ) {\n // If the interaction does not exist, we want to add it to the mapping if there is space, or if the duration is longer than the shortest entry.\n const routeName = this._latestRoute.name;\n const parentContext = this._latestRoute.context;\n if (routeName && parentContext) {\n if (minInteractionId && Object.keys(this._interactionIdToRouteNameMapping).length >= MAX_INTERACTIONS) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._interactionIdToRouteNameMapping[minInteractionId];\n }\n this._interactionIdToRouteNameMapping[interactionId] = {\n routeName,\n duration,\n parentContext,\n user,\n activeTransaction,\n replayId,\n startTime,\n };\n }\n }\n }\n });\n };\n addPerformanceInstrumentationHandler('event', handleEntries);\n addPerformanceInstrumentationHandler('first-input', handleEntries);\n }\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\nfunction getSource(context: TransactionContext): TransactionSource | undefined {\n const sourceFromAttributes = context.attributes && context.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromMetadata = context.metadata && context.metadata.source;\n\n return sourceFromAttributes || sourceFromData || sourceFromMetadata;\n}\n\nfunction isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n return 'duration' in entry;\n}\n","import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addHistoryInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults<T extends Transaction>(\n customStartTransaction: (context: TransactionContext) => T | undefined,\n startTransactionOnPageLoad: boolean = true,\n startTransactionOnLocationChange: boolean = true,\n): void {\n if (!WINDOW || !WINDOW.location) {\n DEBUG_BUILD && logger.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n let startingUrl: string | undefined = WINDOW.location.href;\n\n let activeTransaction: T | undefined;\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n op: 'pageload',\n origin: 'auto.pageload.browser',\n metadata: { source: 'url' },\n });\n }\n\n if (startTransactionOnLocationChange) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n if (activeTransaction) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeTransaction.end();\n }\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n op: 'navigation',\n origin: 'auto.navigation.browser',\n metadata: { source: 'url' },\n });\n }\n });\n }\n}\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport function _optionalChain(ops: unknown[]): unknown {\n let lastAccessLHS: unknown = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i] as string;\n const fn = ops[i + 1] as (intermediateValue: unknown) => unknown;\n i += 2;\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n return;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n// let lastAccessLHS = undefined;\n// let value = ops[0];\n// let i = 1;\n// while (i < ops.length) {\n// const op = ops[i];\n// const fn = ops[i + 1];\n// i += 2;\n// if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n// return undefined;\n// }\n// if (op === 'access' || op === 'optionalAccess') {\n// lastAccessLHS = value;\n// value = fn(value);\n// } else if (op === 'call' || op === 'optionalCall') {\n// value = fn((...args) => value.call(lastAccessLHS, ...args));\n// lastAccessLHS = undefined;\n// }\n// }\n// return value;\n// }\n","import type { Client, DsnComponents, Hub } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n *\n * TODO(v8): Remove Hub fallback type\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {\n const client =\n hubOrClient && isHub(hubOrClient)\n ? // eslint-disable-next-line deprecation/deprecation\n hubOrClient.getClient()\n : hubOrClient;\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n\n return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n if (!tunnel) {\n return false;\n }\n\n return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {\n // eslint-disable-next-line deprecation/deprecation\n return (hubOrClient as Hub).getClient !== undefined;\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n // eslint-disable-next-line no-restricted-globals\n return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n );\n}\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nexport const REPLAY_SESSION_KEY = 'sentryReplaySession';\nexport const REPLAY_EVENT_NAME = 'replay_event';\nexport const RECORDING_EVENT_NAME = 'replay_recording';\nexport const UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nexport const SESSION_IDLE_PAUSE_DURATION = 300_000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nexport const SESSION_IDLE_EXPIRE_DURATION = 900_000; // 15 minutes in ms\n\n/** Default flush delays */\nexport const DEFAULT_FLUSH_MIN_DELAY = 5_000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nexport const DEFAULT_FLUSH_MAX_DELAY = 5_500;\n\n/* How long to wait for error checkouts */\nexport const BUFFER_CHECKOUT_TIME = 60_000;\n\nexport const RETRY_BASE_INTERVAL = 5000;\nexport const RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nexport const NETWORK_BODY_MAX_SIZE = 150_000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nexport const CONSOLE_ARG_MAX_SIZE = 5_000;\n\n/* Min. time to wait before we consider something a slow click. */\nexport const SLOW_CLICK_THRESHOLD = 3_000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nexport const SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nexport const REPLAY_MAX_EVENT_BUFFER_SIZE = 20_000_000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nexport const MIN_REPLAY_DURATION = 4_999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nexport const MIN_REPLAY_DURATION_LIMIT = 15_000;\n\n/** The max. length of a replay. */\nexport const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms;\n\n/** Default attributes to be ignored when `maskAllText` is enabled */\nexport const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder'];\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n?.host;\r\n return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n if (!n)\r\n return -1;\r\n const id = this.getMeta(n)?.id;\r\n return id ?? -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n if (tagName === 'OPTION') {\r\n tagName = 'SELECT';\r\n }\r\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n (type && maskInputOptions[type]) ||\r\n type === 'password' ||\r\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n let text = value || '';\r\n if (!isMasked) {\r\n return text;\r\n }\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n return el.getAttribute('value') || '';\r\n }\r\n return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n if (typeof maskAttributeFn === 'function') {\r\n return maskAttributeFn(name, value, element);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n try {\r\n if (unblockSelector && element.matches(unblockSelector)) {\r\n return false;\r\n }\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n for (let eIndex = el.classList.length; eIndex--;) {\r\n const className = el.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n if (!node)\r\n return -1;\r\n if (node.nodeType !== node.ELEMENT_NODE)\r\n return -1;\r\n if (distance > limit)\r\n return -1;\r\n if (matchPredicate(node))\r\n return distance;\r\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n return (node) => {\r\n const el = node;\r\n if (el === null)\r\n return false;\r\n try {\r\n if (className) {\r\n if (typeof className === 'string') {\r\n if (el.matches(`.${className}`))\r\n return true;\r\n }\r\n else if (elementClassMatchesRegex(el, className)) {\r\n return true;\r\n }\r\n }\r\n if (selector && el.matches(selector))\r\n return true;\r\n return false;\r\n }\r\n catch {\r\n return false;\r\n }\r\n };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (el.tagName === 'INPUT') {\r\n const autocomplete = el.getAttribute('autocomplete');\r\n const disallowedAutocompleteValues = [\r\n 'current-password',\r\n 'new-password',\r\n 'cc-number',\r\n 'cc-exp',\r\n 'cc-exp-month',\r\n 'cc-exp-year',\r\n 'cc-csc',\r\n ];\r\n if (disallowedAutocompleteValues.includes(autocomplete)) {\r\n return true;\r\n }\r\n }\r\n let maskDistance = -1;\r\n let unmaskDistance = -1;\r\n if (maskAllText) {\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n if (unmaskDistance < 0) {\r\n return true;\r\n }\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n }\r\n else {\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n if (maskDistance < 0) {\r\n return false;\r\n }\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n }\r\n return maskDistance >= 0\r\n ? unmaskDistance >= 0\r\n ? maskDistance <= unmaskDistance\r\n : true\r\n : unmaskDistance >= 0\r\n ? false\r\n : !!maskAllText;\r\n }\r\n catch (e) {\r\n }\r\n return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n inlineStylesheet,\r\n maskAttributeFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskTextFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if (n.parentNode.sheet?.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent, n.parentElement)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n textContent = maskInputFn\r\n ? maskInputFn(textContent, n.parentNode)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (parentTagName === 'OPTION' && textContent) {\r\n const isInputMasked = shouldMaskInput({\r\n type: null,\r\n tagName: parentTagName,\r\n maskInputOptions,\r\n });\r\n textContent = maskInputValue({\r\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n element: n,\r\n value: textContent,\r\n maskInputFn,\r\n });\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' ||\r\n tagName === 'textarea' ||\r\n tagName === 'select' ||\r\n tagName === 'option') {\r\n const el = n;\r\n const type = getInputType(el);\r\n const value = getInputValue(el, toUpperCase(tagName), type);\r\n const checked = el.checked;\r\n if (type !== 'submit' && type !== 'button' && value) {\r\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n type,\r\n tagName: toUpperCase(tagName),\r\n maskInputOptions,\r\n }));\r\n attributes.value = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value,\r\n maskInputFn,\r\n });\r\n }\r\n if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n let { preserveWhiteSpace = true } = options;\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n }\r\n : maskAllInputs === false\r\n ? {}\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n let currentStringChar = null;\r\n for (const char of input) {\r\n const hasStringEscape = currentSegment.endsWith('\\\\');\r\n if (currentStringChar) {\r\n if (currentStringChar === char && !hasStringEscape) {\r\n currentStringChar = null;\r\n }\r\n }\r\n else if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n else if ('\\'\"'.includes(char)) {\r\n currentStringChar = char;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n if (cssText.length >= 1000000) {\r\n return cssText;\r\n }\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n ast.stylesheet.rules.forEach((rule) => {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n const result = cssText.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n cache?.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n doc.defaultView?.customElements &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n const child = doc.createTextNode(value);\r\n for (const c of Array.from(node.childNodes)) {\r\n if (c.nodeType === node.TEXT_NODE) {\r\n node.removeChild(c);\r\n }\r\n }\r\n node.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.setProperty('width', value.toString());\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.setProperty('height', value.toString());\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if (n?.type !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute };\n","import { distanceToMatch, IGNORED_NODE, isShadowRoot, createMatchPredicate } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch {\r\n return () => {\r\n };\r\n }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n const doc = win.document;\r\n return {\r\n left: doc.scrollingElement\r\n ? doc.scrollingElement.scrollLeft\r\n : win.pageXOffset !== undefined\r\n ? win.pageXOffset\r\n : doc?.documentElement.scrollLeft ||\r\n doc?.body?.parentElement?.scrollLeft ||\r\n doc?.body?.scrollLeft ||\r\n 0,\r\n top: doc.scrollingElement\r\n ? doc.scrollingElement.scrollTop\r\n : win.pageYOffset !== undefined\r\n ? win.pageYOffset\r\n : doc?.documentElement.scrollTop ||\r\n doc?.body?.parentElement?.scrollTop ||\r\n doc?.body?.scrollTop ||\r\n 0,\r\n };\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction closestElementOfNode(node) {\r\n if (!node) {\r\n return null;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n return el;\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = closestElementOfNode(node);\r\n if (!el) {\r\n return false;\r\n }\r\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\r\n if (!checkAncestors) {\r\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\r\n return blockedPredicate(el) && !isUnblocked;\r\n }\r\n const blockDistance = distanceToMatch(el, blockedPredicate);\r\n let unblockDistance = -1;\r\n if (blockDistance < 0) {\r\n return false;\r\n }\r\n if (unblockSelector) {\r\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\r\n }\r\n if (blockDistance > -1 && unblockDistance < 0) {\r\n return true;\r\n }\r\n return blockDistance < unblockDistance;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n const frameElement = node.ownerDocument?.defaultView?.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n?.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n return this.styleIDMap.get(stylesheet) ?? -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\r\nfunction getShadowHost(n) {\r\n let shadowHost = null;\r\n if (n.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n let rootShadowHost = n;\r\n let shadowHost;\r\n while ((shadowHost = getShadowHost(rootShadowHost)))\r\n rootShadowHost = shadowHost;\r\n return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n const shadowHost = getRootShadowHost(n);\r\n return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n return doc.contains(n) || shadowHostInDom(n);\r\n}\r\nconst cachedImplementations = {};\r\nfunction getImplementation(name) {\r\n const cached = cachedImplementations[name];\r\n if (cached) {\r\n return cached;\r\n }\r\n const document = window.document;\r\n let impl = window[name];\r\n if (document && typeof document.createElement === 'function') {\r\n try {\r\n const sandbox = document.createElement('iframe');\r\n sandbox.hidden = true;\r\n document.head.appendChild(sandbox);\r\n const contentWindow = sandbox.contentWindow;\r\n if (contentWindow && contentWindow[name]) {\r\n impl =\r\n contentWindow[name];\r\n }\r\n document.head.removeChild(sandbox);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return (cachedImplementations[name] = impl.bind(window));\r\n}\r\nfunction onRequestAnimationFrame(...rest) {\r\n return getImplementation('requestAnimationFrame')(...rest);\r\n}\r\nfunction setTimeout(...rest) {\r\n return getImplementation('setTimeout')(...rest);\r\n}\r\nfunction clearTimeout(...rest) {\r\n return getImplementation('clearTimeout')(...rest);\r\n}\n\nexport { StyleSheetMirror, _mirror, clearTimeout, closestElementOfNode, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, onRequestAnimationFrame, patch, polyfill, queueToResolveTrees, setTimeout, shadowHostInDom, throttle, uniqueTextMutations };\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport function _nullishCoalesce(lhs: unknown, rhsFn: () => unknown): unknown {\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n// if (lhs != null) {\n// return lhs;\n// } else {\n// return rhsFn();\n// }\n// }\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, closestElementOfNode, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n this.tail = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = current?.next || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n if (node.next === null) {\r\n this.tail = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n else {\r\n this.tail = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n else {\r\n this.tail = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addedIds = new Set();\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n if (!n.parentNode || !inDom(n)) {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(getShadowHost(n))\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskAllText: this.maskAllText,\r\n unblockSelector: this.unblockSelector,\r\n maskTextClass: this.maskTextClass,\r\n unmaskTextClass: this.unmaskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n unmaskTextSelector: this.unmaskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskAttributeFn: this.maskAttributeFn,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n addedIds.add(sn.id);\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of this.movedSet) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of this.addedSet) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n let tailNode = addList.tail;\r\n while (tailNode) {\r\n const _node = tailNode;\r\n tailNode = tailNode.previous;\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => ({\r\n id: this.mirror.getId(text.node),\r\n value: text.value,\r\n }))\r\n .filter((text) => !addedIds.has(text.id))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => {\r\n const { attributes } = attribute;\r\n if (typeof attributes.style === 'string') {\r\n const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n if (diffAsStr.length < attributes.style.length) {\r\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n attributes.style.split('var(').length) {\r\n attributes.style = attribute.styleDiff;\r\n }\r\n }\r\n }\r\n return {\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attributes,\r\n };\r\n })\r\n .filter((attribute) => !addedIds.has(attribute.id))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value, closestElementOfNode(m.target))\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let attributeName = m.attributeName;\r\n let value = m.target.getAttribute(attributeName);\r\n if (attributeName === 'value') {\r\n const type = getInputType(target);\r\n const tagName = target.tagName;\r\n value = getInputValue(target, tagName, type);\r\n const isInputMasked = shouldMaskInput({\r\n maskInputOptions: this.maskInputOptions,\r\n tagName,\r\n type,\r\n });\r\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\r\n value = maskInputValue({\r\n isMasked: forceMask,\r\n element: target,\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributeMap.get(m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n this.attributeMap.set(m.target, item);\r\n }\r\n if (attributeName === 'type' &&\r\n target.tagName === 'INPUT' &&\r\n (m.oldValue || '').toLowerCase() === 'password') {\r\n target.setAttribute('data-rr-is-password', 'true');\r\n }\r\n if (!ignoreAttribute(target.tagName, attributeName)) {\r\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\r\n if (attributeName === 'style') {\r\n if (!this.unattachedDoc) {\r\n try {\r\n this.unattachedDoc =\r\n document.implementation.createHTMLDocument();\r\n }\r\n catch (e) {\r\n this.unattachedDoc = this.doc;\r\n }\r\n }\r\n const old = this.unattachedDoc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n item.styleDiff[pname] = newValue;\r\n }\r\n else {\r\n item.styleDiff[pname] = [newValue, newPriority];\r\n }\r\n }\r\n else {\r\n item._unchangedStyles[pname] = [newValue, newPriority];\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n item.styleDiff[pname] = false;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\r\n return;\r\n }\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.processedNodeManager.inOtherBuffer(n, this))\r\n return;\r\n if (this.addedSet.has(n) || this.movedSet.has(n))\r\n return;\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n if (hasShadowRoot(n)) {\r\n n.shadowRoot.childNodes.forEach((childN) => {\r\n this.processedNodeManager.add(childN, this);\r\n this.genAdds(childN, n);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'unblockSelector',\r\n 'maskAllText',\r\n 'maskTextClass',\r\n 'unmaskTextClass',\r\n 'maskTextSelector',\r\n 'unmaskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskAttributeFn',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n 'processedNodeManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n if (!errorHandler) {\r\n return cb;\r\n }\r\n const rrwebWrapped = ((...rest) => {\r\n try {\r\n return cb(...rest);\r\n }\r\n catch (error) {\r\n if (errorHandler && errorHandler(error) === true) {\r\n return () => {\r\n };\r\n }\r\n throw error;\r\n }\r\n });\r\n return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, toUpperCase, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, hookSetter, patch, setTimeout, legacy_isTouchEvent, nowTimestamp, getWindowHeight, getWindowWidth } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n }\r\n catch {\r\n }\r\n return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = window?.Zone?.__symbol__?.('MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\r\n if (options.onMutation && options.onMutation(mutations) === false) {\r\n return;\r\n }\r\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\r\n }));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle(callbackWrapper((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }), callbackThreshold);\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = nowTimestamp();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: nowTimestamp() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }), threshold, {\r\n trailing: false,\r\n }));\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n let currentPointerType = null;\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n let pointerType = null;\r\n let thisEventKey = eventKey;\r\n if ('pointerType' in event) {\r\n switch (event.pointerType) {\r\n case 'mouse':\r\n pointerType = PointerTypes.Mouse;\r\n break;\r\n case 'touch':\r\n pointerType = PointerTypes.Touch;\r\n break;\r\n case 'pen':\r\n pointerType = PointerTypes.Pen;\r\n break;\r\n }\r\n if (pointerType === PointerTypes.Touch) {\r\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n thisEventKey = 'TouchStart';\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n thisEventKey = 'TouchEnd';\r\n }\r\n }\r\n else if (pointerType === PointerTypes.Pen) ;\r\n }\r\n else if (legacy_isTouchEvent(event)) {\r\n pointerType = PointerTypes.Touch;\r\n }\r\n if (pointerType !== null) {\r\n currentPointerType = pointerType;\r\n if ((thisEventKey.startsWith('Touch') &&\r\n pointerType === PointerTypes.Touch) ||\r\n (thisEventKey.startsWith('Mouse') &&\r\n pointerType === PointerTypes.Mouse)) {\r\n pointerType = null;\r\n }\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n pointerType = currentPointerType;\r\n currentPointerType = null;\r\n }\r\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n callbackWrapper(mouseInteractionCb)({\r\n type: MouseInteractions[thisEventKey],\r\n id,\r\n x: clientX,\r\n y: clientY,\r\n ...(pointerType !== null && { pointerType }),\r\n });\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n let eventName = toLowerCase(eventKey);\r\n const handler = getHandler(eventKey);\r\n if (window.PointerEvent) {\r\n switch (MouseInteractions[eventKey]) {\r\n case MouseInteractions.MouseDown:\r\n case MouseInteractions.MouseUp:\r\n eventName = eventName.replace('mouse', 'pointer');\r\n break;\r\n case MouseInteractions.TouchStart:\r\n case MouseInteractions.TouchEnd:\r\n return;\r\n }\r\n }\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc && doc.defaultView) {\r\n const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n scrollCb({\r\n id,\r\n x: scrollLeftTop.left,\r\n y: scrollLeftTop.top,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }), sampling.scroll || 100));\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }), 200));\r\n return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n const tagName = target && toUpperCase(target.tagName);\r\n if (tagName === 'OPTION')\r\n target = target.parentElement;\r\n if (!target ||\r\n !tagName ||\r\n INPUT_TAGS.indexOf(tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const el = target;\r\n if (el.classList.contains(ignoreClass) ||\r\n (ignoreSelector && el.matches(ignoreSelector))) {\r\n return;\r\n }\r\n const type = getInputType(target);\r\n let text = getInputValue(el, tagName, type);\r\n let isChecked = false;\r\n const isInputMasked = shouldMaskInput({\r\n maskInputOptions,\r\n tagName,\r\n type,\r\n });\r\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n text = maskInputValue({\r\n isMasked: forceMask,\r\n element: target,\r\n value: text,\r\n maskInputFn,\r\n });\r\n cbWithDedup(target, userTriggeredOnInput\r\n ? { text, isChecked, userTriggered }\r\n : { text, isChecked });\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n const text = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value: getInputValue(el, tagName, type),\r\n maskInputFn,\r\n });\r\n cbWithDedup(el, userTriggeredOnInput\r\n ? { text, isChecked: !isChecked, userTriggered: false }\r\n : { text, isChecked: !isChecked });\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n callbackWrapper(inputCb)({\r\n ...v,\r\n id,\r\n });\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n callbackWrapper(eventHandler)({\r\n target: this,\r\n isTrusted: false,\r\n });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (hasNestedCSSRule('CSSMediaRule') &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (hasNestedCSSRule('CSSSupportsRule') &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (hasNestedCSSRule('CSSConditionRule') &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n return () => {\r\n };\r\n }\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(thisArg),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? host.defaultView?.Document\r\n : host.ownerDocument?.defaultView?.ShadowRoot;\r\n const originalPropertyDescriptor = patchTarget?.prototype\r\n ? Object.getOwnPropertyDescriptor(patchTarget?.prototype, 'adoptedStyleSheets')\r\n : undefined;\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n return originalPropertyDescriptor.get?.call(this);\r\n },\r\n set(sheets) {\r\n const result = originalPropertyDescriptor.set?.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return callbackWrapper(() => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [property, value, priority] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(thisArg, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [property] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(thisArg, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\r\n const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n });\r\n }), sampling.media || 500));\r\n const handlers = [\r\n on('play', handler(0), doc),\r\n on('pause', handler(1), doc),\r\n on('seeked', handler(2), doc),\r\n on('volumechange', handler(3), doc),\r\n on('ratechange', handler(4), doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(callbackWrapper(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }), 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\r\n let collapsed = true;\r\n const updateSelection = callbackWrapper(() => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && selection?.isCollapsed))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n });\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n const win = doc.defaultView;\r\n if (!win || !win.customElements)\r\n return () => { };\r\n const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n return function (name, constructor, options) {\r\n try {\r\n customElementCb({\r\n define: {\r\n name,\r\n },\r\n });\r\n }\r\n catch (e) {\r\n }\r\n return original.apply(this, [name, constructor, options]);\r\n };\r\n });\r\n return restoreHandler;\r\n}\r\nfunction initObservers(o, _hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n const mutationObserver = initMutationObserver(o, o.doc);\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o, {\r\n win: currentWindow,\r\n });\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n const fontObserver = o.collectFonts\r\n ? initFontObserver(o)\r\n : () => {\r\n };\r\n const selectionObserver = initSelectionObserver(o);\r\n const customElementObserver = initCustomElementObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return callbackWrapper(() => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n customElementObserver();\r\n pluginHandlers.forEach((h) => h());\r\n });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n return Boolean(typeof window[prop] !== 'undefined' &&\r\n window[prop].prototype &&\r\n 'insertRule' in window[prop].prototype &&\r\n 'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\n\nclass IframeManagerNoop {\r\n constructor() {\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n }\r\n addIframe() {\r\n }\r\n addLoadListener() {\r\n }\r\n attachIframe() {\r\n }\r\n}\r\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n this.loadListener?.(iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n const crossOriginMessageEvent = message;\r\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n return;\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n const rootId = e.data.node.id;\r\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n this.patchRootIdOnNode(e.data.node, rootId);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n rootId && this.patchRootIdOnNode(n.node, rootId);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n e.data.styles?.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n patchRootIdOnNode(node, rootId) {\r\n if (node.type !== NodeType.Document && !node.rootId)\r\n node.rootId = rootId;\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.patchRootIdOnNode(child, rootId);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager, IframeManagerNoop };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { setTimeout, patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManagerNoop {\r\n init() {\r\n }\r\n addShadowRoot() {\r\n }\r\n observeAttachShadow() {\r\n }\r\n reset() {\r\n }\r\n}\r\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restoreHandlers = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n this.init();\r\n }\r\n init() {\r\n this.reset();\r\n this.patchAttachShadow(Element, document);\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n const observer = initMutationObserver({\r\n ...this.bypassOptions,\r\n doc,\r\n mutationCb: this.mutationCb,\r\n mirror: this.mirror,\r\n shadowDomManager: this,\r\n }, shadowRoot);\r\n this.restoreHandlers.push(() => observer.disconnect());\r\n this.restoreHandlers.push(initScrollObserver({\r\n ...this.bypassOptions,\r\n scrollCb: this.scrollCb,\r\n doc: shadowRoot,\r\n mirror: this.mirror,\r\n }));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot));\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n return;\r\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n }\r\n patchAttachShadow(element, doc) {\r\n const manager = this;\r\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot && inDom(this))\r\n manager.addShadowRoot(this.shadowRoot, doc);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n reset() {\r\n this.restoreHandlers.forEach((handler) => {\r\n try {\r\n handler();\r\n }\r\n catch (e) {\r\n }\r\n });\r\n this.restoreHandlers = [];\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager, ShadowDomManagerNoop };\n","import { onRequestAnimationFrame, isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport { getImageBitmapDataUrlWorkerURL as t } from '../../../../../rrweb-worker/es/rrweb-worker/index.js';\nimport { callbackWrapper, registerErrorHandler } from '../../error-handler.js';\n\nclass CanvasManagerNoop {\r\n reset() {\r\n }\r\n freeze() {\r\n }\r\n unfreeze() {\r\n }\r\n lock() {\r\n }\r\n unlock() {\r\n }\r\n snapshot() {\r\n }\r\n}\r\nclass CanvasManager {\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, unblockSelector, maxCanvasSize, recordCanvas, dataURLOptions, errorHandler, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n this.options = options;\r\n if (errorHandler) {\r\n registerErrorHandler(errorHandler);\r\n }\r\n if (options.enableManualSnapshot) {\r\n return;\r\n }\r\n callbackWrapper(() => {\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, {\r\n dataURLOptions,\r\n });\r\n })();\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n const rafId = this.takeSnapshot(false, fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, options.dataURLOptions);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n snapshot(canvasElement) {\r\n const { options } = this;\r\n const rafId = this.takeSnapshot(true, options.sampling === 'all' ? 2 : options.sampling || 2, options.win, options.blockClass, options.blockSelector, options.unblockSelector, options.maxCanvasSize, options.dataURLOptions, canvasElement);\r\n this.resetObservers = () => {\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n takeSnapshot(isManualSnapshot, fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, dataURLOptions, canvasElement) {\r\n const snapshotInProgressMap = new Map();\r\n const worker = new Worker(t());\r\n worker.onmessage = (e) => {\r\n const data = e.data;\r\n const { id } = data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in data))\r\n return;\r\n const { base64, type, width, height } = data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n width,\r\n height,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = (canvasElement) => {\r\n if (canvasElement) {\r\n return [canvasElement];\r\n }\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas(canvasElement).forEach((canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n if (!canvas.width || !canvas.height)\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (!isManualSnapshot &&\r\n ['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\r\n context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n createImageBitmap(canvas)\r\n .then((bitmap) => {\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions,\r\n maxCanvasSize,\r\n }, [bitmap]);\r\n })\r\n .catch((error) => {\r\n callbackWrapper(() => {\r\n throw error;\r\n })();\r\n });\r\n });\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n return rafId;\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n onRequestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n onRequestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const { type, ...rest } = value;\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager, CanvasManagerNoop };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n styles.push({\r\n styleId,\r\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n rule: stringifyRule(r),\r\n index,\r\n })),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","import { onRequestAnimationFrame } from '../utils.js';\n\nclass ProcessedNodeManager {\r\n constructor() {\r\n this.nodeMap = new WeakMap();\r\n this.loop = true;\r\n this.periodicallyClear();\r\n }\r\n periodicallyClear() {\r\n onRequestAnimationFrame(() => {\r\n this.clear();\r\n if (this.loop)\r\n this.periodicallyClear();\r\n });\r\n }\r\n inOtherBuffer(node, thisBuffer) {\r\n const buffers = this.nodeMap.get(node);\r\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n }\r\n add(node, buffer) {\r\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n }\r\n clear() {\r\n this.nodeMap = new WeakMap();\r\n }\r\n destroy() {\r\n this.loop = false;\r\n }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, nowTimestamp, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { IframeManagerNoop, IframeManager } from './iframe-manager.js';\nimport { ShadowDomManagerNoop, ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManagerNoop } from './observers/canvas/canvas-manager.js';\nexport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nlet wrappedEmit;\r\nlet _wrappedEmit;\r\nlet _takeFullSnapshot;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n ? options.recordAfter\r\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\r\n registerErrorHandler(errorHandler);\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n if (window.parent.document) {\r\n passEmitsToParent = false;\r\n }\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n radio: true,\r\n checkbox: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : {};\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn &&\r\n !passEmitsToParent) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (r, isCheckout) => {\r\n const e = r;\r\n e.timestamp = nowTimestamp();\r\n if (mutationBuffers[0]?.isFrozen() &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit?.(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n origin: window.location.origin,\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n lastFullSnapshotEvent &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n _wrappedEmit = wrappedEmit;\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n ...m,\r\n },\r\n });\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Scroll,\r\n ...p,\r\n },\r\n });\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CanvasMutation,\r\n ...p,\r\n },\r\n });\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.AdoptedStyleSheet,\r\n ...a,\r\n },\r\n });\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\r\n ? new IframeManagerNoop()\r\n : new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n const processedNodeManager = new ProcessedNodeManager();\r\n const canvasManager = _getCanvasManager(getCanvasManager, {\r\n mirror,\r\n win: window,\r\n mutationCb: (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CanvasMutation,\r\n ...p,\r\n },\r\n }),\r\n recordCanvas,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maxCanvasSize,\r\n sampling: sampling['canvas'],\r\n dataURLOptions,\r\n errorHandler,\r\n });\r\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\r\n __RRWEB_EXCLUDE_SHADOW_DOM__\r\n ? new ShadowDomManagerNoop()\r\n : new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n onMutation,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n processedNodeManager,\r\n },\r\n mirror,\r\n });\r\n const takeFullSnapshot = (isCheckout = false) => {\r\n wrappedEmit({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }, isCheckout);\r\n stylesheetManager.reset();\r\n shadowDomManager.init();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskAttributeFn,\r\n maskInputFn,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: getWindowScroll(window),\r\n },\r\n });\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n _takeFullSnapshot = takeFullSnapshot;\r\n try {\r\n const handlers = [];\r\n const observe = (doc) => {\r\n return callbackWrapper(initObservers)({\r\n onMutation,\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n }),\r\n mouseInteractionCb: (d) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.MouseInteraction,\r\n ...d,\r\n },\r\n }),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.ViewportResize,\r\n ...d,\r\n },\r\n }),\r\n inputCb: (v) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Input,\r\n ...v,\r\n },\r\n }),\r\n mediaInteractionCb: (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.MediaInteraction,\r\n ...p,\r\n },\r\n }),\r\n styleSheetRuleCb: (r) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.StyleSheetRule,\r\n ...r,\r\n },\r\n }),\r\n styleDeclarationCb: (r) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.StyleDeclaration,\r\n ...r,\r\n },\r\n }),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Font,\r\n ...p,\r\n },\r\n }),\r\n selectionCb: (p) => {\r\n wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Selection,\r\n ...p,\r\n },\r\n });\r\n },\r\n customElementCb: (c) => {\r\n wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CustomElement,\r\n ...c,\r\n },\r\n });\r\n },\r\n blockClass,\r\n ignoreClass,\r\n ignoreSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskAttributeFn,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n unblockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n processedNodeManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: plugins\r\n ?.filter((p) => p.observer)\r\n ?.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n }),\r\n })) || [],\r\n }, {});\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n try {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n });\r\n if (recordAfter === 'DOMContentLoaded')\r\n init();\r\n }));\r\n handlers.push(on('load', () => {\r\n wrappedEmit({\r\n type: EventType.Load,\r\n data: {},\r\n });\r\n if (recordAfter === 'load')\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n processedNodeManager.destroy();\r\n _takeFullSnapshot = undefined;\r\n unregisterErrorHandler();\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nfunction addCustomEvent(tag, payload) {\r\n if (!_wrappedEmit) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n });\r\n}\r\nfunction freezePage() {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n}\r\nfunction takeFullSnapshot(isCheckout) {\r\n if (!_takeFullSnapshot) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n _takeFullSnapshot(isCheckout);\r\n}\r\nrecord.mirror = mirror;\r\nrecord.takeFullSnapshot = takeFullSnapshot;\r\nfunction _getCanvasManager(getCanvasManagerFn, options) {\r\n try {\r\n return getCanvasManagerFn\r\n ? getCanvasManagerFn(options)\r\n : new CanvasManagerNoop();\r\n }\r\n catch {\r\n console.warn('Unable to initialize CanvasManager');\r\n return new CanvasManagerNoop();\r\n }\r\n}\n\nexport { addCustomEvent, record as default, freezePage, mirror, takeFullSnapshot };\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n | typeof ReplayEventTypeDomContentLoaded\n | typeof ReplayEventTypeLoad\n | typeof ReplayEventTypeFullSnapshot\n | typeof ReplayEventTypeIncrementalSnapshot\n | typeof ReplayEventTypeMeta\n | typeof ReplayEventTypeCustom\n | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifcally need in the SDK.\n */\nexport type ReplayEventWithTime = {\n type: ReplayEventType;\n data: unknown;\n timestamp: number;\n delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically us in the SDK. Users can specify additional properties, hence we add the\n * Record<string, unknown> union type.\n */\nexport type RrwebRecordOptions = {\n maskAllText?: boolean;\n maskAllInputs?: boolean;\n blockClass?: ClassOption;\n ignoreClass?: string;\n maskTextClass?: ClassOption;\n maskTextSelector?: string;\n blockSelector?: string;\n maskInputOptions?: Record<string, boolean>;\n} & Record<string, unknown>;\n\nexport interface CanvasManagerInterface {\n reset(): void;\n freeze(): void;\n unfreeze(): void;\n lock(): void;\n unlock(): void;\n snapshot(): void;\n}\n\nexport interface CanvasManagerOptions {\n recordCanvas: boolean;\n enableManualSnapshot?: boolean;\n blockClass: string | RegExp;\n blockSelector: string | null;\n unblockSelector: string | null;\n sampling?: 'all' | number;\n dataURLOptions: Partial<{\n type: string;\n quality: number;\n }>;\n mutationCb: (p: any) => void;\n win: typeof globalThis & Window;\n mirror: any;\n}\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nexport function timestampToS(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1_000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nexport function getClosestInteractive(element: Element): Element {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nexport function getClickTargetNode(event: Event | MouseEvent | Node): Node | INode | null {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n if (isEventWithTarget(event)) {\n return event.target as Node | null;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/utils';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers as WindowOpenHandler[]).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n return function (...args: unknown[]): void {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n","import { IncrementalSource, MouseInteractions, record } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\n\nimport { WINDOW } from '../constants';\nimport type {\n RecordingEvent,\n ReplayClickDetector,\n ReplayContainer,\n ReplayMultiClickFrame,\n ReplaySlowClickFrame,\n SlowClickConfig,\n} from '../types';\nimport { ReplayEventTypeIncrementalSnapshot } from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClosestInteractive } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n timestamp: number;\n};\n\ninterface Click {\n timestamp: number;\n mutationAfter?: number;\n scrollAfter?: number;\n clickBreadcrumb: ClickBreadcrumb;\n clickCount: number;\n node: HTMLElement;\n}\n\ntype IncrementalRecordingEvent = RecordingEvent & {\n type: typeof ReplayEventTypeIncrementalSnapshot;\n data: { source: IncrementalSource };\n};\n\ntype IncrementalMouseInteractionRecordingEvent = IncrementalRecordingEvent & {\n type: typeof ReplayEventTypeIncrementalSnapshot;\n data: { type: MouseInteractions; id: number };\n};\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n // protected for testing\n protected _lastMutation: number;\n protected _lastScroll: number;\n\n private _clicks: Click[];\n private _teardown: undefined | (() => void);\n\n private _threshold: number;\n private _scollTimeout: number;\n private _timeout: number;\n private _ignoreSelector: string;\n\n private _replay: ReplayContainer;\n private _checkClickTimeout?: ReturnType<typeof setTimeout>;\n private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n public constructor(\n replay: ReplayContainer,\n slowClickConfig: SlowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n public addListeners(): void {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n public removeListeners(): void {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick: Click = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n public registerMutation(timestamp = Date.now()): void {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n public registerScroll(timestamp = Date.now()): void {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n public registerClick(element: HTMLElement): void {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node as HTMLElement);\n }\n\n /** Count multiple clicks on elements. */\n private _handleMultiClick(node: HTMLElement): void {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n private _getClicks(node: HTMLElement): Click[] {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n private _checkClicks(): void {\n const timedOutClicks: Click[] = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n private _generateBreadcrumbs(click: Click): void {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb: ReplaySlowClickFrame = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb: ReplayMultiClickFrame = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n private _scheduleCheckClicks(): void {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If <a> tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is ClickBreadcrumb {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds(): number {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nexport function updateClickDetectorForRecordingEvent(clickDetector: ReplayClickDetector, event: RecordingEvent): void {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (source === IncrementalSource.Mutation) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event: RecordingEvent): event is IncrementalRecordingEvent {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event: IncrementalRecordingEvent,\n): event is IncrementalMouseInteractionRecordingEvent {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n breadcrumb: Omit<ReplayBreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<ReplayBreadcrumbFrame, 'timestamp'>>,\n): ReplayBreadcrumbFrame {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n?.host;\r\n return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n if (!n)\r\n return -1;\r\n const id = this.getMeta(n)?.id;\r\n return id ?? -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n if (tagName === 'OPTION') {\r\n tagName = 'SELECT';\r\n }\r\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n (type && maskInputOptions[type]) ||\r\n type === 'password' ||\r\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n let text = value || '';\r\n if (!isMasked) {\r\n return text;\r\n }\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n return el.getAttribute('value') || '';\r\n }\r\n return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n if (typeof maskAttributeFn === 'function') {\r\n return maskAttributeFn(name, value, element);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n try {\r\n if (unblockSelector && element.matches(unblockSelector)) {\r\n return false;\r\n }\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n for (let eIndex = el.classList.length; eIndex--;) {\r\n const className = el.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (checkAncestors) {\r\n return (distanceToMatch(node, (node) => elementClassMatchesRegex(node, regex)) >= 0);\r\n }\r\n else if (node.nodeType === node.ELEMENT_NODE) {\r\n return elementClassMatchesRegex(node, regex);\r\n }\r\n return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n if (!node)\r\n return -1;\r\n if (node.nodeType !== node.ELEMENT_NODE)\r\n return -1;\r\n if (distance > limit)\r\n return -1;\r\n if (matchPredicate(node))\r\n return distance;\r\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n return (node) => {\r\n const el = node;\r\n if (el === null)\r\n return false;\r\n try {\r\n if (className) {\r\n if (typeof className === 'string') {\r\n if (el.matches(`.${className}`))\r\n return true;\r\n }\r\n else if (elementClassMatchesRegex(el, className)) {\r\n return true;\r\n }\r\n }\r\n if (selector && el.matches(selector))\r\n return true;\r\n return false;\r\n }\r\n catch {\r\n return false;\r\n }\r\n };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (el.tagName === 'INPUT') {\r\n const autocomplete = el.getAttribute('autocomplete');\r\n const disallowedAutocompleteValues = [\r\n 'current-password',\r\n 'new-password',\r\n 'cc-number',\r\n 'cc-exp',\r\n 'cc-exp-month',\r\n 'cc-exp-year',\r\n 'cc-csc',\r\n ];\r\n if (disallowedAutocompleteValues.includes(autocomplete)) {\r\n return true;\r\n }\r\n }\r\n let maskDistance = -1;\r\n let unmaskDistance = -1;\r\n if (maskAllText) {\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n if (unmaskDistance < 0) {\r\n return true;\r\n }\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n }\r\n else {\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n if (maskDistance < 0) {\r\n return false;\r\n }\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n }\r\n return maskDistance >= 0\r\n ? unmaskDistance >= 0\r\n ? maskDistance <= unmaskDistance\r\n : true\r\n : unmaskDistance >= 0\r\n ? false\r\n : !!maskAllText;\r\n }\r\n catch (e) {\r\n }\r\n return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n inlineStylesheet,\r\n maskAttributeFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskTextFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if (n.parentNode.sheet?.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent, n.parentElement)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n textContent = maskInputFn\r\n ? maskInputFn(textContent, n.parentNode)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (parentTagName === 'OPTION' && textContent) {\r\n const isInputMasked = shouldMaskInput({\r\n type: null,\r\n tagName: parentTagName,\r\n maskInputOptions,\r\n });\r\n textContent = maskInputValue({\r\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n element: n,\r\n value: textContent,\r\n maskInputFn,\r\n });\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' ||\r\n tagName === 'textarea' ||\r\n tagName === 'select' ||\r\n tagName === 'option') {\r\n const el = n;\r\n const type = getInputType(el);\r\n const value = getInputValue(el, toUpperCase(tagName), type);\r\n const checked = el.checked;\r\n if (type !== 'submit' && type !== 'button' && value) {\r\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n type,\r\n tagName: toUpperCase(tagName),\r\n maskInputOptions,\r\n }));\r\n attributes.value = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value,\r\n maskInputFn,\r\n });\r\n }\r\n if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n let { preserveWhiteSpace = true } = options;\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n }\r\n : maskAllInputs === false\r\n ? {}\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\nfunction visitSnapshot(node, onVisit) {\r\n function walk(current) {\r\n onVisit(current);\r\n if (current.type === NodeType.Document ||\r\n current.type === NodeType.Element) {\r\n current.childNodes.forEach(walk);\r\n }\r\n }\r\n walk(node);\r\n}\r\nfunction cleanupSnapshot() {\r\n _id = 1;\r\n}\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n let currentStringChar = null;\r\n for (const char of input) {\r\n const hasStringEscape = currentSegment.endsWith('\\\\');\r\n if (currentStringChar) {\r\n if (currentStringChar === char && !hasStringEscape) {\r\n currentStringChar = null;\r\n }\r\n }\r\n else if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n else if ('\\'\"'.includes(char)) {\r\n currentStringChar = char;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n if (cssText.length >= 1000000) {\r\n return cssText;\r\n }\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n ast.stylesheet.rules.forEach((rule) => {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n const result = cssText.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n cache?.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n doc.defaultView?.customElements &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n const child = doc.createTextNode(value);\r\n for (const c of Array.from(node.childNodes)) {\r\n if (c.nodeType === node.TEXT_NODE) {\r\n node.removeChild(c);\r\n }\r\n }\r\n node.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.setProperty('width', value.toString());\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.setProperty('height', value.toString());\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if (n?.type !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, cleanupSnapshot, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute, visitSnapshot };\n","// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n 'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nexport function getAttributesToRecord(attributes: Record<string, unknown>): Record<string, unknown> {\n const obj: Record<string, unknown> = {};\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport type { Breadcrumb, HandlerDataDom } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: HandlerDataDom) => void = (\n replay: ReplayContainer,\n) => {\n return (handlerData: HandlerDataDom): void => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick ? (handlerData.event as PointerEvent) : undefined;\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n event.target &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n getClickTargetNode(handlerData.event as Event) as HTMLElement,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text as string).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nexport function handleDom(handlerData: HandlerDataDom): Breadcrumb | null {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData: HandlerDataDom): { target: Node | null; message: string } {\n const isClick = handlerData.name === 'click';\n\n let message: string | undefined;\n let target: Node | null = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event as Event) : getTargetNode(handlerData.event as Event);\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n } catch (e) {\n message = '<unknown>';\n }\n\n return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n return node.type === NodeType.Element;\n}\n","import type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target as HTMLElement) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n const baseBreadcrumb = getBaseDomBreadcrumb(target as Node, message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target: HTMLElement): boolean {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type {\n AllPerformanceEntry,\n AllPerformanceEntryData,\n ExperimentalPerformanceResourceTiming,\n LargestContentfulPaintData,\n NavigationData,\n PaintData,\n ReplayPerformanceEntry,\n ResourceData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n string,\n (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry<AllPerformanceEntryData>\n> = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nexport function createPerformanceEntries(\n entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry<AllPerformanceEntryData>[] {\n return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry<AllPerformanceEntryData>[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry<AllPerformanceEntryData> | null {\n if (!ENTRY_TYPES[entry.entryType]) {\n return null;\n }\n\n return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry: PerformancePaintTiming): ReplayPerformanceEntry<PaintData> {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry: PerformanceNavigationTiming): ReplayPerformanceEntry<NavigationData> | null {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry<ResourceData> | null {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nexport function getLargestContentfulPaint(metric: {\n value: number;\n entries: PerformanceEntry[];\n}): ReplayPerformanceEntry<LargestContentfulPaintData> {\n const entries = metric.entries;\n const lastEntry = entries[entries.length - 1] as (PerformanceEntry & { element?: Element }) | undefined;\n const element = lastEntry ? lastEntry.element : undefined;\n\n const value = metric.value;\n\n const end = getAbsoluteTime(value);\n\n const data: ReplayPerformanceEntry<LargestContentfulPaintData> = {\n type: 'largest-contentful-paint',\n name: 'largest-contentful-paint',\n start: end,\n end,\n data: {\n value,\n size: value,\n nodeId: element ? record.mirror.getId(element) : undefined,\n },\n };\n\n return data;\n}\n","import { addLcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '@sentry-internal/tracing';\n\nimport type { ReplayContainer } from '../types';\nimport { getLargestContentfulPaint } from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n function addPerformanceEntry(entry: PerformanceEntry): void {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }: { entries: PerformanceEntry[] }): void {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks: (() => void)[] = [];\n\n (['navigation', 'paint', 'resource'] as const).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(({ metric }) => {\n replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n }),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n","export default `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<<t[a-1];var s=new r(i[30]);for(a=1;a<30;++a)for(var o=i[a];o<i[a+1];++o)s[o]=o-i[a]<<5|a;return{b:i,r:s}},o=s(e,2),f=o.b,h=o.r;f[28]=258,h[258]=28;for(var l=s(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a<i;++a)t[a]&&++s[t[a]-1];var o,f=new n(r);for(a=1;a<r;++a)f[a]=f[a-1]+s[a-1]<<1;if(e){o=new n(1<<r);var h=15-r;for(a=0;a<i;++a)if(t[a])for(var l=a<<4|t[a],c=r-t[a],v=f[t[a]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>h]=l}else for(o=new n(i),a=0;a<i;++a)t[a]&&(o[a]=u[f[t[a]-1]++]>>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;a<r.length;++a)r[a]&&i.push({s:a,f:r[a]});var s=i.length,o=i.slice();if(!s)return{t:F,l:0};if(1==s){var f=new t(i[0].s+1);return f[i[0].s]=1,{t:f,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var h=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:h.f+l.f,l:h,r:l};c!=s-1;)h=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:h.f+l.f,l:h,r:l};var d=o[0].s;for(a=1;a<s;++a)o[a].s>d&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<<y;for(o.sort((function(t,n){return g[n.s]-g[t.s]||t.f-n.f}));a<s;++a){var b=o[a].s;if(!(g[b]>e))break;p+=m-(1<<w-g[b]),g[b]=e}for(p>>=y;p>0;){var M=o[a].s;g[M]<e?p-=1<<e-g[M]++-1:++a}for(;a>=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<e;++a)t[i+a+4]=r[a];return 8*(i+4+e)},C=function(t,r,s,o,f,h,l,u,c,v,m){z(r,m++,s),++f[256];for(var b=_(f,15),M=b.t,E=b.l,x=_(h,15),C=x.t,U=x.l,F=D(M),I=F.c,S=F.n,L=D(C),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=_(q,7),H=G.t,J=G.l,K=19;K>4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(C,U,0),R=C;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[a[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B<u;++B){var rt=o[B];if(rt>255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s<o;++s)i+=e+=r[s];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<<o)-1,A=c.p||new n(32768),_=c.h||new n(z+1),x=Math.ceil(o/3),D=2*x,T=function(t){return(a[t]^a[t+1]<<x^a[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=_[H];if(A[J]=K,_[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$<Z&&a[j+$]==a[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-A[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=a[j],++I[a[j]];p=C(a,g,w,F,I,S,O,q,G,j-G,p),w||(c.r=7&p|g[p/8|0]<<3,p-=7,c.h=_,c.p=A,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+w;j+=65535){var st=j+65535;st>=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i<n.length;++i)e[i]=n.charCodeAt(i);return e}if(G)return G.encode(n);var a=n.length,s=new t(n.length+(n.length>>1)),o=0,f=function(t){s[o++]=t};for(i=0;i<a;++i){if(o+5>s.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r<e;r++)n+=t[r].length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n","import { addBreadcrumb } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nexport function logInfo(message: string, shouldAddBreadcrumb?: boolean): void {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n addLogBreadcrumb(message);\n }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nexport function logInfoNextTick(message: string, shouldAddBreadcrumb?: boolean): void {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => {\n addLogBreadcrumb(message);\n }, 0);\n }\n}\n\nfunction addLogBreadcrumb(message: string): void {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level: 'info',\n message,\n },\n { level: 'info' },\n );\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n public constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nexport class EventBufferArray implements EventBuffer {\n /** All the events that are buffered to be sent. */\n public events: RecordingEvent[];\n\n /** @inheritdoc */\n public hasCheckout: boolean;\n\n private _totalSize: number;\n\n public constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public get hasEvents(): boolean {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n public get type(): EventBufferType {\n return 'sync';\n }\n\n /** @inheritdoc */\n public destroy(): void {\n this.events = [];\n }\n\n /** @inheritdoc */\n public async addEvent(event: RecordingEvent): Promise<AddEventResult> {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n public finish(): Promise<string> {\n return new Promise<string>(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n public clear(): void {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public getEarliestTimestamp(): number | null {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n","import { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logInfo } from '../util/log';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n private _worker: Worker;\n private _id: number;\n private _ensureReadyPromise?: Promise<void>;\n\n public constructor(worker: Worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n public ensureReady(): Promise<void> {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }: MessageEvent) => {\n if ((data as WorkerResponse).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n public destroy(): void {\n logInfo('[Replay] Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n public postMessage<T>(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise<T> {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }: MessageEvent): void => {\n const response = data as WorkerResponse;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n DEBUG_BUILD && logger.error('[Replay]', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response as T);\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n private _getAndIncrementId(): number {\n return this._id++;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\nimport { logger } from '@sentry/utils';\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { WorkerHandler } from './WorkerHandler';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n /** @inheritdoc */\n public hasCheckout: boolean;\n\n private _worker: WorkerHandler;\n private _earliestTimestamp: number | null;\n private _totalSize;\n\n public constructor(worker: Worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public get hasEvents(): boolean {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n public get type(): EventBufferType {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n public ensureReady(): Promise<void> {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n public destroy(): void {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfuly received and processed by worker.\n */\n public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n public finish(): Promise<ReplayRecordingData> {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n public clear(): void {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n this._worker.postMessage('clear').then(null, e => {\n DEBUG_BUILD && logger.warn('[Replay] Sending \"clear\" message to worker failed', e);\n });\n }\n\n /** @inheritdoc */\n public getEarliestTimestamp(): number | null {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n private _sendEventToWorker(data: string): Promise<AddEventResult> {\n return this._worker.postMessage<void>('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n private async _finishRequest(): Promise<Uint8Array> {\n const response = await this._worker.postMessage<Uint8Array>('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nexport class EventBufferProxy implements EventBuffer {\n private _fallback: EventBufferArray;\n private _compression: EventBufferCompressionWorker;\n private _used: EventBuffer;\n private _ensureWorkerIsLoadedPromise: Promise<void>;\n\n public constructor(worker: Worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n public get type(): EventBufferType {\n return this._used.type;\n }\n\n /** @inheritDoc */\n public get hasEvents(): boolean {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n public get hasCheckout(): boolean {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n public set hasCheckout(value: boolean) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n public destroy(): void {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n public clear(): void {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n public getEarliestTimestamp(): number | null {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n public async finish(): Promise<ReplayRecordingData> {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n public ensureWorkerIsLoaded(): Promise<void> {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n private async _ensureWorkerIsLoaded(): Promise<void> {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n private async _switchToCompressionWorker(): Promise<void> {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises: Promise<void>[] = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n }\n }\n}\n","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport type { EventBuffer } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n useCompression: boolean;\n workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n logInfo('[Replay] Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl?: string): EventBufferProxy | void {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n logInfo('[Replay] Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl(): string {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return getWorkerURL();\n }\n\n return '';\n}\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch {\n return false;\n }\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch {\n // Ignore potential SecurityError exceptions\n }\n}\n","/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nexport function isSampled(sampleRate?: number): boolean {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n","import { uuid4 } from '@sentry/utils';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial<Session> & { sampled: Sampled }): Session {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch {\n // Ignore potential SecurityError exceptions\n }\n}\n","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { makeSession } from './Session';\nimport { saveSession } from './saveSession';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nexport function createSession(\n { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n","/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nexport function isExpired(\n initialTime: null | number,\n expiry: undefined | number,\n targetTime: number = +new Date(),\n): boolean {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n session: Session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n session: Session,\n { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n","import type { Session, SessionOptions } from '../types';\nimport { logInfoNextTick } from '../util/log';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n {\n traceInternals,\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }: {\n sessionIdleExpire: number;\n maxReplayDuration: number;\n traceInternals?: boolean;\n previousSessionId?: string;\n },\n sessionOptions: SessionOptions,\n): Session {\n const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n logInfoNextTick('[Replay] Creating new session', traceInternals);\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logInfoNextTick } from '../util/log';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(traceInternals?: boolean): Session | null {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) as Session;\n\n logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n return makeSession(sessionObj);\n } catch {\n return null;\n }\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getClient } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logInfo } from './log';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEvent(\n replay: ReplayContainer,\n event: RecordingEvent,\n isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay: ReplayContainer,\n event: RecordingEvent,\n isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n if (!replay.eventBuffer) {\n return null;\n }\n\n try {\n if (isCheckout && replay.recordingMode === 'buffer') {\n replay.eventBuffer.clear();\n }\n\n if (isCheckout) {\n replay.eventBuffer.hasCheckout = true;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n DEBUG_BUILD && logger.error(error);\n await replay.stop({ reason });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n logInfo(\n `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n replay.getOptions()._experiments.traceInternals,\n );\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event: RecordingEvent,\n callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n DEBUG_BUILD &&\n logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n return null;\n }\n\n return event;\n}\n","import type { ErrorEvent, Event, FeedbackEvent, ReplayEvent, TransactionEvent } from '@sentry/types';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nexport function isFeedbackEvent(event: Event): event is FeedbackEvent {\n return event.type === 'feedback';\n}\n","import { getClient } from '@sentry/core';\nimport type { ErrorEvent, Event, TransactionEvent, Transport, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse | void) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n // Custom transports may still be returning `Promise<void>`, which means we cannot expect the status code to be available there\n // TODO (v8): remove this check as it will no longer be necessary\n const enforceStatusCode = isBaseTransportSend();\n\n return (event: Event, sendResponse: TransportMakeRequestResponse | void) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay: ReplayContainer, event: TransactionEvent): void {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id as string);\n }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout(() => {\n // Capture current event buffer as new replay\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.sendBufferedReplayOrFlush();\n });\n}\n\nfunction isBaseTransportSend(): boolean {\n const client = getClient();\n if (!client) {\n return false;\n }\n\n const transport = client.getTransport();\n if (!transport) {\n return false;\n }\n\n return (\n (transport.send as Transport['send'] & { __sentry__baseTransport__?: true }).__sentry__baseTransport__ || false\n );\n}\n","import type { ErrorEvent, Event } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { isErrorEvent } from '../util/eventUtils';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\ntype BeforeSendEventCallback = (event: Event) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleBeforeSendEvent(replay: ReplayContainer): BeforeSendEventCallback {\n return (event: Event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay: ReplayContainer, event: ErrorEvent): void {\n const exceptionValue = event.exception && event.exception.values && event.exception.values[0].value;\n if (typeof exceptionValue !== 'string') {\n return;\n }\n\n if (\n // Only matches errors in production builds of react-dom\n // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n exceptionValue.match(/reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=(418|419|422|423|425)/) ||\n // Development builds of react-dom\n // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n ) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.hydrate-error',\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n","import type { Event, EventHint } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isFeedbackEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { handleAfterSendEvent } from './handleAfterSendEvent';\nimport { addFeedbackBreadcrumb } from './util/addFeedbackBreadcrumb';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(\n replay: ReplayContainer,\n includeAfterSendEventHandling = false,\n): (event: Event, hint: EventHint) => Event | null {\n const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n return Object.assign(\n (event: Event, hint: EventHint) => {\n // Do nothing if replay has been disabled\n if (!replay.isEnabled()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors, transactions, and feedbacks, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n return event;\n }\n\n if (isFeedbackEvent(event)) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n event.contexts.feedback.replay_id = replay.getSessionId();\n // Add a replay breadcrumb for this piece of feedback\n addFeedbackBreadcrumb(replay, event);\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n DEBUG_BUILD && logger.log('[Replay] Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n // In cases where a custom client is used that does not support the new hooks (yet),\n // we manually call this hook method here\n if (afterSendHandler) {\n // Pretend the error had a 200 response so we always capture it\n afterSendHandler(event, { statusCode: 200 });\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { FeedbackEvent } from '@sentry/types';\n\nimport type { ReplayBreadcrumbFrameEvent, ReplayContainer } from '../../types';\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nexport function addFeedbackBreadcrumb(replay: ReplayContainer, event: FeedbackEvent): void {\n replay.triggerUserActivity();\n replay.addUpdate(() => {\n if (!event.timestamp) {\n // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n // Return true here so that we don't flush\n return true;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: event.timestamp * 1000,\n data: {\n tag: 'breadcrumb',\n payload: {\n timestamp: event.timestamp,\n type: 'default',\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n } as ReplayBreadcrumbFrameEvent);\n\n return false;\n });\n}\n","import type { Event, EventHint } from '@sentry/types';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n","import type { Event } from '@sentry/types';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n replay: ReplayContainer,\n entries: ReplayPerformanceEntry<AllEntryData>[],\n): Promise<AddEventResult | null>[] {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n","import type { HandlerDataHistory } from '@sentry/types';\n\nimport type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\nfunction handleHistory(handlerData: HandlerDataHistory): ReplayPerformanceEntry<HistoryData> {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HandlerDataHistory) => void {\n return (handlerData: HandlerDataHistory) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n replay: ReplayContainer,\n result: ReplayPerformanceEntry<NetworkRequestData> | null,\n): void {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n","import { getClient, isSentryRequestUrl } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getClient());\n}\n","import type { HandlerDataXhr } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleXhr(handlerData: HandlerDataXhr): ReplayPerformanceEntry<NetworkRequestData> | null {\n const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url, status_code: statusCode } = sentryXhrData;\n\n if (url === undefined) {\n return null;\n }\n\n return {\n type: 'resource.xhr',\n name: url,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n data: {\n method,\n statusCode,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addXhrInstrumentationHandler(listener)`.\n */\nexport function handleXhrSpanListener(replay: ReplayContainer): (handlerData: HandlerDataXhr) => void {\n return (handlerData: HandlerDataXhr) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleXhr(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n","import type { TextEncoderInternal } from '@sentry/types';\nimport { dropUndefinedKeys, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n NetworkBody,\n NetworkMetaWarning,\n NetworkRequestData,\n ReplayNetworkRequestData,\n ReplayNetworkRequestOrResponse,\n ReplayPerformanceEntry,\n} from '../../types';\n\n/** Get the size of a body. */\nexport function getBodySize(\n body: RequestInit['body'],\n textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n if (!body) {\n return undefined;\n }\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nexport function getBodyString(body: unknown): [string | undefined, NetworkMetaWarning?] {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof URLSearchParams) {\n return [body.toString()];\n }\n\n if (body instanceof FormData) {\n return [_serializeFormData(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nexport function mergeWarning(\n info: ReplayNetworkRequestOrResponse | undefined,\n warning: NetworkMetaWarning,\n): ReplayNetworkRequestOrResponse {\n if (!info) {\n return {\n headers: {},\n size: undefined,\n _meta: {\n warnings: [warning],\n },\n };\n }\n\n const newMeta = { ...info._meta };\n const existingWarnings = newMeta.warnings || [];\n newMeta.warnings = [...existingWarnings, warning];\n\n info._meta = newMeta;\n return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nexport function makeNetworkReplayBreadcrumb(\n type: string,\n data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry<NetworkRequestData> | null {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result: ReplayPerformanceEntry<NetworkRequestData> = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nexport function buildNetworkRequestOrResponse(\n headers: Record<string, string>,\n bodySize: number | undefined,\n body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info: ReplayNetworkRequestOrResponse = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nexport function getAllowedHeaders(headers: Record<string, string>, allowedHeaders: string[]): Record<string, string> {\n return Object.keys(headers).reduce((filteredHeaders: Record<string, string>, key: string) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = headers[key];\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData: FormData): string {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body: string | undefined): {\n body: NetworkBody | undefined;\n warnings?: NetworkMetaWarning[];\n} {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n","import type { Breadcrumb, FetchBreadcrumbData, TextEncoderInternal } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n FetchHint,\n NetworkMetaWarning,\n ReplayContainer,\n ReplayNetworkOptions,\n ReplayNetworkRequestData,\n ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n buildNetworkRequestOrResponse,\n buildSkippedNetworkRequestOrResponse,\n getAllowedHeaders,\n getBodySize,\n getBodyString,\n makeNetworkReplayBreadcrumb,\n mergeWarning,\n parseContentLengthHeader,\n urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial<FetchHint>,\n options: ReplayNetworkOptions & {\n textEncoder: TextEncoderInternal;\n replay: ReplayContainer;\n },\n): Promise<void> {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichFetchBreadcrumb(\n breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial<FetchHint>,\n options: { textEncoder: TextEncoderInternal },\n): void {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body, options.textEncoder);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial<FetchHint>,\n options: ReplayNetworkOptions & {\n textEncoder: TextEncoderInternal;\n },\n): Promise<ReplayNetworkRequestData> {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders }: ReplayNetworkOptions,\n input: FetchHint['input'] | undefined,\n requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\n const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const [bodyStr, warning] = getBodyString(requestBody);\n const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n if (warning) {\n return mergeWarning(data, warning);\n }\n\n return data;\n}\n\n/** Exported only for tests. */\nexport async function _getResponseInfo(\n captureDetails: boolean,\n {\n networkCaptureBodies,\n textEncoder,\n networkResponseHeaders,\n }: Pick<ReplayNetworkOptions, 'networkCaptureBodies' | 'networkResponseHeaders'> & {\n textEncoder: TextEncoderInternal;\n },\n response: Response | undefined,\n responseBodySize?: number,\n): Promise<ReplayNetworkRequestOrResponse | undefined> {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n const [bodyText, warning] = await _parseFetchResponseBody(response);\n const result = getResponseData(bodyText, {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n });\n\n if (warning) {\n return mergeWarning(result, warning);\n }\n\n return result;\n}\n\nfunction getResponseData(\n bodyText: string | undefined,\n {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n }: {\n captureDetails: boolean;\n networkCaptureBodies: boolean;\n responseBodySize: number | undefined;\n headers: Record<string, string>;\n textEncoder: TextEncoderInternal;\n },\n): ReplayNetworkRequestOrResponse | undefined {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined\n ? getBodySize(bodyText, textEncoder)\n : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize response body', error);\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchResponseBody(response: Response): Promise<[string | undefined, NetworkMetaWarning?]> {\n const res = _tryCloneResponse(response);\n\n if (!res) {\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n try {\n const text = await _tryGetResponseText(res);\n return [text];\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to get text body from response', error);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs: unknown[] = []): RequestInit['body'] | undefined {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] as RequestInit).body;\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record<string, string> {\n const allHeaders: Record<string, string> = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) as string;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record<string, string> {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input: Request | RequestInit | undefined,\n allowedHeaders: string[],\n): Record<string, string> {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response: Response): Response | void {\n try {\n // We have to clone this, as the body can only be read once\n return response.clone();\n } catch (error) {\n // this can throw if the response was already consumed before\n DEBUG_BUILD && logger.warn('[Replay] Failed to clone response body', error);\n }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response: Response): Promise<string | undefined> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n _getResponseText(response)\n .then(\n txt => resolve(txt),\n reason => reject(reason),\n )\n .finally(() => clearTimeout(timeout));\n });\n\n return _getResponseText(response);\n}\n\nasync function _getResponseText(response: Response): Promise<string> {\n // Force this to be a promise, just to be safe\n // eslint-disable-next-line no-return-await\n return await response.text();\n}\n","import type { Breadcrumb, TextEncoderInternal, XhrBreadcrumbData } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n NetworkMetaWarning,\n ReplayContainer,\n ReplayNetworkOptions,\n ReplayNetworkRequestData,\n XhrHint,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n buildNetworkRequestOrResponse,\n buildSkippedNetworkRequestOrResponse,\n getAllowedHeaders,\n getBodySize,\n getBodyString,\n makeNetworkReplayBreadcrumb,\n mergeWarning,\n parseContentLengthHeader,\n urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial<XhrHint>,\n options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise<void> {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichXhrBreadcrumb(\n breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial<XhrHint>,\n options: { textEncoder: TextEncoderInternal },\n): void {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input, options.textEncoder);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType, options.textEncoder);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial<XhrHint>,\n options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request: requestWarning ? mergeWarning(request, requestWarning) : request,\n response: responseWarning ? mergeWarning(response, responseWarning) : response,\n };\n}\n\nfunction getResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n const [key, value] = line.split(': ');\n acc[key.toLowerCase()] = value;\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr: XMLHttpRequest): [string | undefined, NetworkMetaWarning?] {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors: unknown[] = [];\n\n try {\n return [xhr.responseText];\n } catch (e) {\n errors.push(e);\n }\n\n // Try to manually parse the response body, if responseText fails\n try {\n return _parseXhrResponse(xhr.response, xhr.responseType);\n } catch (e) {\n errors.push(e);\n }\n\n DEBUG_BUILD && logger.warn('[Replay] Failed to get xhr response body', ...errors);\n\n return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nexport function _parseXhrResponse(\n body: XMLHttpRequest['response'],\n responseType: XMLHttpRequest['responseType'],\n): [string | undefined, NetworkMetaWarning?] {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof Document) {\n return [body.body.outerHTML];\n }\n\n if (responseType === 'json' && body && typeof body === 'object') {\n return [JSON.stringify(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body: XMLHttpRequest['response'],\n responseType: XMLHttpRequest['responseType'],\n textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr, textEncoder);\n } catch {\n return undefined;\n }\n}\n","import { getClient } from '@sentry/core';\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n FetchBreadcrumbData,\n TextEncoderInternal,\n XhrBreadcrumbData,\n} from '@sentry/types';\nimport { addFetchInstrumentationHandler, addXhrInstrumentationHandler, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { handleFetchSpanListener } from './handleFetch';\nimport { handleXhrSpanListener } from './handleXhr';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n replay: ReplayContainer;\n textEncoder: TextEncoderInternal;\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\n const client = getClient();\n\n try {\n const textEncoder = new TextEncoder();\n\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options: ExtendedNetworkBreadcrumbsOptions = {\n replay,\n textEncoder,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client && client.on) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n } else {\n // Fallback behavior\n addFetchInstrumentationHandler(handleFetchSpanListener(replay));\n addXhrInstrumentationHandler(handleXhrSpanListener(replay));\n }\n } catch {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n options: ExtendedNetworkBreadcrumbsOptions,\n breadcrumb: Breadcrumb,\n hint?: BreadcrumbHint,\n): void {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n DEBUG_BUILD && logger.warn('Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n return hint && hint.response;\n}\n","import type { HandlerDataFetch } from '@sentry/types';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleFetch(handlerData: HandlerDataFetch): null | ReplayPerformanceEntry<NetworkRequestData> {\n const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n if (!endTimestamp) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url } = fetchData;\n\n return {\n type: 'resource.fetch',\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: {\n method,\n statusCode: response ? (response as Response).status : undefined,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nexport function handleFetchSpanListener(replay: ReplayContainer): (handlerData: HandlerDataFetch) => void {\n return (handlerData: HandlerDataFetch) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleFetch(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n","import type { Breadcrumb, Scope } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\nlet _LAST_BREADCRUMB: null | Breadcrumb = null;\n\ntype BreadcrumbWithCategory = Required<Pick<Breadcrumb, 'category'>>;\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n return !!breadcrumb.category;\n}\n\nexport const handleScopeListener: (replay: ReplayContainer) => (scope: Scope) => void =\n (replay: ReplayContainer) =>\n (scope: Scope): void => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleScope(scope);\n\n if (!result) {\n return;\n }\n\n addBreadcrumbEvent(replay, result);\n };\n\n/**\n * An event handler to handle scope changes.\n */\nexport function handleScope(scope: Scope): Breadcrumb | null {\n // TODO (v8): Remove this guard. This was put in place because we introduced\n // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n // For now, we'll just return null if the method doesn't exist but we should eventually\n // get rid of this guard.\n const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n // Listener can be called when breadcrumbs have not changed, so we store the\n // reference to the last crumb and only return a crumb if it has changed\n if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n return null;\n }\n\n _LAST_BREADCRUMB = newBreadcrumb;\n\n if (\n !isBreadcrumbWithCategory(newBreadcrumb) ||\n ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n newBreadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (newBreadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(newBreadcrumb);\n }\n\n return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nexport function normalizeConsoleBreadcrumb(\n breadcrumb: Omit<Breadcrumb, 'category'> & BreadcrumbWithCategory,\n): ReplayFrame {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n","import type { BaseClient } from '@sentry/core';\nimport { getCurrentScope } from '@sentry/core';\nimport { addEventProcessor, getClient } from '@sentry/core';\nimport type { Client, DynamicSamplingContext } from '@sentry/types';\nimport { addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry/utils';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleBeforeSendEvent } from '../coreHandlers/handleBeforeSendEvent';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport { handleScopeListener } from '../coreHandlers/handleScope';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(replay: ReplayContainer): void {\n // Listeners from core SDK //\n const scope = getCurrentScope();\n const client = getClient();\n\n scope.addScopeListener(handleScopeListener(replay));\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n if (client && client.addEventProcessor) {\n client.addEventProcessor(eventProcessor);\n } else {\n addEventProcessor(eventProcessor);\n }\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (hasHooks(client)) {\n client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc: DynamicSamplingContext) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('startTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We may be missing the initial startTransaction due to timing issues,\n // so we capture it on finish again.\n client.on('finishTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We want to flush replay\n client.on('beforeSendFeedback', (feedbackEvent, options) => {\n const replayId = replay.getSessionId();\n if (options && options.includeReplay && replay.isEnabled() && replayId) {\n // This should never reject\n if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client: Client | undefined): client is BaseClient<any> {\n return !!(client && client.on);\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry<MemoryData> & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise<Array<AddEventResult | null>> {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry: MemoryInfo): ReplayMemoryEntry {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { logger } from '@sentry/utils';\n\nimport { updateClickDetectorForRecordingEvent } from '../coreHandlers/handleClick';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logInfo } from './log';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n let hadFirstEvent = false;\n\n return (event: RecordingEvent, _isCheckout?: boolean) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.warn('[Replay] Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time.\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (replay.session && replay.session.previousSessionId) {\n return true;\n }\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n logInfo(\n `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n replay.getOptions()._experiments.traceInternals,\n );\n\n replay.session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(replay.session);\n }\n }\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n shouldRecordCanvas: replay.isRecordingCanvas(),\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay: ReplayContainer, isCheckout?: boolean): void {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n","import { getClient, getCurrentScope } from '@sentry/core';\nimport type { ReplayEvent, TransportMakeRequestResponse } from '@sentry/types';\nimport type { RateLimits } from '@sentry/utils';\nimport { isRateLimited, updateRateLimits } from '@sentry/utils';\n\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logInfo } from './log';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}: SendReplayData): Promise<void | TransportMakeRequestResponse> {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const client = getClient();\n const scope = getCurrentScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return;\n }\n\n const baseEvent: ReplayEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n logInfo('An event processor returned `null`, will not send event.');\n return;\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response: void | TransportMakeRequestResponse;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch {\n // nothing to do\n }\n throw error;\n }\n\n // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n if (!response) {\n return response;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nexport class TransportStatusCodeError extends Error {\n public constructor(statusCode: number) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nexport class RateLimitError extends Error {\n public rateLimits: RateLimits;\n\n public constructor(rateLimits: RateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n recordingData,\n headers,\n}: {\n recordingData: ReplayRecordingData;\n headers: Record<string, unknown>;\n}): ReplayRecordingData {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n","import type { IntegrationIndex, Scope } from '@sentry/core';\nimport { getIsolationScope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { Client, EventHint, ReplayEvent } from '@sentry/types';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}: {\n client: Client & { _integrations?: IntegrationIndex };\n scope: Scope;\n replayId: string;\n event: ReplayEvent;\n}): Promise<ReplayEvent | null> {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint: EventHint = { event_id, integrations };\n\n if (client.emit) {\n client.emit('preprocessEvent', event, eventHint);\n }\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) as ReplayEvent | null;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata && client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n","import type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/types';\nimport { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/utils';\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nexport function createReplayEnvelope(\n replayEvent: ReplayEvent,\n recordingData: ReplayRecordingData,\n dsn: DsnComponents,\n tunnel?: string,\n): ReplayEnvelope {\n return createEnvelope<ReplayEnvelope>(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n","import { captureException, setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SendReplayData } from '../types';\nimport { RateLimitError, TransportStatusCodeError, sendReplayRequest } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n replayData: SendReplayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n): Promise<unknown> {\n const { recordingData, options } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n captureException(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n","export const THROTTLED = '__THROTTLED';\nexport const SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle<T extends (...rest: any[]) => any>(\n fn: T,\n maxCount: number,\n durationSeconds: number,\n): (...rest: Parameters<T>) => ReturnType<T> | typeof THROTTLED | typeof SKIPPED {\n const counter = new Map<number, number>();\n\n const _cleanup = (now: number): void => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = (): number => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest: Parameters<T>): ReturnType<T> | typeof THROTTLED | typeof SKIPPED => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n captureException,\n getClient,\n getCurrentScope,\n spanToJSON,\n} from '@sentry/core';\nimport type { ReplayRecordingMode, Transaction } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n BUFFER_CHECKOUT_TIME,\n SESSION_IDLE_EXPIRE_DURATION,\n SESSION_IDLE_PAUSE_DURATION,\n SLOW_CLICK_SCROLL_TIMEOUT,\n SLOW_CLICK_THRESHOLD,\n WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n AddEventResult,\n AddUpdateCallback,\n AllPerformanceEntry,\n AllPerformanceEntryData,\n EventBuffer,\n InternalEventContext,\n PopEventContext,\n RecordingEvent,\n RecordingOptions,\n ReplayBreadcrumbFrame,\n ReplayCanvasIntegrationOptions,\n ReplayContainer as ReplayContainerInterface,\n ReplayPerformanceEntry,\n ReplayPluginOptions,\n SendBufferedReplayOptions,\n Session,\n SlowClickConfig,\n Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logInfo, logInfoNextTick } from './util/log';\nimport { sendReplay } from './util/sendReplay';\nimport type { SKIPPED } from './util/throttle';\nimport { THROTTLED, throttle } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n public eventBuffer: EventBuffer | null;\n\n public performanceEntries: AllPerformanceEntry[];\n\n public replayPerformanceEntries: ReplayPerformanceEntry<AllPerformanceEntryData>[];\n\n public session: Session | undefined;\n\n public clickDetector: ClickDetector | undefined;\n\n /**\n * Recording can happen in one of three modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n public recordingMode: ReplayRecordingMode;\n\n /**\n * The current or last active transcation.\n * This is only available when performance is enabled.\n */\n public lastTransaction?: Transaction;\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n public readonly timeouts: Timeouts;\n\n private _throttledAddEvent: (\n event: RecordingEvent,\n isCheckout?: boolean,\n ) => typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null>;\n\n /**\n * Options to pass to `rrweb.record()`\n */\n private readonly _recordingOptions: RecordingOptions;\n\n private readonly _options: ReplayPluginOptions;\n\n private _performanceCleanupCallback?: () => void;\n\n private _debouncedFlush: ReturnType<typeof debounce>;\n private _flushLock: Promise<unknown> | undefined;\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n private _lastActivity: number;\n\n /**\n * Is the integration currently active?\n */\n private _isEnabled: boolean;\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n private _isPaused: boolean;\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n private _hasInitializedCoreListeners: boolean;\n\n /**\n * Function to stop recording\n */\n private _stopRecording: ReturnType<typeof record> | undefined;\n\n private _context: InternalEventContext;\n\n /**\n * Internal use for canvas recording options\n */\n private _canvas: ReplayCanvasIntegrationOptions | undefined;\n\n public constructor({\n options,\n recordingOptions,\n }: {\n options: ReplayPluginOptions;\n recordingOptions: RecordingOptions;\n }) {\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } as const;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event: RecordingEvent, isCheckout?: boolean) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig: SlowClickConfig | undefined = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n }\n\n /** Get the event context. */\n public getContext(): InternalEventContext {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n public isEnabled(): boolean {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n public isPaused(): boolean {\n return this._isPaused;\n }\n\n /**\n * Determine if canvas recording is enabled\n */\n public isRecordingCanvas(): boolean {\n return Boolean(this._canvas);\n }\n\n /** Get the replay integration options. */\n public getOptions(): ReplayPluginOptions {\n return this._options;\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n public initializeSampling(previousSessionId?: string): void {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n this._handleException(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n logInfoNextTick(\n `[Replay] Starting replay in ${this.recordingMode} mode`,\n this._options._experiments.traceInternals,\n );\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n public start(): void {\n if (this._isEnabled && this.recordingMode === 'session') {\n throw new Error('Replay recording is already in progress');\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n }\n\n logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n public startBuffering(): void {\n if (this._isEnabled) {\n throw new Error('Replay recording is already in progress');\n }\n\n logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n public startRecording(): void {\n try {\n const canvasOptions = this._canvas;\n\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n emit: getHandleRecordingEmit(this),\n onMutation: this._onMutationHandler,\n ...(canvasOptions\n ? {\n recordCanvas: canvasOptions.recordCanvas,\n getCanvasManager: canvasOptions.getCanvasManager,\n sampling: canvasOptions.sampling,\n dataURLOptions: canvasOptions.dataURLOptions,\n }\n : {}),\n });\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n public stopRecording(): boolean {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this._handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise<void> {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n logInfo(\n `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n this._options._experiments.traceInternals,\n );\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n public pause(): void {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n public resume(): void {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise<void> {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode as ReplayRecordingMode) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `<flushMinDelay>` milliseconds have elapsed since the last event\n * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n public addUpdate(cb: AddUpdateCallback): void {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n public triggerUserActivity(): void {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n public updateUserActivity(): void {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n public conditionalFlush(): Promise<void> {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n public flush(): Promise<void> {\n return this._debouncedFlush() as Promise<void>;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of mulitple flushes happening closely together.\n */\n public flushImmediate(): Promise<void> {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() as Promise<void>;\n }\n\n /**\n * Cancels queued up flushes.\n */\n public cancelFlush(): void {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n public getSessionId(): string | undefined {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n public checkAndHandleExpiredSession(): boolean | void {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n public setInitialState(): void {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n public throttledAddEvent(\n event: RecordingEvent,\n isCheckout?: boolean,\n ): typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null> {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n public getCurrentRoute(): string | undefined {\n // eslint-disable-next-line deprecation/deprecation\n const lastTransaction = this.lastTransaction || getCurrentScope().getTransaction();\n\n const attributes = (lastTransaction && spanToJSON(lastTransaction).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastTransaction || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastTransaction).description;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n private _initializeRecording(): void {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /** A wrapper to conditionally capture exceptions. */\n private _handleException(error: unknown): void {\n DEBUG_BUILD && logger.error('[Replay]', error);\n\n if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {\n captureException(error);\n }\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n private _initializeSessionForSampling(previousSessionId?: string): void {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n private _checkSession(): boolean {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n private async _refreshSession(session: Session): Promise<void> {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n private _addListeners(): void {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this._handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n private _removeListeners(): void {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n private _handleVisibilityChange: () => void = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };\n\n /**\n * Handle when page is blurred\n */\n private _handleWindowBlur: () => void = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };\n\n /**\n * Handle when page is focused\n */\n private _handleWindowFocus: () => void = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };\n\n /** Ensure page remains active when a key is pressed. */\n private _handleKeyboardEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => {\n handleKeyboardEvent(this, event);\n };\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n logInfo('[Replay] Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n private _updateUserActivity(_lastActivity: number = Date.now()): void {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n private _updateSessionActivity(_lastActivity: number = Date.now()): void {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\n this.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n private _addPerformanceEntries(): Promise<Array<AddEventResult | null>> {\n const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n private _clearContext(): void {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n private _updateInitialTimestampFromEventBuffer(): void {\n const { session, eventBuffer } = this;\n if (!session || !eventBuffer) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n private _popEventContext(): PopEventContext {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n private async _runFlush(): Promise<void> {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n DEBUG_BUILD && logger.error('[Replay] No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accomodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30_000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n options: this.getOptions(),\n timestamp,\n });\n } catch (err) {\n this._handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'sendReplay' });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('send_error', 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n private _flush = async ({\n force = false,\n }: {\n /**\n * If true, flush while ignoring the `_isEnabled` state of\n * Replay integration. (By default, flush is noop if integration\n * is stopped).\n */\n force?: boolean;\n } = {}): Promise<void> => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.error('[Replay] Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5_000;\n if (tooShort || tooLong) {\n logInfo(\n `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n this._options._experiments.traceInternals,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n // this._flushLock acts as a lock so that future calls to `_flush()`\n // will be blocked until this promise resolves\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n await this._flushLock;\n this._flushLock = undefined;\n return;\n }\n\n // Wait for previous flush to finish, then call the debounced `_flush()`.\n // It's possible there are other flush requests queued and waiting for it\n // to resolve. We want to reduce all outstanding requests (as well as any\n // new flush requests that occur within a second of the locked flush\n // completing) into a single flush.\n\n try {\n await this._flushLock;\n } catch (err) {\n DEBUG_BUILD && logger.error(err);\n } finally {\n this._debouncedFlush();\n }\n };\n\n /** Save the session, if it is sticky */\n private _maybeSaveSession(): void {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n private _onMutationHandler = (mutations: unknown[]): boolean => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };\n}\n","type DebouncedCallback = {\n (): void | unknown;\n flush: () => void | unknown;\n cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n let callbackReturnValue: unknown;\n\n let timerId: ReturnType<typeof setTimeout> | undefined;\n let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc(): unknown {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers(): void {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush(): unknown {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced(): unknown {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n","import { consoleSandbox } from '@sentry/utils';\n\nimport type { DeprecatedPrivacyOptions, ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required<Omit<ReplayIntegrationPrivacyOptions, 'maskFn'>> &\n Omit<DeprecatedPrivacyOptions, 'maskInputOptions'>;\ninterface GetPrivacyReturn {\n maskTextSelector: string;\n unmaskTextSelector: string;\n blockSelector: string;\n unblockSelector: string;\n ignoreSelector: string;\n\n blockClass?: RegExp;\n maskTextClass?: RegExp;\n}\n\nfunction getOption(\n selectors: string[],\n defaultSelectors: string[],\n deprecatedClassOption?: string | RegExp,\n deprecatedSelectorOption?: string,\n): string {\n const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n const allSelectors = [\n ...selectors,\n // @deprecated\n ...deprecatedSelectors,\n\n // sentry defaults\n ...defaultSelectors,\n ];\n\n // @deprecated\n if (typeof deprecatedClassOption !== 'undefined') {\n // NOTE: No support for RegExp\n if (typeof deprecatedClassOption === 'string') {\n allSelectors.push(`.${deprecatedClassOption}`);\n }\n\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n );\n });\n }\n\n return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n}: GetPrivacyOptions): GetPrivacyReturn {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n const options: GetPrivacyReturn = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(\n block,\n ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n blockClass,\n blockSelector,\n ),\n unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n };\n\n if (blockClass instanceof RegExp) {\n options.blockClass = blockClass;\n }\n\n if (maskTextClass instanceof RegExp) {\n options.maskTextClass = maskTextClass;\n }\n\n return options;\n}\n","import { getClient } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration, IntegrationFn } from '@sentry/types';\nimport { consoleSandbox, dropUndefinedKeys, isBrowser } from '@sentry/utils';\n\nimport {\n DEFAULT_FLUSH_MAX_DELAY,\n DEFAULT_FLUSH_MIN_DELAY,\n MAX_REPLAY_DURATION,\n MIN_REPLAY_DURATION,\n MIN_REPLAY_DURATION_LIMIT,\n} from './constants';\nimport { ReplayContainer } from './replay';\nimport type {\n RecordingOptions,\n ReplayCanvasIntegrationOptions,\n ReplayConfiguration,\n ReplayPluginOptions,\n SendBufferedReplayOptions,\n} from './types';\nimport { getPrivacyOptions } from './util/getPrivacyOptions';\nimport { maskAttribute } from './util/maskAttribute';\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\ntype InitialReplayPluginOptions = Omit<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'> &\n Partial<Pick<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'>>;\n\nexport const replayIntegration = ((options?: ReplayConfiguration) => {\n // eslint-disable-next-line deprecation/deprecation\n return new Replay(options);\n}) satisfies IntegrationFn;\n\n/**\n * The main replay integration class, to be passed to `init({ integrations: [] })`.\n * @deprecated Use `replayIntegration()` instead.\n */\nexport class Replay implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Replay';\n\n /**\n * @inheritDoc\n */\n public name: string;\n\n /**\n * Options to pass to `rrweb.record()`\n */\n private readonly _recordingOptions: RecordingOptions;\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n private readonly _initialOptions: InitialReplayPluginOptions;\n\n private _replay?: ReplayContainer;\n\n public constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n sessionSampleRate,\n errorSampleRate,\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10_000,\n\n slowClickTimeout = 7_000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskInputOptions,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n }: ReplayConfiguration = {}) {\n // eslint-disable-next-line deprecation/deprecation\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n ignoreClass,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { ...(maskInputOptions || {}), password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key: string, value: string, el: HTMLElement): string =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err: Error & { __rrweb__?: boolean }) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n sessionSampleRate,\n errorSampleRate,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n _experiments,\n };\n\n if (typeof sessionSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n );\n\n this._initialOptions.sessionSampleRate = sessionSampleRate;\n }\n\n if (typeof errorSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n );\n\n this._initialOptions.errorSampleRate = errorSampleRate;\n }\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n protected get _isInitialized(): boolean {\n return _initialized;\n }\n\n /** Update _isInitialized */\n protected set _isInitialized(value: boolean) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n public setupOnce(): void {\n if (!isBrowser()) {\n return;\n }\n\n this._setup();\n\n // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n // potentially create a transaction before some native SDK integrations have run\n // and applied their own global event processor. An example is:\n // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n //\n // So we call `this._initialize()` in next event loop as a workaround to wait for other\n // global event processors to finish. This is no longer needed, but keeping it\n // here to avoid any future issues.\n setTimeout(() => this._initialize());\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n public start(): void {\n if (!this._replay) {\n return;\n }\n\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n public startBuffering(): void {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n public stop(): Promise<void> {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n public flush(options?: SendBufferedReplayOptions): Promise<void> {\n if (!this._replay || !this._replay.isEnabled()) {\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n public getReplayId(): string | undefined {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n\n /**\n * Initializes replay.\n */\n protected _initialize(): void {\n if (!this._replay) {\n return;\n }\n\n // We have to run this in _initialize, because this runs in setTimeout\n // So when this runs all integrations have been added\n // Before this, we cannot access integrations on the client,\n // so we need to mutate the options here\n this._maybeLoadFromReplayCanvasIntegration();\n\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n private _setup(): void {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n\n /** Get canvas options from ReplayCanvas integration, if it is also added. */\n private _maybeLoadFromReplayCanvasIntegration(): void {\n // To save bundle size, we skip checking for stuff here\n // and instead just try-catch everything - as generally this should all be defined\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n try {\n const client = getClient()!;\n const canvasIntegration = client.getIntegrationByName!('ReplayCanvas') as Integration & {\n getOptions(): ReplayCanvasIntegrationOptions;\n };\n if (!canvasIntegration) {\n return;\n }\n\n this._replay!['_canvas'] = canvasIntegration.getOptions();\n } catch {\n // ignore errors here\n }\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n }\n}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions): ReplayPluginOptions {\n const client = getClient();\n const opt = client && (client.getOptions() as BrowserClientReplayOptions);\n\n const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n if (!opt) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('SDK client is not available.');\n });\n return finalOptions;\n }\n\n if (\n initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n opt.replaysSessionSampleRate == null &&\n opt.replaysOnErrorSampleRate == null\n ) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n });\n }\n\n if (typeof opt.replaysSessionSampleRate === 'number') {\n finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n }\n\n if (typeof opt.replaysOnErrorSampleRate === 'number') {\n finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers: string[]): string[] {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n maskAttributes: string[];\n maskAllText: boolean;\n privacyOptions: ReturnType<typeof getPrivacyOptions>;\n key: string;\n value: string;\n el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}: MaskAttributeParams): string {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precendence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `<input>` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n}","export const MenuListArray2 = [\n {\n title:\"Home\",\n classChange:\"sub-menu-down\",\n content : [\n {\n title : \"Home 1\",\n to : \"/\"\n },\n {\n title : \"Home 2\",\n to : \"/index-2\"\n },\n {\n title : \"Home 3\",\n to : \"/index-3\"\n },\n ],\n },\n {\n title:\"Pages\",\n classChange:\"sub-menu-down\",\n content : [\n {\n title : \"About Us\",\n to : \"/about-us\"\n },\n {\n title : \"Volunteer\",\n to : \"#\",\n className:\"sub-menu\",\n content : [\n {\n title:\"Volunteer\",\n to:\"/volunteer\"\n },\n {\n title:\"Become A Volunteer\",\n to:\"/become-a-volunteer\"\n },\n ],\n },\n {\n title : \"Faq\",\n to : \"/faq\"\n },\n {\n title : \"Certificates\",\n to : \"/certificates\"\n },\n {\n title : \"Ask A Question\",\n to : \"/ask-a-question\"\n },\n {\n title : \"Happy Clients\",\n to : \"/happy-clients\"\n },\n {\n title : \"How It Works\",\n to : \"/how-it-works\"\n },\n {\n title : \"Mission\",\n to : \"/mission\"\n },\n {\n title : \"Terms And Condition\",\n to : \"/terms-and-condition\"\n },\n {\n title : \"Coming Soon\",\n to : \"/coming-soon\"\n },\n {\n title : \"Under Maintenance\",\n to : \"/under-maintenance\"\n },\n {\n title : \"Error 404\",\n to : \"/error-404\"\n },\n ],\n },\n {\n title:\"Fundraiser\",\n classChange:\"sub-menu-down\",\n content : [\n {\n title:\"Browse Fundraiser\",\n to:\"/browse-fundraiser\"\n },\n {\n title:\"Become A Fundraiser\",\n to:\"/become-a-fundraiser\"\n },\n {\n title:\"Fundraiser Detail\",\n to:\"/fundraiser-detail\"\n },\n ],\n },\n {\n title:\"Projects\",\n classChange:\"sub-menu-down\",\n content : [\n {\n title:\"Project\",\n to:\"/project\"\n },\n {\n title:\"Project Categories\",\n to:\"/project-categories\"\n },\n {\n title:\"Project Sidebar\",\n to:\"/project-sidebar\"\n },\n {\n title:\"Project Story\",\n to:\"/project-story\"\n },\n ],\n },\n {\n title:\"Blog\",\n classChange:\"sub-menu-down\",\n content:[\n {\n title:\"Blog\",\n to:\"/blog\"\n },\n {\n title:\"Blog Grid\",\n to:\"/blog-grid\"\n },\n {\n title:\"Blog List\",\n to:\"/blog-list\"\n },\n {\n title:\"Blog Details\",\n to:\"/blog-details\"\n },\n ],\n },\n { \n title: 'Contact Us',\t\n to: './contact-us',\n },\n\n];","import React, {useState, useEffect, useReducer} from 'react';\nimport {Link, useNavigate} from 'react-router-dom';\nimport {Modal} from 'react-bootstrap';\nimport Collapse from 'react-bootstrap/Collapse';\nimport {MenuListArray2} from './Menu';\nimport '../assets/scss/custom/_instituto-caramelo.scss'\n\nimport $ from 'jquery';\n\nimport logo from './../assets/images/ic_assets/logotipo/logo-black-nobg.png';\n\n\nconst Header = (modalRef) => {\n\n //form submit\n const nav = useNavigate();\n const formSubmit = (e) => {\n e.prevantDefault();\n nav(\"/\");\n }\n\n /* for sticky header */\n const [headerFix, setheaderFix] = React.useState(false);\n useEffect(() => {\n window.addEventListener(\"scroll\", () => {\n setheaderFix(window.scrollY > 50);\n });\n }, []);\n\n //Modal\n const [loginModal, setloginModal] = useState(false);\n const [resetModal, setResetModal] = useState(false);\n const [signupModal, setSignupModal] = useState(false);\n //Modals end\n\n const [sidebarOpen, setSidebarOpen] = useState(false);\n\n useEffect(() => {\n var mainMenu = document.getElementById('OpenMenu');\n if (mainMenu) {\n if (sidebarOpen) {\n mainMenu.classList.add('show');\n } else {\n mainMenu.classList.remove('show');\n }\n }\n });\n\n // Menu dropdown list\n const reducer = (previousState, updatedState) => ({\n ...previousState,\n ...updatedState,\n });\n const initialState = {\n active: \"\",\n activeSubmenu: \"\",\n }\n const [state, setState] = useReducer(reducer, initialState);\n const handleMenuActive = status => {\n setState({active: status});\n if (state.active === status) {\n setState({active: \"\"});\n }\n }\n\n const handleSubmenuActive = (status) => {\n setState({activeSubmenu: status})\n if (state.activeSubmenu === status) {\n setState({activeSubmenu: \"\"})\n }\n }\n\n //let path = window.location.pathname;\n // Menu dropdown list End\n return (\n <>\n <header className=\"site-header mo-left header style-1 mt-0\">\n <nav className=\"top-nav bg-primary\">\n <div className=\"container\">\n <div className=\"row row-cols-1 row-cols-md-2\">\n <div className=\"text-center text-md-start\">\n <a href=\"mailto:contato@ajudeumacausa.com.br\"><i className=\"fa-solid fa-envelope\"></i> contato@ajudeumacausa.com.br</a>\n </div>\n <div className=\"text-center text-md-end social-media\">\n <a href=\"https://www.facebook.com/InstitutoCaramelo/\"><i className=\"lab la-facebook-f\"></i></a>\n <a href=\"https://www.instagram.com/instituto.caramelo/\"><i className=\"lab la-instagram\"></i></a>\n </div>\n </div>\n </div>\n </nav>\n\n <div className=\"container\">\n <header id=\"header\"\n className=\"d-flex flex-wrap align-items-center justify-content-center justify-content-md-between py-3 px-5 mb-4 fixed-top\">\n\n <div className=\"col-12 col-md-3 mb-2 mb-md-0 text-center text-md-start\">\n <a href=\"/\" className=\"d-md-inline-flex link-body-emphasis text-decoration-none\">\n <img src={logo} className=\"brand w-100\" alt=\"Instituto Caramelo\"/>\n </a>\n </div>\n\n <ul className=\"nav col-12 col-md-auto mb-2 justify-content-center mb-md-0 d-none d-md-inline-flex\">\n <li><a href=\"/ajude-o-rs\" className=\"nav-link px-2\">AJUDE O RS</a></li>\n <li><a href=\"/sorteio-pelos-animais-instituto-caramelo-fiat-mobi-2025\" className=\"nav-link px-2\">SORTEIO</a></li>\n <li><a href=\"#sobre\" className=\"nav-link px-2\">SOBRE NÓS</a></li>\n </ul>\n\n <div className=\"col-md-4 text-end participe-wrapper\">\n <button type=\"button\" className=\"btn btn-outline-primary me-2\" data-bs-toggle=\"modal\"\n onClick={() => {\n $(\"#doar\").click();\n }}\n data-bs-target=\"#participeModal\"><i className=\"lab la-gratipay\"></i> {window.location.pathname.split('/')[1].includes(\"ajude-o-rs\") ? \"FAÇA UMA DOAÇÃO\" : \"ADQUIRA SEU NÚMERO\"}\n </button>\n </div>\n </header>\n </div>\n </header>\n </>\n );\n};\n\nexport default Header;","import React, {useEffect, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport baner from '../assets/images/main-slider/slider1/slider-bg1.jpg';\nimport logowhite from '../assets/images/logo-white-2.png';\nimport shape4 from '../assets/images/side-images/shape4.png';\nimport line4 from '../assets/images/side-images/shape-line4.png';\nimport shape5 from '../assets/images/side-images/shape5.png';\nimport line5 from '../assets/images/side-images/shape-line5.png';\nimport location from '../assets/images/footer-location.png';\nimport logo from './../assets/images/ajudeumacausa/fulllogo_transparent_nobuffer.png';\nimport ic_logo from './../assets/images/ic_assets/logotipo/logo-white-nobg.png';\n\n\nimport AOS from 'aos';\nimport 'aos/dist/aos.css';\n\nimport $ from 'jquery';\n\nAOS.init();\n\n\nconst Footer2 = () => {\n\n const [showConsultarNumero, setShowConsultarNumero] = useState(false);\n\n useEffect(() => {\n setShowConsultarNumero(document.getElementById('consultarNumero') !== null);\n }, []);\n\n return (\n <>\n <footer className=\"bg-light py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row mb-5\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">APOIE NOSSOS PROJETOS</h5>\n <h2>AJUDE UMA CAUSA</h2>\n <p>Ajude uma Causa é uma plataforma dedicada à arrecadação de fundos para apoiar você e seus\n sonhos.</p>\n </div>\n <div className=\"col-12 col-md-6\"></div>\n </div>\n\n <div className=\"footer-content bg-dark p-5 rounded\">\n <div className=\"row row-cols-1 row-cols-md-4\">\n <div className=\"col\">\n <h5 className=\"subtitle \">ORGANIZAÇÃO</h5>\n <img src={logo}\n className=\"w-50\" alt=\"Apoie uma causa\"/>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle \">CAUSA</h5>\n <a href=\"https://institutocaramelo.org/\"><img src={ic_logo} className=\"w-100\" alt=\"Instituto Caramelo\"/></a>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle \">NAVEGUE</h5>\n <ul>\n <li><a href=\"/ajude-o-rs\">AJUDE O RS</a></li>\n <li><a href=\"/sorteio-pelos-animais-instituto-caramelo-fiat-mobi-2025\">SORTEIO</a></li>\n <li><a href=\"#sobre\">SOBRE NÓS</a></li>\n {showConsultarNumero && <li><a href=\"#participe\"\n onClick={() => {\n $(\"#consultarNumero\").click();\n }}\n data-bs-toggle=\"modal\" data-bs-target=\"#consultarModal\">CONSULTAR\n NÚMERO</a></li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n <div className=\"py-5 disclaimer text-center\">\n {/* <p>Termos e PolÃtica de Privacidade. Lorem ipsum dolor sit amet, consectetur adipisicing elit,*/}\n {/* sed do eiusmod*/}\n {/* tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,*/}\n {/* quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo*/}\n {/* consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse*/}\n {/* cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non*/}\n {/* proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>*/}\n <p>Ajude Uma Causa 2024.</p>\n </div>\n </div>\n </footer>\n </>\n );\n};\n\nAOS.init({\n easing: 'ease-in-out-sine'\n});\n\n$(function() {\n $(window).scroll(function() {\n var scrollTop = $(window).scrollTop();\n\n if (scrollTop > 80) {\n $(\"#header\").addClass('header-scroll');\n } else {\n $(\"#header\").removeClass('header-scroll');\n }\n });\n});\n$(document).ready(function(){\n //\n // var waypoints = $('.aos-item').waypoint(function(direction) {\n // $('ul.nav a').removeClass('active');\n // $('ul.nav a[href*=\"'+this.element.id+'\"]').addClass('active');\n // }, {\n // offset: '160px'\n // })\n\n $('.scroll').on('click', function(event) {\n\n var target = $(this.getAttribute('href'));\n\n if( target.length ) {\n event.preventDefault();\n $('html, body').stop().animate({\n scrollTop: target.offset().top\n }, 800);\n }\n });\n\n // set up hover panels\n // although this can be done without JavaScript, we've attached these events\n // because it causes the hover to be triggered when the element is tapped on a touch device\n $('.hover').hover(function(){\n $(this).addClass('flip');\n },function(){\n $(this).removeClass('flip');\n });\n});\n\n\n\nexport default Footer2;","import React from 'react';\nimport {Link} from 'react-router-dom';\n\nimport bg from '../assets/images/background/bg2.jpg';\n\nconst Error = () => {\n return (\n <>\n <div className=\"error-page\">\n <div className=\"error-inner text-center\">\n <div className=\"dz-error\">404</div>\n <h2 className=\"error-head\">Lamentamos, mas a página que você procura não pode ser encontrada.</h2>\n <Link to={\"/\"} className=\"btn btn-secondary\">VOLTAR PARA A PÃGINA INICIAL</Link>\n </div>\n </div>\n </>\n );\n};\n\n\nexport default Error;","import React from 'react';\nimport {Link} from 'react-router-dom';\n\nimport logo from '../assets/images/logo.png';\nimport shape1 from '../assets/images/pattern/shape1.png';\nimport shape2 from '../assets/images/pattern/shape2.png';\nimport shape3 from '../assets/images/pattern/shape3.png';\nimport shape4 from '../assets/images/pattern/shape4.png';\n\nconst UnderMaintenance = () => {\n return (\n <>\n <div className=\"under-construction overlay-white-dark background-luminosity\" style={{backgroundImage:\"url(\" + require(\"../assets/images/background/bg5.jpg\") +\")\", backgroundPosition: \"center\"}}>\n\t\t\n <div className=\"inner-construction\">\n \n <div className=\"logo-header clearfix\">\n <Link to={\"/\"}><img src={logo} alt=\"\" /></Link>\n </div>\n <h1 className=\"dz-head\">Site Is Down<br />For Maintenance</h1>\n <p>This is the Technical Problems Page.<br/> Or any other page.</p>\n \n <svg className=\"shape-1 move-2\" viewBox=\"0 0 187 559\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M158 245C71.6 224.2 -50.6667 146.333 -101 110V497C95.8 534.6 153.667 344.667 158 245Z\" fill=\"#ffd22f\"/>\n <path d=\"M-113 2C-12 190 292.675 -12.9435 143 241C54 392 93 529 -100 556\" stroke=\"#ff7468\" strokeWidth=\"6\"/>\n </svg>\n \n <svg className=\"shape-2 rotating\" viewBox=\"0 0 114 114\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.2\">\n <rect x=\"63.3936\" y=\"11.6357\" width=\"15.3997\" height=\"89.934\" transform=\"rotate(18.3505 63.3936 11.6357)\" fill=\"#D54400\"/>\n <rect x=\"93.6138\" y=\"30.0967\" width=\"15.3997\" height=\"89.934\" transform=\"rotate(63.3505 93.6138 30.0967)\" fill=\"#D54400\"/>\n <rect width=\"15.3997\" height=\"89.934\" transform=\"matrix(0.314829 -0.949148 -0.949148 -0.314829 96.9966 78.5947)\" fill=\"#D54400\"/>\n <rect width=\"15.3997\" height=\"89.934\" transform=\"matrix(0.893767 -0.448532 -0.448532 -0.893767 70.1479 100.841)\" fill=\"#D54400\"/>\n </g>\n </svg>\n \n <svg className=\"shape-10 rotating\" viewBox=\"0 0 114 114\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.2\">\n <rect x=\"63.3936\" y=\"11.6357\" width=\"15.3997\" height=\"89.934\" transform=\"rotate(18.3505 63.3936 11.6357)\" fill=\"#D54400\"/>\n <rect x=\"93.6138\" y=\"30.0967\" width=\"15.3997\" height=\"89.934\" transform=\"rotate(63.3505 93.6138 30.0967)\" fill=\"#D54400\"/>\n <rect width=\"15.3997\" height=\"89.934\" transform=\"matrix(0.314829 -0.949148 -0.949148 -0.314829 96.9966 78.5947)\" fill=\"#D54400\"/>\n <rect width=\"15.3997\" height=\"89.934\" transform=\"matrix(0.893767 -0.448532 -0.448532 -0.893767 70.1479 100.841)\" fill=\"#D54400\"/>\n </g>\n </svg>\n \n <svg className=\"shape-3\" viewBox=\"0 0 482 279\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 3C53.9035 88.8689 116.283 185.582 247.28 195.034C333.831 201.279 435.198 155.222 489 277\" stroke=\"#ff7468\" strokeWidth=\"8\"/>\n <path d=\"M343.949 87.7759C238.291 82.6 232.707 40.9079 204 3H483V202C463.517 120.839 430.681 92.0248 343.949 87.7759Z\" fill=\"#ffd22f\"/>\n </svg>\n \n <svg className=\"shape-4\" viewBox=\"0 0 95 95\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <mask id=\"mask0_528_342\" style={{maskType:\"alpha\"}} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"95\" height=\"95\">\n <circle cx=\"47.5\" cy=\"47.5\" r=\"47\" fill=\"#D9D9D9\" stroke=\"#3B6FF5\"/>\n </mask>\n <g mask=\"url(#mask0_528_342)\">\n <path d=\"M35.0444 -64.7866L-48.7213 55.2218\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M85.0977 -11.8818L1.33193 108.127\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M43.3867 -55.969L-40.379 64.0394\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M93.4399 -3.06445L9.67421 116.944\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M51.729 -47.1516L-32.0367 72.8568\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M101.782 5.75317L18.0165 125.762\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M60.0708 -38.3342L-23.6949 81.6742\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M110.125 14.5706L26.3588 134.579\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M68.4136 -29.5166L-15.3522 90.4918\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M118.467 23.3882L34.7011 143.397\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M76.7554 -20.6992L-7.01036 99.3092\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M39.2153 -60.3779L-44.5504 59.6305\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M89.269 -7.47339L5.50331 112.535\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M47.5576 -51.5605L-36.2081 68.4479\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M97.6113 1.34424L13.8456 121.353\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M55.8999 -42.7429L-27.8658 77.2655\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M105.953 10.1619L22.1874 130.17\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M64.2422 -33.9255L-19.5235 86.0829\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M114.296 18.979L30.5302 138.987\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M72.5845 -25.1082L-11.1813 94.9003\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M122.638 27.7964L38.872 147.805\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n <path d=\"M80.9268 -16.2908L-2.83897 103.718\" stroke=\"#F7CF47\" strokeWidth=\"2\" strokeLinecap=\"round\"/>\n </g>\n </svg>\n \n <svg className=\"shape-9 move-2\" viewBox=\"0 0 95 393\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 153.397C60.3799 138.853 145.825 84.4055 181 59V329.604C43.468 355.895 3.02832 223.087 0 153.397Z\" fill=\"#D54400\"/>\n <path d=\"M212 2C141.176 133.668 -72.4699 -8.46584 32.4863 169.386C94.8953 275.141 67.5475 371.09 202.884 390\" stroke=\"#F7CF47\" strokeWidth=\"6\"/>\n </svg>\n\n <img src={shape1} className=\"shape-5 move-2\" alt=\"shape\"/>\n <img src={shape2} className=\"shape-6 move-2\" alt=\"shape\"/>\n <img src={shape3} className=\"shape-7 move-5\" alt=\"shape\"/>\n <img src={shape4} className=\"shape-8 move-2\" alt=\"shape\"/>\n \n <svg className=\"shape-11\" viewBox=\"0 0 482 279\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M489 276C439.096 190.131 376.717 93.4177 245.72 83.9658C159.169 77.7208 57.8022 123.778 3.99999 2\" stroke=\"#F7CF47\" strokeWidth=\"8\"/>\n <path d=\"M149.051 191.224C254.709 196.4 260.293 238.092 289 276H10V77C29.4832 158.161 62.3188 186.975 149.051 191.224Z\" fill=\"#D54400\"/>\n </svg>\n\n </div>\n\n </div> \n </>\n );\n};\n\nexport default UnderMaintenance;","export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);","/* eslint-disable no-return-assign */\nimport canUseDOM from './canUseDOM';\nexport var optionsSupported = false;\nexport var onceSupported = false;\n\ntry {\n var options = {\n get passive() {\n return optionsSupported = true;\n },\n\n get once() {\n // eslint-disable-next-line no-multi-assign\n return onceSupported = optionsSupported = true;\n }\n\n };\n\n if (canUseDOM) {\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, true);\n }\n} catch (e) {\n /* */\n}\n\n/**\n * An `addEventListener` ponyfill, supports the `once` option\n * \n * @param node the element\n * @param eventName the event name\n * @param handle the handler\n * @param options event options\n */\nfunction addEventListener(node, eventName, handler, options) {\n if (options && typeof options !== 'boolean' && !onceSupported) {\n var once = options.once,\n capture = options.capture;\n var wrappedHandler = handler;\n\n if (!onceSupported && once) {\n wrappedHandler = handler.__once || function onceHandler(event) {\n this.removeEventListener(eventName, onceHandler, capture);\n handler.call(this, event);\n };\n\n handler.__once = wrappedHandler;\n }\n\n node.addEventListener(eventName, wrappedHandler, optionsSupported ? options : capture);\n }\n\n node.addEventListener(eventName, handler, options);\n}\n\nexport default addEventListener;","/**\n * Returns the owner document of a given element.\n * \n * @param node the element\n */\nexport default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","/**\n * A `removeEventListener` ponyfill\n * \n * @param node the element\n * @param eventName the event name\n * @param handle the handler\n * @param options event options\n */\nfunction removeEventListener(node, eventName, handler, options) {\n var capture = options && typeof options !== 'boolean' ? options.capture : options;\n node.removeEventListener(eventName, handler, capture);\n\n if (handler.__once) {\n node.removeEventListener(eventName, handler.__once, capture);\n }\n}\n\nexport default removeEventListener;","import canUseDOM from './canUseDOM';\nvar size;\nexport default function scrollbarSize(recalc) {\n if (!size && size !== 0 || recalc) {\n if (canUseDOM) {\n var scrollDiv = document.createElement('div');\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n }\n }\n\n return size;\n}","import { useEffect, useRef } from 'react';\n\n/**\n * Creates a `Ref` whose value is updated in an effect, ensuring the most recent\n * value is the one rendered with. Generally only required for Concurrent mode usage\n * where previous work in `render()` may be discarded before being used.\n *\n * This is safe to access in an event handler.\n *\n * @param value The `Ref` value\n */\nfunction useCommittedRef(value) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref;\n}\nexport default useCommittedRef;","import { useCallback } from 'react';\nimport useCommittedRef from './useCommittedRef';\nexport default function useEventCallback(fn) {\n const ref = useCommittedRef(fn);\n return useCallback(function (...args) {\n return ref.current && ref.current(...args);\n }, [ref]);\n}","import { useMemo } from 'react';\nconst toFnRef = ref => !ref || typeof ref === 'function' ? ref : value => {\n ref.current = value;\n};\nexport function mergeRefs(refA, refB) {\n const a = toFnRef(refA);\n const b = toFnRef(refB);\n return value => {\n if (a) a(value);\n if (b) b(value);\n };\n}\n\n/**\n * Create and returns a single callback ref composed from two other Refs.\n *\n * ```tsx\n * const Button = React.forwardRef((props, ref) => {\n * const [element, attachRef] = useCallbackRef<HTMLButtonElement>();\n * const mergedRef = useMergedRefs(ref, attachRef);\n *\n * return <button ref={mergedRef} {...props}/>\n * })\n * ```\n *\n * @param refA A Callback or mutable Ref\n * @param refB A Callback or mutable Ref\n * @category refs\n */\nfunction useMergedRefs(refA, refB) {\n return useMemo(() => mergeRefs(refA, refB), [refA, refB]);\n}\nexport default useMergedRefs;","import useUpdatedRef from './useUpdatedRef';\nimport { useEffect } from 'react';\n\n/**\n * Attach a callback that fires when a component unmounts\n *\n * @param fn Handler to run when the component unmounts\n * @category effects\n */\nexport default function useWillUnmount(fn) {\n const onUnmount = useUpdatedRef(fn);\n useEffect(() => () => onUnmount.current(), []);\n}","import { useRef } from 'react';\n\n/**\n * Returns a ref that is immediately updated with the new value\n *\n * @param value The Ref value\n * @category refs\n */\nexport default function useUpdatedRef(value) {\n const valueRef = useRef(value);\n valueRef.current = value;\n return valueRef;\n}","import ownerWindow from './ownerWindow';\n/**\n * Returns one or all computed style properties of an element.\n * \n * @param node the element\n * @param psuedoElement the style property\n */\n\nexport default function getComputedStyle(node, psuedoElement) {\n return ownerWindow(node).getComputedStyle(node, psuedoElement);\n}","import ownerDocument from './ownerDocument';\n/**\n * Returns the owner window of a given element.\n * \n * @param node the element\n */\n\nexport default function ownerWindow(node) {\n var doc = ownerDocument(node);\n return doc && doc.defaultView || window;\n}","var rUpper = /([A-Z])/g;\nexport default function hyphenate(string) {\n return string.replace(rUpper, '-$1').toLowerCase();\n}","/**\n * Copyright 2013-2014, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js\n */\nimport hyphenate from './hyphenate';\nvar msPattern = /^ms-/;\nexport default function hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}","var supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;\nexport default function isTransform(value) {\n return !!(value && supportedTransforms.test(value));\n}","import getComputedStyle from './getComputedStyle';\nimport hyphenate from './hyphenateStyle';\nimport isTransform from './isTransform';\n\nfunction style(node, property) {\n var css = '';\n var transforms = '';\n\n if (typeof property === 'string') {\n return node.style.getPropertyValue(hyphenate(property)) || getComputedStyle(node).getPropertyValue(hyphenate(property));\n }\n\n Object.keys(property).forEach(function (key) {\n var value = property[key];\n\n if (!value && value !== 0) {\n node.style.removeProperty(hyphenate(key));\n } else if (isTransform(key)) {\n transforms += key + \"(\" + value + \") \";\n } else {\n css += hyphenate(key) + \": \" + value + \";\";\n }\n });\n\n if (transforms) {\n css += \"transform: \" + transforms + \";\";\n }\n\n node.style.cssText += \";\" + css;\n}\n\nexport default style;","import addEventListener from './addEventListener';\nimport removeEventListener from './removeEventListener';\n\nfunction listen(node, eventName, handler, options) {\n addEventListener(node, eventName, handler, options);\n return function () {\n removeEventListener(node, eventName, handler, options);\n };\n}\n\nexport default listen;","import css from './css';\nimport listen from './listen';\nimport triggerEvent from './triggerEvent';\n\nfunction parseDuration(node) {\n var str = css(node, 'transitionDuration') || '';\n var mult = str.indexOf('ms') === -1 ? 1000 : 1;\n return parseFloat(str) * mult;\n}\n\nfunction emulateTransitionEnd(element, duration, padding) {\n if (padding === void 0) {\n padding = 5;\n }\n\n var called = false;\n var handle = setTimeout(function () {\n if (!called) triggerEvent(element, 'transitionend', true);\n }, duration + padding);\n var remove = listen(element, 'transitionend', function () {\n called = true;\n }, {\n once: true\n });\n return function () {\n clearTimeout(handle);\n remove();\n };\n}\n\nexport default function transitionEnd(element, handler, duration, padding) {\n if (duration == null) duration = parseDuration(element) || 0;\n var removeEmulate = emulateTransitionEnd(element, duration, padding);\n var remove = listen(element, 'transitionend', handler);\n return function () {\n removeEmulate();\n remove();\n };\n}","/**\n * Triggers an event on a given element.\n * \n * @param node the element\n * @param eventName the event name to trigger\n * @param bubbles whether the event should bubble up\n * @param cancelable whether the event should be cancelable\n */\nexport default function triggerEvent(node, eventName, bubbles, cancelable) {\n if (bubbles === void 0) {\n bubbles = false;\n }\n\n if (cancelable === void 0) {\n cancelable = true;\n }\n\n if (node) {\n var event = document.createEvent('HTMLEvents');\n event.initEvent(eventName, bubbles, cancelable);\n node.dispatchEvent(event);\n }\n}","import ownerDocument from './ownerDocument';\n/**\n * Returns the actively focused element safely.\n *\n * @param doc the document to check\n */\n\nexport default function activeElement(doc) {\n if (doc === void 0) {\n doc = ownerDocument();\n }\n\n // Support: IE 9 only\n // IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n try {\n var active = doc.activeElement; // IE11 returns a seemingly empty object in some cases when accessing\n // document.activeElement from an <iframe>\n\n if (!active || !active.nodeName) return null;\n return active;\n } catch (e) {\n /* ie throws if no active element */\n return doc.body;\n }\n}","/* eslint-disable no-bitwise, no-cond-assign */\n\n/**\n * Checks if an element contains another given element.\n * \n * @param context the context element\n * @param node the element to check\n */\nexport default function contains(context, node) {\n // HTML DOM and SVG DOM may have different support levels,\n // so we need to check on context instead of a document root element.\n if (context.contains) return context.contains(node);\n if (context.compareDocumentPosition) return context === node || !!(context.compareDocumentPosition(node) & 16);\n}","import css from 'dom-helpers/css';\nimport { dataAttr } from './DataKey';\nimport getBodyScrollbarWidth from './getScrollbarWidth';\nexport const OPEN_DATA_ATTRIBUTE = dataAttr('modal-open');\n\n/**\n * Manages a stack of Modals as well as ensuring\n * body scrolling is is disabled and padding accounted for\n */\nclass ModalManager {\n constructor({\n ownerDocument,\n handleContainerOverflow = true,\n isRTL = false\n } = {}) {\n this.handleContainerOverflow = handleContainerOverflow;\n this.isRTL = isRTL;\n this.modals = [];\n this.ownerDocument = ownerDocument;\n }\n getScrollbarWidth() {\n return getBodyScrollbarWidth(this.ownerDocument);\n }\n getElement() {\n return (this.ownerDocument || document).body;\n }\n setModalAttributes(_modal) {\n // For overriding\n }\n removeModalAttributes(_modal) {\n // For overriding\n }\n setContainerStyle(containerState) {\n const style = {\n overflow: 'hidden'\n };\n\n // we are only interested in the actual `style` here\n // because we will override it\n const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';\n const container = this.getElement();\n containerState.style = {\n overflow: container.style.overflow,\n [paddingProp]: container.style[paddingProp]\n };\n if (containerState.scrollBarWidth) {\n // use computed style, here to get the real padding\n // to add our scrollbar width\n style[paddingProp] = `${parseInt(css(container, paddingProp) || '0', 10) + containerState.scrollBarWidth}px`;\n }\n container.setAttribute(OPEN_DATA_ATTRIBUTE, '');\n css(container, style);\n }\n reset() {\n [...this.modals].forEach(m => this.remove(m));\n }\n removeContainerStyle(containerState) {\n const container = this.getElement();\n container.removeAttribute(OPEN_DATA_ATTRIBUTE);\n Object.assign(container.style, containerState.style);\n }\n add(modal) {\n let modalIdx = this.modals.indexOf(modal);\n if (modalIdx !== -1) {\n return modalIdx;\n }\n modalIdx = this.modals.length;\n this.modals.push(modal);\n this.setModalAttributes(modal);\n if (modalIdx !== 0) {\n return modalIdx;\n }\n this.state = {\n scrollBarWidth: this.getScrollbarWidth(),\n style: {}\n };\n if (this.handleContainerOverflow) {\n this.setContainerStyle(this.state);\n }\n return modalIdx;\n }\n remove(modal) {\n const modalIdx = this.modals.indexOf(modal);\n if (modalIdx === -1) {\n return;\n }\n this.modals.splice(modalIdx, 1);\n\n // if that was the last modal in a container,\n // clean up the container\n if (!this.modals.length && this.handleContainerOverflow) {\n this.removeContainerStyle(this.state);\n }\n this.removeModalAttributes(modal);\n }\n isTopModal(modal) {\n return !!this.modals.length && this.modals[this.modals.length - 1] === modal;\n }\n}\nexport default ModalManager;","export const ATTRIBUTE_PREFIX = `data-rr-ui-`;\nexport const PROPERTY_PREFIX = `rrUi`;\nexport function dataAttr(property) {\n return `${ATTRIBUTE_PREFIX}${property}`;\n}\nexport function dataProp(property) {\n return `${PROPERTY_PREFIX}${property}`;\n}","/**\n * Get the width of the vertical window scrollbar if it's visible\n */\nexport default function getBodyScrollbarWidth(ownerDocument = document) {\n const window = ownerDocument.defaultView;\n return Math.abs(window.innerWidth - ownerDocument.documentElement.clientWidth);\n}","import { createContext, useContext } from 'react';\nimport canUseDOM from 'dom-helpers/canUseDOM';\nconst Context = /*#__PURE__*/createContext(canUseDOM ? window : undefined);\nexport const WindowProvider = Context.Provider;\n\n/**\n * The document \"window\" placed in React context. Helpful for determining\n * SSR context, or when rendering into an iframe.\n *\n * @returns the current window\n */\nexport default function useWindow() {\n return useContext(Context);\n}","import ownerDocument from 'dom-helpers/ownerDocument';\nimport canUseDOM from 'dom-helpers/canUseDOM';\nimport { useState, useEffect } from 'react';\nimport useWindow from './useWindow';\nexport const resolveContainerRef = (ref, document) => {\n if (!canUseDOM) return null;\n if (ref == null) return (document || ownerDocument()).body;\n if (typeof ref === 'function') ref = ref();\n if (ref && 'current' in ref) ref = ref.current;\n if (ref && ('nodeType' in ref || ref.getBoundingClientRect)) return ref;\n return null;\n};\nexport default function useWaitForDOMRef(ref, onResolved) {\n const window = useWindow();\n const [resolvedRef, setRef] = useState(() => resolveContainerRef(ref, window == null ? void 0 : window.document));\n if (!resolvedRef) {\n const earlyRef = resolveContainerRef(ref);\n if (earlyRef) setRef(earlyRef);\n }\n useEffect(() => {\n if (onResolved && resolvedRef) {\n onResolved(resolvedRef);\n }\n }, [onResolved, resolvedRef]);\n useEffect(() => {\n const nextRef = resolveContainerRef(ref);\n if (nextRef !== resolvedRef) {\n setRef(nextRef);\n }\n }, [ref, resolvedRef]);\n return resolvedRef;\n}","import { useEffect, useLayoutEffect } from 'react';\nconst isReactNative = typeof global !== 'undefined' &&\n// @ts-ignore\nglobal.navigator &&\n// @ts-ignore\nglobal.navigator.product === 'ReactNative';\nconst isDOM = typeof document !== 'undefined';\n\n/**\n * Is `useLayoutEffect` in a DOM or React Native environment, otherwise resolves to useEffect\n * Only useful to avoid the console warning.\n *\n * PREFER `useEffect` UNLESS YOU KNOW WHAT YOU ARE DOING.\n *\n * @category effects\n */\nexport default isDOM || isReactNative ? useLayoutEffect : useEffect;","import useEventCallback from '@restart/hooks/useEventCallback';\nimport useMergedRefs from '@restart/hooks/useMergedRefs';\nimport { cloneElement, useEffect, useRef } from 'react';\nfunction NoopTransition({\n children,\n in: inProp,\n onExited,\n mountOnEnter,\n unmountOnExit\n}) {\n const ref = useRef(null);\n const hasEnteredRef = useRef(inProp);\n const handleExited = useEventCallback(onExited);\n useEffect(() => {\n if (inProp) hasEnteredRef.current = true;else {\n handleExited(ref.current);\n }\n }, [inProp, handleExited]);\n const combinedRef = useMergedRefs(ref, children.ref);\n const child = /*#__PURE__*/cloneElement(children, {\n ref: combinedRef\n });\n if (inProp) return child;\n if (unmountOnExit) {\n return null;\n }\n if (!hasEnteredRef.current && mountOnEnter) {\n return null;\n }\n return child;\n}\nexport default NoopTransition;","const _excluded = [\"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"addEndListener\", \"children\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { cloneElement, useCallback, useRef } from 'react';\nimport useMergedRefs from '@restart/hooks/useMergedRefs';\nimport { getReactVersion } from './utils';\n/**\n * Normalizes RTG transition callbacks with nodeRef to better support\n * strict mode.\n *\n * @param props Transition props.\n * @returns Normalized transition props.\n */\nexport default function useRTGTransitionProps(_ref) {\n let {\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n addEndListener,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n const {\n major\n } = getReactVersion();\n const childRef = major >= 19 ? children.props.ref : children.ref;\n const nodeRef = useRef(null);\n const mergedRef = useMergedRefs(nodeRef, typeof children === 'function' ? null : childRef);\n const normalize = callback => param => {\n if (callback && nodeRef.current) {\n callback(nodeRef.current, param);\n }\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n const handleEnter = useCallback(normalize(onEnter), [onEnter]);\n const handleEntering = useCallback(normalize(onEntering), [onEntering]);\n const handleEntered = useCallback(normalize(onEntered), [onEntered]);\n const handleExit = useCallback(normalize(onExit), [onExit]);\n const handleExiting = useCallback(normalize(onExiting), [onExiting]);\n const handleExited = useCallback(normalize(onExited), [onExited]);\n const handleAddEndListener = useCallback(normalize(addEndListener), [addEndListener]);\n /* eslint-enable react-hooks/exhaustive-deps */\n\n return Object.assign({}, props, {\n nodeRef\n }, onEnter && {\n onEnter: handleEnter\n }, onEntering && {\n onEntering: handleEntering\n }, onEntered && {\n onEntered: handleEntered\n }, onExit && {\n onExit: handleExit\n }, onExiting && {\n onExiting: handleExiting\n }, onExited && {\n onExited: handleExited\n }, addEndListener && {\n addEndListener: handleAddEndListener\n }, {\n children: typeof children === 'function' ? (status, innerProps) =>\n // TODO: Types for RTG missing innerProps, so need to cast.\n children(status, Object.assign({}, innerProps, {\n ref: mergedRef\n })) : /*#__PURE__*/cloneElement(children, {\n ref: mergedRef\n })\n });\n}","import * as React from 'react';\nexport function isEscKey(e) {\n return e.code === 'Escape' || e.keyCode === 27;\n}\nexport function getReactVersion() {\n const parts = React.version.split('.');\n return {\n major: +parts[0],\n minor: +parts[1],\n patch: +parts[2]\n };\n}","const _excluded = [\"component\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from 'react';\nimport useRTGTransitionProps from './useRTGTransitionProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// Normalizes Transition callbacks when nodeRef is used.\nconst RTGTransition = /*#__PURE__*/React.forwardRef((_ref, ref) => {\n let {\n component: Component\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n const transitionProps = useRTGTransitionProps(props);\n return /*#__PURE__*/_jsx(Component, Object.assign({\n ref: ref\n }, transitionProps));\n});\nexport default RTGTransition;","import useMergedRefs from '@restart/hooks/useMergedRefs';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport useIsomorphicEffect from '@restart/hooks/useIsomorphicEffect';\nimport React, { useRef, cloneElement, useState } from 'react';\nimport NoopTransition from './NoopTransition';\nimport RTGTransition from './RTGTransition';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useTransition({\n in: inProp,\n onTransition\n}) {\n const ref = useRef(null);\n const isInitialRef = useRef(true);\n const handleTransition = useEventCallback(onTransition);\n useIsomorphicEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n let stale = false;\n handleTransition({\n in: inProp,\n element: ref.current,\n initial: isInitialRef.current,\n isStale: () => stale\n });\n return () => {\n stale = true;\n };\n }, [inProp, handleTransition]);\n useIsomorphicEffect(() => {\n isInitialRef.current = false;\n // this is for strict mode\n return () => {\n isInitialRef.current = true;\n };\n }, []);\n return ref;\n}\n/**\n * Adapts an imperative transition function to a subset of the RTG `<Transition>` component API.\n *\n * ImperativeTransition does not support mounting options or `appear` at the moment, meaning\n * that it always acts like: `mountOnEnter={true} unmountOnExit={true} appear={true}`\n */\nexport default function ImperativeTransition({\n children,\n in: inProp,\n onExited,\n onEntered,\n transition\n}) {\n const [exited, setExited] = useState(!inProp);\n\n // TODO: I think this needs to be in an effect\n if (inProp && exited) {\n setExited(false);\n }\n const ref = useTransition({\n in: !!inProp,\n onTransition: options => {\n const onFinish = () => {\n if (options.isStale()) return;\n if (options.in) {\n onEntered == null ? void 0 : onEntered(options.element, options.initial);\n } else {\n setExited(true);\n onExited == null ? void 0 : onExited(options.element);\n }\n };\n Promise.resolve(transition(options)).then(onFinish, error => {\n if (!options.in) setExited(true);\n throw error;\n });\n }\n });\n const combinedRef = useMergedRefs(ref, children.ref);\n return exited && !inProp ? null : /*#__PURE__*/cloneElement(children, {\n ref: combinedRef\n });\n}\nexport function renderTransition(component, runTransition, props) {\n if (component) {\n return /*#__PURE__*/_jsx(RTGTransition, Object.assign({}, props, {\n component: component\n }));\n }\n if (runTransition) {\n return /*#__PURE__*/_jsx(ImperativeTransition, Object.assign({}, props, {\n transition: runTransition\n }));\n }\n return /*#__PURE__*/_jsx(NoopTransition, Object.assign({}, props));\n}","const _excluded = [\"show\", \"role\", \"className\", \"style\", \"children\", \"backdrop\", \"keyboard\", \"onBackdropClick\", \"onEscapeKeyDown\", \"transition\", \"runTransition\", \"backdropTransition\", \"runBackdropTransition\", \"autoFocus\", \"enforceFocus\", \"restoreFocus\", \"restoreFocusOptions\", \"renderDialog\", \"renderBackdrop\", \"manager\", \"container\", \"onShow\", \"onHide\", \"onExit\", \"onExited\", \"onExiting\", \"onEnter\", \"onEntering\", \"onEntered\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* eslint-disable @typescript-eslint/no-use-before-define, react/prop-types */\n\nimport activeElement from 'dom-helpers/activeElement';\nimport contains from 'dom-helpers/contains';\nimport canUseDOM from 'dom-helpers/canUseDOM';\nimport listen from 'dom-helpers/listen';\nimport { useState, useRef, useCallback, useImperativeHandle, forwardRef, useEffect } from 'react';\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport useMounted from '@restart/hooks/useMounted';\nimport useWillUnmount from '@restart/hooks/useWillUnmount';\nimport usePrevious from '@restart/hooks/usePrevious';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport ModalManager from './ModalManager';\nimport useWaitForDOMRef from './useWaitForDOMRef';\nimport useWindow from './useWindow';\nimport { renderTransition } from './ImperativeTransition';\nimport { isEscKey } from './utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nlet manager;\nfunction getManager(window) {\n if (!manager) manager = new ModalManager({\n ownerDocument: window == null ? void 0 : window.document\n });\n return manager;\n}\nfunction useModalManager(provided) {\n const window = useWindow();\n const modalManager = provided || getManager(window);\n const modal = useRef({\n dialog: null,\n backdrop: null\n });\n return Object.assign(modal.current, {\n add: () => modalManager.add(modal.current),\n remove: () => modalManager.remove(modal.current),\n isTopModal: () => modalManager.isTopModal(modal.current),\n setDialogRef: useCallback(ref => {\n modal.current.dialog = ref;\n }, []),\n setBackdropRef: useCallback(ref => {\n modal.current.backdrop = ref;\n }, [])\n });\n}\nconst Modal = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n show = false,\n role = 'dialog',\n className,\n style,\n children,\n backdrop = true,\n keyboard = true,\n onBackdropClick,\n onEscapeKeyDown,\n transition,\n runTransition,\n backdropTransition,\n runBackdropTransition,\n autoFocus = true,\n enforceFocus = true,\n restoreFocus = true,\n restoreFocusOptions,\n renderDialog,\n renderBackdrop = props => /*#__PURE__*/_jsx(\"div\", Object.assign({}, props)),\n manager: providedManager,\n container: containerRef,\n onShow,\n onHide = () => {},\n onExit,\n onExited,\n onExiting,\n onEnter,\n onEntering,\n onEntered\n } = _ref,\n rest = _objectWithoutPropertiesLoose(_ref, _excluded);\n const ownerWindow = useWindow();\n const container = useWaitForDOMRef(containerRef);\n const modal = useModalManager(providedManager);\n const isMounted = useMounted();\n const prevShow = usePrevious(show);\n const [exited, setExited] = useState(!show);\n const lastFocusRef = useRef(null);\n useImperativeHandle(ref, () => modal, [modal]);\n if (canUseDOM && !prevShow && show) {\n lastFocusRef.current = activeElement(ownerWindow == null ? void 0 : ownerWindow.document);\n }\n\n // TODO: I think this needs to be in an effect\n if (show && exited) {\n setExited(false);\n }\n const handleShow = useEventCallback(() => {\n modal.add();\n removeKeydownListenerRef.current = listen(document, 'keydown', handleDocumentKeyDown);\n removeFocusListenerRef.current = listen(document, 'focus',\n // the timeout is necessary b/c this will run before the new modal is mounted\n // and so steals focus from it\n () => setTimeout(handleEnforceFocus), true);\n if (onShow) {\n onShow();\n }\n\n // autofocus after onShow to not trigger a focus event for previous\n // modals before this one is shown.\n if (autoFocus) {\n var _modal$dialog$ownerDo, _modal$dialog;\n const currentActiveElement = activeElement((_modal$dialog$ownerDo = (_modal$dialog = modal.dialog) == null ? void 0 : _modal$dialog.ownerDocument) != null ? _modal$dialog$ownerDo : ownerWindow == null ? void 0 : ownerWindow.document);\n if (modal.dialog && currentActiveElement && !contains(modal.dialog, currentActiveElement)) {\n lastFocusRef.current = currentActiveElement;\n modal.dialog.focus();\n }\n }\n });\n const handleHide = useEventCallback(() => {\n modal.remove();\n removeKeydownListenerRef.current == null ? void 0 : removeKeydownListenerRef.current();\n removeFocusListenerRef.current == null ? void 0 : removeFocusListenerRef.current();\n if (restoreFocus) {\n var _lastFocusRef$current;\n // Support: <=IE11 doesn't support `focus()` on svg elements (RB: #917)\n (_lastFocusRef$current = lastFocusRef.current) == null ? void 0 : _lastFocusRef$current.focus == null ? void 0 : _lastFocusRef$current.focus(restoreFocusOptions);\n lastFocusRef.current = null;\n }\n });\n\n // TODO: try and combine these effects: https://github.com/react-bootstrap/react-overlays/pull/794#discussion_r409954120\n\n // Show logic when:\n // - show is `true` _and_ `container` has resolved\n useEffect(() => {\n if (!show || !container) return;\n handleShow();\n }, [show, container, /* should never change: */handleShow]);\n\n // Hide cleanup logic when:\n // - `exited` switches to true\n // - component unmounts;\n useEffect(() => {\n if (!exited) return;\n handleHide();\n }, [exited, handleHide]);\n useWillUnmount(() => {\n handleHide();\n });\n\n // --------------------------------\n\n const handleEnforceFocus = useEventCallback(() => {\n if (!enforceFocus || !isMounted() || !modal.isTopModal()) {\n return;\n }\n const currentActiveElement = activeElement(ownerWindow == null ? void 0 : ownerWindow.document);\n if (modal.dialog && currentActiveElement && !contains(modal.dialog, currentActiveElement)) {\n modal.dialog.focus();\n }\n });\n const handleBackdropClick = useEventCallback(e => {\n if (e.target !== e.currentTarget) {\n return;\n }\n onBackdropClick == null ? void 0 : onBackdropClick(e);\n if (backdrop === true) {\n onHide();\n }\n });\n const handleDocumentKeyDown = useEventCallback(e => {\n if (keyboard && isEscKey(e) && modal.isTopModal()) {\n onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(e);\n if (!e.defaultPrevented) {\n onHide();\n }\n }\n });\n const removeFocusListenerRef = useRef();\n const removeKeydownListenerRef = useRef();\n const handleHidden = (...args) => {\n setExited(true);\n onExited == null ? void 0 : onExited(...args);\n };\n if (!container) {\n return null;\n }\n const dialogProps = Object.assign({\n role,\n ref: modal.setDialogRef,\n // apparently only works on the dialog role element\n 'aria-modal': role === 'dialog' ? true : undefined\n }, rest, {\n style,\n className,\n tabIndex: -1\n });\n let dialog = renderDialog ? renderDialog(dialogProps) : /*#__PURE__*/_jsx(\"div\", Object.assign({}, dialogProps, {\n children: /*#__PURE__*/React.cloneElement(children, {\n role: 'document'\n })\n }));\n dialog = renderTransition(transition, runTransition, {\n unmountOnExit: true,\n mountOnEnter: true,\n appear: true,\n in: !!show,\n onExit,\n onExiting,\n onExited: handleHidden,\n onEnter,\n onEntering,\n onEntered,\n children: dialog\n });\n let backdropElement = null;\n if (backdrop) {\n backdropElement = renderBackdrop({\n ref: modal.setBackdropRef,\n onClick: handleBackdropClick\n });\n backdropElement = renderTransition(backdropTransition, runBackdropTransition, {\n in: !!show,\n appear: true,\n mountOnEnter: true,\n unmountOnExit: true,\n children: backdropElement\n });\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/_jsxs(_Fragment, {\n children: [backdropElement, dialog]\n }), container)\n });\n});\nModal.displayName = 'Modal';\nexport default Object.assign(Modal, {\n Manager: ModalManager\n});","import { useRef, useEffect } from 'react';\n\n/**\n * Track whether a component is current mounted. Generally less preferable than\n * properlly canceling effects so they don't run after a component is unmounted,\n * but helpful in cases where that isn't feasible, such as a `Promise` resolution.\n *\n * @returns a function that returns the current isMounted state of the component\n *\n * ```ts\n * const [data, setData] = useState(null)\n * const isMounted = useMounted()\n *\n * useEffect(() => {\n * fetchdata().then((newData) => {\n * if (isMounted()) {\n * setData(newData);\n * }\n * })\n * })\n * ```\n */\nexport default function useMounted() {\n const mounted = useRef(true);\n const isMounted = useRef(() => mounted.current);\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n return isMounted.current;\n}","import { useEffect, useRef } from 'react';\n\n/**\n * Store the last of some value. Tracked via a `Ref` only updating it\n * after the component renders.\n *\n * Helpful if you need to compare a prop value to it's previous value during render.\n *\n * ```ts\n * function Component(props) {\n * const lastProps = usePrevious(props)\n *\n * if (lastProps.foo !== props.foo)\n * resetValueFromProps(props.foo)\n * }\n * ```\n *\n * @param value the value to track\n */\nexport default function usePrevious(value) {\n const ref = useRef(null);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);\n/**\n * Runs `querySelectorAll` on a given element.\n * \n * @param element the element\n * @param selector the selector\n */\n\nexport default function qsa(element, selector) {\n return toArray(element.querySelectorAll(selector));\n}","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","import addClass from 'dom-helpers/addClass';\nimport css from 'dom-helpers/css';\nimport qsa from 'dom-helpers/querySelectorAll';\nimport removeClass from 'dom-helpers/removeClass';\nimport ModalManager from '@restart/ui/ModalManager';\nconst Selector = {\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top',\n NAVBAR_TOGGLER: '.navbar-toggler'\n};\nclass BootstrapModalManager extends ModalManager {\n adjustAndStore(prop, element, adjust) {\n const actual = element.style[prop];\n // TODO: DOMStringMap and CSSStyleDeclaration aren't strictly compatible\n // @ts-ignore\n element.dataset[prop] = actual;\n css(element, {\n [prop]: `${parseFloat(css(element, prop)) + adjust}px`\n });\n }\n restore(prop, element) {\n const value = element.dataset[prop];\n if (value !== undefined) {\n delete element.dataset[prop];\n css(element, {\n [prop]: value\n });\n }\n }\n setContainerStyle(containerState) {\n super.setContainerStyle(containerState);\n const container = this.getElement();\n addClass(container, 'modal-open');\n if (!containerState.scrollBarWidth) return;\n const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';\n const marginProp = this.isRTL ? 'marginLeft' : 'marginRight';\n qsa(container, Selector.FIXED_CONTENT).forEach(el => this.adjustAndStore(paddingProp, el, containerState.scrollBarWidth));\n qsa(container, Selector.STICKY_CONTENT).forEach(el => this.adjustAndStore(marginProp, el, -containerState.scrollBarWidth));\n qsa(container, Selector.NAVBAR_TOGGLER).forEach(el => this.adjustAndStore(marginProp, el, containerState.scrollBarWidth));\n }\n removeContainerStyle(containerState) {\n super.removeContainerStyle(containerState);\n const container = this.getElement();\n removeClass(container, 'modal-open');\n const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';\n const marginProp = this.isRTL ? 'marginLeft' : 'marginRight';\n qsa(container, Selector.FIXED_CONTENT).forEach(el => this.restore(paddingProp, el));\n qsa(container, Selector.STICKY_CONTENT).forEach(el => this.restore(marginProp, el));\n qsa(container, Selector.NAVBAR_TOGGLER).forEach(el => this.restore(marginProp, el));\n }\n}\nlet sharedManager;\nexport function getSharedManager(options) {\n if (!sharedManager) sharedManager = new BootstrapModalManager(options);\n return sharedManager;\n}\nexport default BootstrapModalManager;","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","import css from 'dom-helpers/css';\nimport transitionEnd from 'dom-helpers/transitionEnd';\nfunction parseDuration(node, property) {\n const str = css(node, property) || '';\n const mult = str.indexOf('ms') === -1 ? 1000 : 1;\n return parseFloat(str) * mult;\n}\nexport default function transitionEndListener(element, handler) {\n const duration = parseDuration(element, 'transitionDuration');\n const delay = parseDuration(element, 'transitionDelay');\n const remove = transitionEnd(element, e => {\n if (e.target === element) {\n remove();\n handler(e);\n }\n }, duration + delay);\n}","\"use client\";\n\nimport React, { useCallback, useRef } from 'react';\nimport Transition from 'react-transition-group/Transition';\nimport useMergedRefs from '@restart/hooks/useMergedRefs';\nimport safeFindDOMNode from './safeFindDOMNode';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// Normalizes Transition callbacks when nodeRef is used.\nconst TransitionWrapper = /*#__PURE__*/React.forwardRef(({\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n addEndListener,\n children,\n childRef,\n ...props\n}, ref) => {\n const nodeRef = useRef(null);\n const mergedRef = useMergedRefs(nodeRef, childRef);\n const attachRef = r => {\n mergedRef(safeFindDOMNode(r));\n };\n const normalize = callback => param => {\n if (callback && nodeRef.current) {\n callback(nodeRef.current, param);\n }\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n const handleEnter = useCallback(normalize(onEnter), [onEnter]);\n const handleEntering = useCallback(normalize(onEntering), [onEntering]);\n const handleEntered = useCallback(normalize(onEntered), [onEntered]);\n const handleExit = useCallback(normalize(onExit), [onExit]);\n const handleExiting = useCallback(normalize(onExiting), [onExiting]);\n const handleExited = useCallback(normalize(onExited), [onExited]);\n const handleAddEndListener = useCallback(normalize(addEndListener), [addEndListener]);\n /* eslint-enable react-hooks/exhaustive-deps */\n\n return /*#__PURE__*/_jsx(Transition, {\n ref: ref,\n ...props,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n addEndListener: handleAddEndListener,\n nodeRef: nodeRef,\n children: typeof children === 'function' ? (status, innerProps) =>\n // TODO: Types for RTG missing innerProps, so need to cast.\n children(status, {\n ...innerProps,\n ref: attachRef\n }) : /*#__PURE__*/React.cloneElement(children, {\n ref: attachRef\n })\n });\n});\nexport default TransitionWrapper;","import ReactDOM from 'react-dom';\nexport default function safeFindDOMNode(componentOrElement) {\n if (componentOrElement && 'setState' in componentOrElement) {\n return ReactDOM.findDOMNode(componentOrElement);\n }\n return componentOrElement != null ? componentOrElement : null;\n}","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { ENTERED, ENTERING } from 'react-transition-group/Transition';\nimport transitionEndListener from './transitionEndListener';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst fadeStyles = {\n [ENTERING]: 'show',\n [ENTERED]: 'show'\n};\nconst Fade = /*#__PURE__*/React.forwardRef(({\n className,\n children,\n transitionClasses = {},\n onEnter,\n ...rest\n}, ref) => {\n const props = {\n in: false,\n timeout: 300,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n ...rest\n };\n const handleEnter = useCallback((node, isAppearing) => {\n triggerBrowserReflow(node);\n onEnter == null ? void 0 : onEnter(node, isAppearing);\n }, [onEnter]);\n return /*#__PURE__*/_jsx(TransitionWrapper, {\n ref: ref,\n addEndListener: transitionEndListener,\n ...props,\n onEnter: handleEnter,\n childRef: children.ref,\n children: (status, innerProps) => /*#__PURE__*/React.cloneElement(children, {\n ...innerProps,\n className: classNames('fade', className, children.props.className, fadeStyles[status], transitionClasses[status])\n })\n });\n});\nFade.displayName = 'Fade';\nexport default Fade;","// reading a dimension prop will cause the browser to recalculate,\n// which will let our animations work\nexport default function triggerBrowserReflow(node) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n node.offsetHeight;\n}","\"use client\";\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const DEFAULT_BREAKPOINTS = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\nexport const DEFAULT_MIN_BREAKPOINT = 'xs';\nconst ThemeContext = /*#__PURE__*/React.createContext({\n prefixes: {},\n breakpoints: DEFAULT_BREAKPOINTS,\n minBreakpoint: DEFAULT_MIN_BREAKPOINT\n});\nconst {\n Consumer,\n Provider\n} = ThemeContext;\nfunction ThemeProvider({\n prefixes = {},\n breakpoints = DEFAULT_BREAKPOINTS,\n minBreakpoint = DEFAULT_MIN_BREAKPOINT,\n dir,\n children\n}) {\n const contextValue = useMemo(() => ({\n prefixes: {\n ...prefixes\n },\n breakpoints,\n minBreakpoint,\n dir\n }), [prefixes, breakpoints, minBreakpoint, dir]);\n return /*#__PURE__*/_jsx(Provider, {\n value: contextValue,\n children: children\n });\n}\nexport function useBootstrapPrefix(prefix, defaultPrefix) {\n const {\n prefixes\n } = useContext(ThemeContext);\n return prefix || prefixes[defaultPrefix] || defaultPrefix;\n}\nexport function useBootstrapBreakpoints() {\n const {\n breakpoints\n } = useContext(ThemeContext);\n return breakpoints;\n}\nexport function useBootstrapMinBreakpoint() {\n const {\n minBreakpoint\n } = useContext(ThemeContext);\n return minBreakpoint;\n}\nexport function useIsRTL() {\n const {\n dir\n } = useContext(ThemeContext);\n return dir === 'rtl';\n}\nfunction createBootstrapComponent(Component, opts) {\n if (typeof opts === 'string') opts = {\n prefix: opts\n };\n const isClassy = Component.prototype && Component.prototype.isReactComponent;\n // If it's a functional component make sure we don't break it with a ref\n const {\n prefix,\n forwardRefAs = isClassy ? 'ref' : 'innerRef'\n } = opts;\n const Wrapped = /*#__PURE__*/React.forwardRef(({\n ...props\n }, ref) => {\n props[forwardRefAs] = ref;\n const bsPrefix = useBootstrapPrefix(props.bsPrefix, prefix);\n return /*#__PURE__*/_jsx(Component, {\n ...props,\n bsPrefix: bsPrefix\n });\n });\n Wrapped.displayName = `Bootstrap(${Component.displayName || Component.name})`;\n return Wrapped;\n}\nexport { createBootstrapComponent, Consumer as ThemeConsumer };\nexport default ThemeProvider;","\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ModalBody = /*#__PURE__*/React.forwardRef(({\n className,\n bsPrefix,\n as: Component = 'div',\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal-body');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n className: classNames(className, bsPrefix),\n ...props\n });\n});\nModalBody.displayName = 'ModalBody';\nexport default ModalBody;","\"use client\";\n\nimport * as React from 'react';\nconst ModalContext = /*#__PURE__*/React.createContext({\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onHide() {}\n});\nexport default ModalContext;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ModalDialog = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n contentClassName,\n centered,\n size,\n fullscreen,\n children,\n scrollable,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal');\n const dialogClass = `${bsPrefix}-dialog`;\n const fullScreenClass = typeof fullscreen === 'string' ? `${bsPrefix}-fullscreen-${fullscreen}` : `${bsPrefix}-fullscreen`;\n return /*#__PURE__*/_jsx(\"div\", {\n ...props,\n ref: ref,\n className: classNames(dialogClass, className, size && `${bsPrefix}-${size}`, centered && `${dialogClass}-centered`, scrollable && `${dialogClass}-scrollable`, fullscreen && fullScreenClass),\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames(`${bsPrefix}-content`, contentClassName),\n children: children\n })\n });\n});\nModalDialog.displayName = 'ModalDialog';\nexport default ModalDialog;","\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ModalFooter = /*#__PURE__*/React.forwardRef(({\n className,\n bsPrefix,\n as: Component = 'div',\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal-footer');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n className: classNames(className, bsPrefix),\n ...props\n });\n});\nModalFooter.displayName = 'ModalFooter';\nexport default ModalFooter;","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst propTypes = {\n /** An accessible label indicating the relevant information about the Close Button. */\n 'aria-label': PropTypes.string,\n /** A callback fired after the Close Button is clicked. */\n onClick: PropTypes.func,\n /**\n * Render different color variant for the button.\n *\n * Omitting this will render the default dark color.\n */\n variant: PropTypes.oneOf(['white'])\n};\nconst CloseButton = /*#__PURE__*/React.forwardRef(({\n className,\n variant,\n 'aria-label': ariaLabel = 'Close',\n ...props\n}, ref) => /*#__PURE__*/_jsx(\"button\", {\n ref: ref,\n type: \"button\",\n className: classNames('btn-close', variant && `btn-close-${variant}`, className),\n \"aria-label\": ariaLabel,\n ...props\n}));\nCloseButton.displayName = 'CloseButton';\nCloseButton.propTypes = propTypes;\nexport default CloseButton;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport CloseButton from './CloseButton';\nimport ModalContext from './ModalContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst AbstractModalHeader = /*#__PURE__*/React.forwardRef(({\n closeLabel = 'Close',\n closeVariant,\n closeButton = false,\n onHide,\n children,\n ...props\n}, ref) => {\n const context = useContext(ModalContext);\n const handleClick = useEventCallback(() => {\n context == null ? void 0 : context.onHide();\n onHide == null ? void 0 : onHide();\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n ref: ref,\n ...props,\n children: [children, closeButton && /*#__PURE__*/_jsx(CloseButton, {\n \"aria-label\": closeLabel,\n variant: closeVariant,\n onClick: handleClick\n })]\n });\n});\nexport default AbstractModalHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AbstractModalHeader from './AbstractModalHeader';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ModalHeader = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n closeLabel = 'Close',\n closeButton = false,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal-header');\n return /*#__PURE__*/_jsx(AbstractModalHeader, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n closeLabel: closeLabel,\n closeButton: closeButton\n });\n});\nModalHeader.displayName = 'ModalHeader';\nexport default ModalHeader;","\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport divWithClassName from './divWithClassName';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DivStyledAsH4 = divWithClassName('h4');\nconst ModalTitle = /*#__PURE__*/React.forwardRef(({\n className,\n bsPrefix,\n as: Component = DivStyledAsH4,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal-title');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n className: classNames(className, bsPrefix),\n ...props\n });\n});\nModalTitle.displayName = 'ModalTitle';\nexport default ModalTitle;","import * as React from 'react';\nimport classNames from 'classnames';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default (className => /*#__PURE__*/React.forwardRef((p, ref) => /*#__PURE__*/_jsx(\"div\", {\n ...p,\n ref: ref,\n className: classNames(p.className, className)\n})));","\"use client\";\n\nimport classNames from 'classnames';\nimport addEventListener from 'dom-helpers/addEventListener';\nimport canUseDOM from 'dom-helpers/canUseDOM';\nimport ownerDocument from 'dom-helpers/ownerDocument';\nimport removeEventListener from 'dom-helpers/removeEventListener';\nimport getScrollbarSize from 'dom-helpers/scrollbarSize';\nimport useCallbackRef from '@restart/hooks/useCallbackRef';\nimport useEventCallback from '@restart/hooks/useEventCallback';\nimport useMergedRefs from '@restart/hooks/useMergedRefs';\nimport useWillUnmount from '@restart/hooks/useWillUnmount';\nimport transitionEnd from 'dom-helpers/transitionEnd';\nimport * as React from 'react';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport BaseModal from '@restart/ui/Modal';\nimport { getSharedManager } from './BootstrapModalManager';\nimport Fade from './Fade';\nimport ModalBody from './ModalBody';\nimport ModalContext from './ModalContext';\nimport ModalDialog from './ModalDialog';\nimport ModalFooter from './ModalFooter';\nimport ModalHeader from './ModalHeader';\nimport ModalTitle from './ModalTitle';\nimport { useBootstrapPrefix, useIsRTL } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/* eslint-disable no-use-before-define, react/no-multi-comp */\nfunction DialogTransition(props) {\n return /*#__PURE__*/_jsx(Fade, {\n ...props,\n timeout: null\n });\n}\nfunction BackdropTransition(props) {\n return /*#__PURE__*/_jsx(Fade, {\n ...props,\n timeout: null\n });\n}\n\n/* eslint-enable no-use-before-define */\nconst Modal = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n style,\n dialogClassName,\n contentClassName,\n children,\n dialogAs: Dialog = ModalDialog,\n 'data-bs-theme': dataBsTheme,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n /* BaseModal props */\n\n show = false,\n animation = true,\n backdrop = true,\n keyboard = true,\n onEscapeKeyDown,\n onShow,\n onHide,\n container,\n autoFocus = true,\n enforceFocus = true,\n restoreFocus = true,\n restoreFocusOptions,\n onEntered,\n onExit,\n onExiting,\n onEnter,\n onEntering,\n onExited,\n backdropClassName,\n manager: propsManager,\n ...props\n}, ref) => {\n const [modalStyle, setStyle] = useState({});\n const [animateStaticModal, setAnimateStaticModal] = useState(false);\n const waitingForMouseUpRef = useRef(false);\n const ignoreBackdropClickRef = useRef(false);\n const removeStaticModalAnimationRef = useRef(null);\n const [modal, setModalRef] = useCallbackRef();\n const mergedRef = useMergedRefs(ref, setModalRef);\n const handleHide = useEventCallback(onHide);\n const isRTL = useIsRTL();\n bsPrefix = useBootstrapPrefix(bsPrefix, 'modal');\n const modalContext = useMemo(() => ({\n onHide: handleHide\n }), [handleHide]);\n function getModalManager() {\n if (propsManager) return propsManager;\n return getSharedManager({\n isRTL\n });\n }\n function updateDialogStyle(node) {\n if (!canUseDOM) return;\n const containerIsOverflowing = getModalManager().getScrollbarWidth() > 0;\n const modalIsOverflowing = node.scrollHeight > ownerDocument(node).documentElement.clientHeight;\n setStyle({\n paddingRight: containerIsOverflowing && !modalIsOverflowing ? getScrollbarSize() : undefined,\n paddingLeft: !containerIsOverflowing && modalIsOverflowing ? getScrollbarSize() : undefined\n });\n }\n const handleWindowResize = useEventCallback(() => {\n if (modal) {\n updateDialogStyle(modal.dialog);\n }\n });\n useWillUnmount(() => {\n removeEventListener(window, 'resize', handleWindowResize);\n removeStaticModalAnimationRef.current == null ? void 0 : removeStaticModalAnimationRef.current();\n });\n\n // We prevent the modal from closing during a drag by detecting where the\n // click originates from. If it starts in the modal and then ends outside\n // don't close.\n const handleDialogMouseDown = () => {\n waitingForMouseUpRef.current = true;\n };\n const handleMouseUp = e => {\n if (waitingForMouseUpRef.current && modal && e.target === modal.dialog) {\n ignoreBackdropClickRef.current = true;\n }\n waitingForMouseUpRef.current = false;\n };\n const handleStaticModalAnimation = () => {\n setAnimateStaticModal(true);\n removeStaticModalAnimationRef.current = transitionEnd(modal.dialog, () => {\n setAnimateStaticModal(false);\n });\n };\n const handleStaticBackdropClick = e => {\n if (e.target !== e.currentTarget) {\n return;\n }\n handleStaticModalAnimation();\n };\n const handleClick = e => {\n if (backdrop === 'static') {\n handleStaticBackdropClick(e);\n return;\n }\n if (ignoreBackdropClickRef.current || e.target !== e.currentTarget) {\n ignoreBackdropClickRef.current = false;\n return;\n }\n onHide == null ? void 0 : onHide();\n };\n const handleEscapeKeyDown = e => {\n if (keyboard) {\n onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(e);\n } else {\n // Call preventDefault to stop modal from closing in @restart/ui.\n e.preventDefault();\n if (backdrop === 'static') {\n // Play static modal animation.\n handleStaticModalAnimation();\n }\n }\n };\n const handleEnter = (node, isAppearing) => {\n if (node) {\n updateDialogStyle(node);\n }\n onEnter == null ? void 0 : onEnter(node, isAppearing);\n };\n const handleExit = node => {\n removeStaticModalAnimationRef.current == null ? void 0 : removeStaticModalAnimationRef.current();\n onExit == null ? void 0 : onExit(node);\n };\n const handleEntering = (node, isAppearing) => {\n onEntering == null ? void 0 : onEntering(node, isAppearing);\n\n // FIXME: This should work even when animation is disabled.\n addEventListener(window, 'resize', handleWindowResize);\n };\n const handleExited = node => {\n if (node) node.style.display = ''; // RHL removes it sometimes\n onExited == null ? void 0 : onExited(node);\n\n // FIXME: This should work even when animation is disabled.\n removeEventListener(window, 'resize', handleWindowResize);\n };\n const renderBackdrop = useCallback(backdropProps => /*#__PURE__*/_jsx(\"div\", {\n ...backdropProps,\n className: classNames(`${bsPrefix}-backdrop`, backdropClassName, !animation && 'show')\n }), [animation, backdropClassName, bsPrefix]);\n const baseModalStyle = {\n ...style,\n ...modalStyle\n };\n\n // If `display` is not set to block, autoFocus inside the modal fails\n // https://github.com/react-bootstrap/react-bootstrap/issues/5102\n baseModalStyle.display = 'block';\n const renderDialog = dialogProps => /*#__PURE__*/_jsx(\"div\", {\n role: \"dialog\",\n ...dialogProps,\n style: baseModalStyle,\n className: classNames(className, bsPrefix, animateStaticModal && `${bsPrefix}-static`, !animation && 'show'),\n onClick: backdrop ? handleClick : undefined,\n onMouseUp: handleMouseUp,\n \"data-bs-theme\": dataBsTheme,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n children: /*#__PURE__*/_jsx(Dialog, {\n ...props,\n onMouseDown: handleDialogMouseDown,\n className: dialogClassName,\n contentClassName: contentClassName,\n children: children\n })\n });\n return /*#__PURE__*/_jsx(ModalContext.Provider, {\n value: modalContext,\n children: /*#__PURE__*/_jsx(BaseModal, {\n show: show,\n ref: mergedRef,\n backdrop: backdrop,\n container: container,\n keyboard: true // Always set true - see handleEscapeKeyDown\n ,\n autoFocus: autoFocus,\n enforceFocus: enforceFocus,\n restoreFocus: restoreFocus,\n restoreFocusOptions: restoreFocusOptions,\n onEscapeKeyDown: handleEscapeKeyDown,\n onShow: onShow,\n onHide: onHide,\n onEnter: handleEnter,\n onEntering: handleEntering,\n onEntered: onEntered,\n onExit: handleExit,\n onExiting: onExiting,\n onExited: handleExited,\n manager: getModalManager(),\n transition: animation ? DialogTransition : undefined,\n backdropTransition: animation ? BackdropTransition : undefined,\n renderBackdrop: renderBackdrop,\n renderDialog: renderDialog\n })\n });\n});\nModal.displayName = 'Modal';\nexport default Object.assign(Modal, {\n Body: ModalBody,\n Header: ModalHeader,\n Title: ModalTitle,\n Footer: ModalFooter,\n Dialog: ModalDialog,\n TRANSITION_DURATION: 300,\n BACKDROP_TRANSITION_DURATION: 150\n});","import { useState } from 'react';\n\n/**\n * A convenience hook around `useState` designed to be paired with\n * the component [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) api.\n * Callback refs are useful over `useRef()` when you need to respond to the ref being set\n * instead of lazily accessing it in an effect.\n *\n * ```ts\n * const [element, attachRef] = useCallbackRef<HTMLDivElement>()\n *\n * useEffect(() => {\n * if (!element) return\n *\n * const calendar = new FullCalendar.Calendar(element)\n *\n * return () => {\n * calendar.destroy()\n * }\n * }, [element])\n *\n * return <div ref={attachRef} />\n * ```\n *\n * @category refs\n */\nexport default function useCallbackRef() {\n return useState(null);\n}","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || typeof value === 'undefined';\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n loopable: Record<string, T>,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each<T, TA>(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each<T, TA>(\n loopable: T[] | Record<string, T>,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record<string, number>[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record<string, number>[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record<string, number>[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n const set = new Set<T>(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = _limitValue(Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record<string, number>,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache<T, R> = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy<T, R>,\n context: AnyObject,\n subProxy?: ResolverProxy<T, R>,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache<T, R> = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set<AnyObject>,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set<AnyObject>();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set<AnyObject>,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set<string>();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type Chart from '../core/core.controller.js';\nimport type {ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n\n const skipNull = (meta) => {\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter<T>): Record<string, string>;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter<T>, value: unknown, format?: TimeUnit): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter<T>, timestamp: number, format: TimeUnit): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek'): number;\n}\n\nfunction abstract<T = void>(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override<T extends AnyObject = AnyObject>(\n members: Partial<Omit<DateAdapter<T>, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record<string, string> {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record<keyof T, Animation>;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record<string, unknown>;\n }\n const ret: Record<string, unknown> = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = [];\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta, chartArea) {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the envent inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, ðœƒ) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial<PointOptions & PointHoverOptions>) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, /** @type {Unit} */ (parser))\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object<number,object>} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { MouseEvent } from 'react';\nimport type {\n ChartType,\n ChartData,\n DefaultDataPoint,\n ChartDataset,\n ChartOptions,\n Chart,\n} from 'chart.js';\n\nimport type { ForwardedRef } from './types.js';\n\nconst defaultDatasetIdKey = 'label';\n\nexport function reforwardRef<T>(ref: ForwardedRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint<TType>,\n TLabel = unknown\n>(chart: Chart<TType, TData, TLabel>, nextOptions: ChartOptions<TType>) {\n const options = chart.options;\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions);\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint<TType>,\n TLabel = unknown\n>(\n currentData: ChartData<TType, TData, TLabel>,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels;\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint<TType>,\n TLabel = unknown\n>(\n currentData: ChartData<TType, TData, TLabel>,\n nextDatasets: ChartDataset<TType, TData>[],\n datasetIdKey = defaultDatasetIdKey\n) {\n const addedDatasets: ChartDataset<TType, TData>[] = [];\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record<string, unknown>) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record<string, unknown>) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n );\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset<TType, TData>;\n }\n\n addedDatasets.push(currentDataset);\n\n Object.assign(currentDataset, nextDataset);\n\n return currentDataset;\n }\n );\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint<TType>,\n TLabel = unknown\n>(data: ChartData<TType, TData, TLabel>, datasetIdKey = defaultDatasetIdKey) {\n const nextData: ChartData<TType, TData, TLabel> = {\n labels: [],\n datasets: [],\n };\n\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n\n return nextData;\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(\n chart: Chart,\n event: MouseEvent<HTMLCanvasElement>\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'dataset',\n { intersect: true },\n false\n );\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(\n chart: Chart,\n event: MouseEvent<HTMLCanvasElement>\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false\n );\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(\n chart: Chart,\n event: MouseEvent<HTMLCanvasElement>\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'index',\n { intersect: true },\n false\n );\n}\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { Chart as ChartJS } from 'chart.js';\nimport type { ChartType, DefaultDataPoint } from 'chart.js';\n\nimport type { ForwardedRef, ChartProps, BaseChartComponent } from './types.js';\nimport {\n reforwardRef,\n cloneData,\n setOptions,\n setLabels,\n setDatasets,\n} from './utils.js';\n\nfunction ChartComponent<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint<TType>,\n TLabel = unknown\n>(\n props: ChartProps<TType, TData, TLabel>,\n ref: ForwardedRef<ChartJS<TType, TData, TLabel>>\n) {\n const {\n height = 150,\n width = 300,\n redraw = false,\n datasetIdKey,\n type,\n data,\n options,\n plugins = [],\n fallbackContent,\n updateMode,\n ...canvasProps\n } = props as ChartProps;\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<ChartJS | null>();\n\n const renderChart = () => {\n if (!canvasRef.current) return;\n\n chartRef.current = new ChartJS(canvasRef.current, {\n type,\n data: cloneData(data, datasetIdKey),\n options: options && { ...options },\n plugins,\n });\n\n reforwardRef(ref, chartRef.current);\n };\n\n const destroyChart = () => {\n reforwardRef(ref, null);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n };\n\n useEffect(() => {\n if (!redraw && chartRef.current && options) {\n setOptions(chartRef.current, options);\n }\n }, [redraw, options]);\n\n useEffect(() => {\n if (!redraw && chartRef.current) {\n setLabels(chartRef.current.config.data, data.labels);\n }\n }, [redraw, data.labels]);\n\n useEffect(() => {\n if (!redraw && chartRef.current && data.datasets) {\n setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n }\n }, [redraw, data.datasets]);\n\n useEffect(() => {\n if (!chartRef.current) return;\n\n if (redraw) {\n destroyChart();\n setTimeout(renderChart);\n } else {\n chartRef.current.update(updateMode);\n }\n }, [redraw, options, data.labels, data.datasets, updateMode]);\n\n useEffect(() => {\n if (!chartRef.current) return;\n\n destroyChart();\n setTimeout(renderChart);\n }, [type]);\n\n useEffect(() => {\n renderChart();\n\n return () => destroyChart();\n }, []);\n\n return (\n <canvas\n ref={canvasRef}\n role='img'\n height={height}\n width={width}\n {...canvasProps}\n >\n {fallbackContent}\n </canvas>\n );\n}\n\nexport const Chart = forwardRef(ChartComponent) as BaseChartComponent;\n","import React, { forwardRef } from 'react';\nimport {\n Chart as ChartJS,\n LineController,\n BarController,\n RadarController,\n DoughnutController,\n PolarAreaController,\n BubbleController,\n PieController,\n ScatterController,\n} from 'chart.js';\nimport type { ChartType, ChartComponentLike } from 'chart.js';\n\nimport type {\n ChartProps,\n ChartJSOrUndefined,\n TypedChartComponent,\n} from './types.js';\nimport { Chart } from './chart.js';\n\nfunction createTypedChart<T extends ChartType>(\n type: T,\n registerables: ChartComponentLike\n) {\n ChartJS.register(registerables);\n\n return forwardRef<ChartJSOrUndefined<T>, Omit<ChartProps<T>, 'type'>>(\n (props, ref) => <Chart {...props} ref={ref} type={type} />\n ) as TypedChartComponent<T>;\n}\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController);\n\nexport const Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n);\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n);\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n);\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n);\n","import React, { Component } from \"react\";\nimport { Doughnut } from \"react-chartjs-2\";\nimport {Chart, ArcElement} from 'chart.js'\n\nChart.register(ArcElement);\n\nclass DonutChart2 extends Component {\n render() {\n const data = {\n\t\tweight: 0,\n\t\tdefaultFontFamily: \"Poppins\",\n\t\tdatasets: [\n\t\t\t{\n\t\t\t\tdata: [this.props.value, 100 - this.props.value],\n\t\t\t\tborderWidth: 0,\n\t\t\t\tbackgroundColor: [\n\t\t\t\t\tthis.props.backgroundColor,\n\t\t\t\t\tthis.props.backgroundColor2,\n\t\t\t\t],\n\t\t\t},\n\t\t],\n };\n\n const options = {\n //width: 75,\n //cutoutPercentage: 50,\n cutout:'93%',\n responsive: true,\n maintainAspectRatio : true,\n tooltips: { enabled: false },\n hover: { mode: null },\n };\n return (\n\t\t<div className=\"donught-chart\" >\n\t\t\t<Doughnut data={data} options={options} height={165} width={165} />\n\t\t</div>\n );\n }\n}\n\nexport default DonutChart2;\n","import React,{useState, useEffect, useRef} from 'react';\nimport { Link } from 'react-router-dom';\nimport { Modal } from 'react-bootstrap';\n\nimport logo from '../assets/images/logo-white.png';\nimport bnr from '../assets/images/banner/bnr3.jpg';\nimport DonutChart2 from '../components/DonutChart2';\n\nconst ComingSoon = () => {\n const [subscribe, setSubscribe] = useState(false);\n\n const d = new Date();\n \n const [timerDays, setTimerDays] = useState('00');\t\n\tconst [timerHours, setTimerHours] = useState('00');\t\n\tconst [timerMinutes, setTimerMinutes] = useState('00');\t\n\tconst [timerSeconds, setTimerSeconds] = useState('00');\t\n\tlet interval = useRef();\n\t\n\tconst startTimer = () =>{\n\t\t/* Website Launch Date */ \n\t\tvar WebsiteLaunchDate = new Date();\n\t\tvar monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\t\tWebsiteLaunchDate.setMonth(WebsiteLaunchDate.getMonth() + 1);\n\t\tWebsiteLaunchDate = WebsiteLaunchDate.getDate() + \" \" + monthNames[WebsiteLaunchDate.getMonth()] + \" \" + WebsiteLaunchDate.getFullYear();\n\t\t/* Website Launch Date END */\n\t\t\n\t\t//alert(WebsiteLaunchDate);\n\t\n\t\t// const countdownDate = new Date(`Dec 31, ${d.getFullYear()} 00:01:00`).getTime();\t\n\t\tconst countdownDate = new Date(WebsiteLaunchDate +' 23:5').getTime();\t\n\t\tinterval = setInterval(()=>{\n\t\t\tconst now = new Date().getTime();\n\t\t\tconst distance = countdownDate - now;\n\t\t\tconst days = Math.floor(distance / (1000*60*60*24));\n\t\t\tconst hours = Math.floor((distance % (1000*60*60*24)/(1000*60*60)));\n\t\t\tconst minutes = Math.floor((distance % (1000*60*60)/(1000*60)));\n\t\t\tconst seconds = Math.floor((distance % (1000*60))/1000);\n\t\t\t\n\t\t\tif(distance < 0){\n\t\t\t\t//stop our timer\n\t\t\t\tclearInterval(interval.current);\n\t\t\t} else {\n\t\t\t\t//update timer\n\t\t\t\tsetTimerDays(days);\n\t\t\t\tsetTimerHours(hours);\n\t\t\t\tsetTimerMinutes(minutes);\n\t\t\t\tsetTimerSeconds(seconds);\n\t\t\t}\t\n\t\t},1000);\n\t};\n\t\n\t//componentDidMount\n \tuseEffect(()=>{\n\t\tstartTimer();\n\t\treturn()=>{\n\t\t\tclearInterval(interval.current);\n\t\t};\n\t});\n\t\n\t\n return (\n <>\n <div className=\"coming-soon background-luminosity\" data-text=\"CHARITY\" style={{backgroundImage: \"url(\"+ require('../assets/images/background/bg5.jpg') + \")\"}}>\n <div className=\"inner-content\">\n <div className=\"logo-header logo-dark\">\n <Link to={\"/\"}><img src={logo} alt=\"\" /></Link>\n </div>\n <h1 className=\"dz-head\">We Are Coming <span className=\"text-secondary\">Soon !</span></h1>\n <p>We`ll be here soon with our new awesome site, subscribe to be notified.</p>\n <Link to={\"/contact-us\"} className=\"btn btn-light btn-skew m-r15\"> <span>GET IN TOUCH</span></Link>\n <Link to={\"#\"} onClick={()=>setSubscribe(true)} className=\"btn btn-skew btn-secondary\"><span>SUBSCRIBE NOW</span></Link>\n </div>\n <div className=\"countdown-timer countdown-container\">\n <div className=\"clock\">\n <div className=\"clock-item clock-days countdown-time-value\">\n <div id=\"canvas-days\" className=\"clock-canvas\">\n <DonutChart2 value={timerDays} backgroundColor=\"rgba(255,255,255,1)\"\n backgroundColor2= \"rgba(255, 255, 255,0.4)\"\n />\n </div>\n <div className=\"text\">\n <p className=\"val\">{timerDays}</p>\n <p className=\"type-days type-time\" data-border-color=\"#fff\">Days</p>\n </div>\n </div>\n <div className=\"clock-item clock-hours countdown-time-value\">\n <div id=\"canvas-hours\" className=\"clock-canvas\">\n <DonutChart2 value={timerHours} backgroundColor=\"rgba(255,255,255,1)\"\n backgroundColor2= \"rgba(255, 255, 255,0.4)\"\n />\n </div>\n <div className=\"text\">\n <p className=\"val\">{timerHours}</p>\n <p className=\"type-hours type-time\" data-border-color=\"#fff\">Hours</p>\n </div>\n </div>\n <div className=\"clock-item clock-minutes countdown-time-value\">\n <div id=\"canvas-minutes\" className=\"clock-canvas\">\n <DonutChart2 value={timerMinutes} backgroundColor=\"rgba(255,255,255,1)\"\n backgroundColor2= \"rgba(255, 255, 255,0.4)\"\n />\n </div>\n <div className=\"text\">\n <p className=\"val\">{timerMinutes}</p>\n <p className=\"type-minutes type-time\" data-border-color=\"#fff\">Minutes</p>\n </div>\n </div>\n <div className=\"clock-item clock-seconds countdown-time-value\">\n <div id=\"canvas-seconds\" className=\"clock-canvas\">\n <DonutChart2 value={timerSeconds} backgroundColor=\"rgba(255,255,255,1)\"\n backgroundColor2= \"rgba(255, 255, 255,0.4)\"\n />\n </div>\n <div className=\"text\">\n <p className=\"val\">{timerSeconds}</p>\n <p className=\"type-seconds type-time\" data-border-color=\"#fff\">Seconds</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <Modal className=\"modal fade inquiry-modal \" show={subscribe} onHide={setSubscribe} centered>\n \n <div className=\"inquiry-adv\">\n <img src={bnr} alt=\"Image\" />\n </div>\n <div className=\"contact-modal\">\n <div className=\"modal-header\">\n <i className=\"fa-solid fa-envelope\"></i>\n <h5 className=\"modal-title\" id=\"exampleModalLongTitle\">Subscribe To Our Newsletter</h5>\n <button type=\"button\" className=\"btn-close\" onClick={()=>setSubscribe(false)}>×</button>\n </div>\n <div className=\"modal-body\">\n <form className=\"dz-subscription dzSubscribe\">\n <div className=\"dzSubscribeMsg\"></div>\n <div className=\"input-group mb-3\">\n <input name=\"dzName\" required type=\"text\" className=\"form-control\" placeholder=\"Your Name\" />\n </div>\n <div className=\"input-group mb-3\">\n <input name=\"dzEmail\" required type=\"email\" className=\"form-control\" placeholder=\"Your Email Address\" />\n </div>\n <div className=\"text-center\">\n <button name=\"submit\" type=\"submit\" value=\"Submit\" className=\"btn btn-primary\">SUBSCRIBE NOW </button>\n </div>\n </form>\n </div>\n </div> \n </Modal>\n </>\n );\n};\n\nexport default ComingSoon;","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.6\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2023, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 2, 2023\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionStart(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionstart', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionstart', fireCallBack);\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, transitionStart, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { now } from '../../shared/utils.js';\nexport default function freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}","function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\n\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\n\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\n\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\n\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\n\nexport { isObject, extend, needsNavigation, needsPagination, needsScrollbar, uniqueClasses };","/* underscore in name -> watch for changes */\nconst paramsList = ['modules', 'init', '_direction', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_preloadImages', 'updateOnImagesReady', '_loop', '_loopAdditionalSlides', '_loopedSlides', '_loopedSlidesLimit', '_loopFillGroupWithBlank', 'loopPreventsSlide', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideBlankClass', 'slideActiveClass', 'slideDuplicateActiveClass', 'slideVisibleClass', 'slideDuplicateClass', 'slideNextClass', 'slideDuplicateNextClass', 'slidePrevClass', 'slideDuplicatePrevClass', 'wrapperClass', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren', // modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'lazy', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom'];\nexport { paramsList };","import Swiper from 'swiper';\nexport const calcLoopedSlides = (slides, swiperParams) => {\n let slidesPerViewParams = swiperParams.slidesPerView;\n\n if (swiperParams.breakpoints) {\n const breakpoint = Swiper.prototype.getBreakpoint(swiperParams.breakpoints);\n const breakpointOnlyParams = breakpoint in swiperParams.breakpoints ? swiperParams.breakpoints[breakpoint] : undefined;\n\n if (breakpointOnlyParams && breakpointOnlyParams.slidesPerView) {\n slidesPerViewParams = breakpointOnlyParams.slidesPerView;\n }\n }\n\n let loopedSlides = Math.ceil(parseFloat(swiperParams.loopedSlides || slidesPerViewParams, 10));\n loopedSlides += swiperParams.loopAdditionalSlides;\n\n if (loopedSlides > slides.length && swiperParams.loopedSlidesLimit) {\n loopedSlides = slides.length;\n }\n\n return loopedSlides;\n};","import React from 'react';\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\n\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\n\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nexport { getChildren };","import { isObject, extend } from './utils.js';\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n\n if (mod === 'navigation') {\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n extend(currentParams[key], passedParams[key]);\n } else {\n const newValue = passedParams[key];\n\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('children') && swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (needPaginationInit) {\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n\n if (needScrollbarInit) {\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n\n if (needNavigationInit) {\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n\n swiper.update();\n}\n\nexport { updateSwiper };","import { useEffect, useLayoutEffect } from 'react';\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nexport { useIsomorphicLayoutEffect };","import { createContext, useContext } from 'react';\nexport const SwiperSlideContext = /*#__PURE__*/createContext(null);\nexport const useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nexport const SwiperContext = /*#__PURE__*/createContext(null);\nexport const useSwiper = () => {\n return useContext(SwiperContext);\n};","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, useEffect, forwardRef } from 'react';\nimport SwiperCore from 'swiper';\nimport { getParams } from '../components-shared/get-params.js';\nimport { mountSwiper } from '../components-shared/mount-swiper.js';\nimport { needsScrollbar, needsNavigation, needsPagination, uniqueClasses, extend } from '../components-shared/utils.js';\nimport { renderLoop, calcLoopedSlides } from './loop.js';\nimport { getChangedParams } from '../components-shared/get-changed-params.js';\nimport { getChildren } from './get-children.js';\nimport { updateSwiper } from '../components-shared/update-swiper.js';\nimport { renderVirtual } from './virtual.js';\nimport { updateOnVirtualData } from '../components-shared/update-on-virtual-data.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperContext } from './context.js';\nconst Swiper = /*#__PURE__*/forwardRef(function (_temp, externalElRef) {\n let {\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n\n });\n\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n swiperRef.current = new SwiperCore(swiperParams);\n\n swiperRef.current.loopCreate = () => {};\n\n swiperRef.current.loopDestroy = () => {};\n\n if (swiperParams.loop) {\n swiperRef.current.loopedSlides = calcLoopedSlides(slides, swiperParams);\n }\n\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n\n if (!swiperElRef.current) {\n initSwiper();\n } // Listen for breakpoints change\n\n\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n }); // set initialized flag\n\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n }); // mount swiper\n\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n\n if (!swiperElRef.current) return;\n\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper) onSwiper(swiperRef.current); // eslint-disable-next-line\n\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []); // watch for params change\n\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n\n return () => {\n detachEvents();\n };\n }); // update on virtual update\n\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]); // bypass swiper instance to slides\n\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n\n if (!swiperParams.loop || swiperRef.current && swiperRef.current.destroyed) {\n return slides.map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current\n });\n });\n }\n\n return renderLoop(swiperRef.current, slides, swiperParams);\n }\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: \"swiper-wrapper\"\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\nexport { Swiper };","import Swiper from 'swiper';\nimport { isObject, extend } from './utils.js';\nimport { paramsList } from './params-list.js';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, Swiper.defaults);\n extend(params, Swiper.extendedDefaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nexport { getParams };","import { needsNavigation, needsPagination, needsScrollbar } from './utils.js';\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n\n swiper.init(el);\n}\n\nexport { mountSwiper };","import { paramsList } from './params-list.js';\nimport { isObject } from './utils.js';\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nexport { getChangedParams };","export const updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};","import React from 'react';\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n return slides.filter((child, index) => index >= virtualData.from && index <= virtualData.to).map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style\n });\n });\n}\n\nexport { renderVirtual };","import React from 'react';\nimport { calcLoopedSlides } from '../shared/calc-looped-slides.js';\n\nfunction renderLoop(swiper, slides, swiperParams) {\n const modifiedSlides = slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n 'data-swiper-slide-index': index\n });\n });\n\n function duplicateSlide(child, index, position) {\n return /*#__PURE__*/React.cloneElement(child, {\n key: `${child.key}-duplicate-${index}-${position}`,\n className: `${child.props.className || ''} ${swiperParams.slideDuplicateClass}`\n });\n }\n\n if (swiperParams.loopFillGroupWithBlank) {\n const blankSlidesNum = swiperParams.slidesPerGroup - modifiedSlides.length % swiperParams.slidesPerGroup;\n\n if (blankSlidesNum !== swiperParams.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankSlide = /*#__PURE__*/React.createElement(\"div\", {\n className: `${swiperParams.slideClass} ${swiperParams.slideBlankClass}`\n });\n modifiedSlides.push(blankSlide);\n }\n }\n }\n\n if (swiperParams.slidesPerView === 'auto' && !swiperParams.loopedSlides) {\n swiperParams.loopedSlides = modifiedSlides.length;\n }\n\n const loopedSlides = calcLoopedSlides(modifiedSlides, swiperParams);\n const prependSlides = [];\n const appendSlides = [];\n\n for (let i = 0; i < loopedSlides; i += 1) {\n const index = i - Math.floor(i / modifiedSlides.length) * modifiedSlides.length;\n appendSlides.push(duplicateSlide(modifiedSlides[index], i, 'append'));\n prependSlides.unshift(duplicateSlide(modifiedSlides[modifiedSlides.length - index - 1], i, 'prepend'));\n }\n\n if (swiper) {\n swiper.loopedSlides = loopedSlides;\n }\n\n return [...prependSlides, ...modifiedSlides, ...appendSlides];\n}\n\nexport { calcLoopedSlides, renderLoop };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, forwardRef } from 'react';\nimport { uniqueClasses } from '../components-shared/utils.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperSlideContext } from './context.js';\nconst SwiperSlide = /*#__PURE__*/forwardRef(function (_temp, externalRef) {\n let {\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n virtualIndex,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n\n if (!slideElRef.current || !swiper) {\n return;\n }\n\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n\n return;\n }\n\n swiper.on('_slideClass', updateClasses); // eslint-disable-next-line\n\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-next') >= 0\n };\n\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex\n }, rest), /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, zoom ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren()) : renderChildren()));\n});\nSwiperSlide.displayName = 'SwiperSlide';\nexport { SwiperSlide };","import React, { useRef, useState } from \"react\";\n// Import Swiper React components\nimport { Swiper, SwiperSlide } from \"swiper/react\";\n\n// Import Swiper styles\nimport \"swiper/css\";\nimport \"swiper/css/free-mode\";\nimport \"swiper/css/navigation\";\nimport \"swiper/css/thumbs\";\n\nimport img1 from '../../assets/images/blog/large/pic1.jpg';\nimport img2 from '../../assets/images/blog/large/pic2.jpg';\nimport img3 from '../../assets/images/blog/large/pic3.jpg';\nimport img4 from '../../assets/images/blog/large/pic4.jpg';\nimport img5 from '../../assets/images/blog/large/pic5.jpg';\nimport img6 from '../../assets/images/blog/large/pic6.jpg';\n\n// import required modules\nimport { FreeMode, Navigation, Thumbs } from \"swiper\";\n\nlet swiperFirst = [\n {image: img1},{image: img2},\n {image: img3},{image: img4},\n {image: img5},{image: img6},\n];\n\nexport default function GallerySlider(imgs) {\n const [thumbsSwiper, setThumbsSwiper] = useState(null);\n\n swiperFirst = imgs.imgs;\n\n return (\n <>\n <Swiper \n spaceBetween={10}\n navigation={true}\n autoplay={true}\n thumbs={{swiper: thumbsSwiper && !thumbsSwiper.destroyed ? thumbsSwiper : null}}\n modules={[FreeMode, Navigation, Thumbs]}\n className=\"fundraiser-gallery-swiper text-center\"\n >\n {swiperFirst.map((item, index)=>(\n <SwiperSlide key={index}>\n <SwiperSlide className=\"dz-media\"><img src={item.image} alt=\"\" /></SwiperSlide>\n </SwiperSlide>\n ))}\n </Swiper>\n </>\n );\n}\n","const _excluded = [\"as\", \"disabled\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function isTrivialHref(href) {\n return !href || href.trim() === '#';\n}\nexport function useButtonProps({\n tagName,\n disabled,\n href,\n target,\n rel,\n role,\n onClick,\n tabIndex = 0,\n type\n}) {\n if (!tagName) {\n if (href != null || target != null || rel != null) {\n tagName = 'a';\n } else {\n tagName = 'button';\n }\n }\n const meta = {\n tagName\n };\n if (tagName === 'button') {\n return [{\n type: type || 'button',\n disabled\n }, meta];\n }\n const handleClick = event => {\n if (disabled || tagName === 'a' && isTrivialHref(href)) {\n event.preventDefault();\n }\n if (disabled) {\n event.stopPropagation();\n return;\n }\n onClick == null ? void 0 : onClick(event);\n };\n const handleKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault();\n handleClick(event);\n }\n };\n if (tagName === 'a') {\n // Ensure there's a href so Enter can trigger anchor button.\n href || (href = '#');\n if (disabled) {\n href = undefined;\n }\n }\n return [{\n role: role != null ? role : 'button',\n // explicitly undefined so that it overrides the props disabled in a spread\n // e.g. <Tag {...props} {...hookProps} />\n disabled: undefined,\n tabIndex: disabled ? undefined : tabIndex,\n href,\n target: tagName === 'a' ? target : undefined,\n 'aria-disabled': !disabled ? undefined : disabled,\n rel: tagName === 'a' ? rel : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown\n }, meta];\n}\nconst Button = /*#__PURE__*/React.forwardRef((_ref, ref) => {\n let {\n as: asProp,\n disabled\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n const [buttonProps, {\n tagName: Component\n }] = useButtonProps(Object.assign({\n tagName: asProp,\n disabled\n }, props));\n return /*#__PURE__*/_jsx(Component, Object.assign({}, props, buttonProps, {\n ref: ref\n }));\n});\nButton.displayName = 'Button';\nexport default Button;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useButtonProps } from '@restart/ui/Button';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Button = /*#__PURE__*/React.forwardRef(({\n as,\n bsPrefix,\n variant = 'primary',\n size,\n active = false,\n disabled = false,\n className,\n ...props\n}, ref) => {\n const prefix = useBootstrapPrefix(bsPrefix, 'btn');\n const [buttonProps, {\n tagName\n }] = useButtonProps({\n tagName: as,\n disabled,\n ...props\n });\n const Component = tagName;\n return /*#__PURE__*/_jsx(Component, {\n ...buttonProps,\n ...props,\n ref: ref,\n disabled: disabled,\n className: classNames(className, prefix, active && 'active', variant && `${prefix}-${variant}`, size && `${prefix}-${size}`, props.href && disabled && 'disabled')\n });\n});\nButton.displayName = 'Button';\nexport default Button;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Spinner = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n variant,\n animation = 'border',\n size,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n className,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'spinner');\n const bsSpinnerPrefix = `${bsPrefix}-${animation}`;\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsSpinnerPrefix, size && `${bsSpinnerPrefix}-${size}`, variant && `text-${variant}`)\n });\n});\nSpinner.displayName = 'Spinner';\nexport default Spinner;","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n let {responseType, withXSRFToken} = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let contentType;\n\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if(platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.6.8\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._rawInputValue = '';\n this.history = new InputHistory();\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl('auto');\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl('auto');\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n undo: this._onUndo,\n redo: this._onRedo\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) this.updateValue();\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!this.optionsIsChanged(opts)) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n this.doCommit();\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (inserted === void 0) {\n inserted = '';\n }\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n pad(flags) {\n return this._appendPlaceholder();\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n if (!state) {\n this.reset();\n return;\n }\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.DEFAULTS,\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\n }));\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: 'd{.}`m{.}`Y',\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null || _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.DEFAULTS,\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: enum_,\n ...eopts\n } = opts;\n if (enum_) {\n const lengths = enum_.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = enum_;\n }\n super._update(eopts);\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n // just drop tail\n return new ContinuousTailDetails('', fromPos);\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\n};\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nvar _MaskedNumber;\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.DEFAULTS,\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [_MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IMask from 'imask/esm/imask';\n\nconst MASK_PROPS = {\n // common\n mask: PropTypes.oneOfType([PropTypes.array, PropTypes.func, PropTypes.string, PropTypes.instanceOf(RegExp), PropTypes.oneOf([Date, Number, IMask.Masked]), PropTypes.instanceOf(IMask.Masked)]),\n value: PropTypes.any,\n unmask: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['typed'])]),\n prepare: PropTypes.func,\n prepareChar: PropTypes.func,\n validate: PropTypes.func,\n commit: PropTypes.func,\n overwrite: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['shift'])]),\n eager: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['append', 'remove'])]),\n skipInvalid: PropTypes.bool,\n // events\n onAccept: PropTypes.func,\n onComplete: PropTypes.func,\n // pattern\n placeholderChar: PropTypes.string,\n displayChar: PropTypes.string,\n lazy: PropTypes.bool,\n definitions: PropTypes.object,\n blocks: PropTypes.object,\n // enum\n enum: PropTypes.arrayOf(PropTypes.string),\n // range\n maxLength: PropTypes.number,\n from: PropTypes.number,\n to: PropTypes.number,\n // date\n pattern: PropTypes.string,\n format: PropTypes.func,\n parse: PropTypes.func,\n autofix: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['pad'])]),\n // number\n radix: PropTypes.string,\n thousandsSeparator: PropTypes.string,\n mapToRadix: PropTypes.arrayOf(PropTypes.string),\n scale: PropTypes.number,\n normalizeZeros: PropTypes.bool,\n padFractionalZeros: PropTypes.bool,\n min: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n max: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n // dynamic\n dispatch: PropTypes.func,\n // ref\n inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n current: PropTypes.object\n })])\n};\nconst MASK_PROPS_NAMES = Object.keys(MASK_PROPS).filter(p => p !== 'value');\nconst NON_MASK_OPTIONS_NAMES = ['value', 'unmask', 'onAccept', 'onComplete', 'inputRef'];\nconst MASK_OPTIONS_NAMES = MASK_PROPS_NAMES.filter(pName => NON_MASK_OPTIONS_NAMES.indexOf(pName) < 0);\nfunction IMaskMixin(ComposedComponent) {\n var _Class;\n const MaskedComponent = (_Class = class MaskedComponent extends React.Component {\n constructor(props) {\n super(props);\n this._inputRef = this._inputRef.bind(this);\n }\n componentDidMount() {\n if (!this.props.mask) return;\n this.initMask();\n }\n componentDidUpdate() {\n const props = this.props;\n const maskOptions = this._extractMaskOptionsFromProps(props);\n if (maskOptions.mask) {\n if (this.maskRef) {\n this.maskRef.updateOptions(maskOptions); // TODO fix\n if ('value' in props && props.value !== undefined) this.maskValue = props.value;\n } else {\n this.initMask(maskOptions);\n }\n } else {\n this.destroyMask();\n if ('value' in props && props.value !== undefined) {\n var _this$element;\n if ((_this$element = this.element) != null && _this$element.isContentEditable && this.element.tagName !== 'INPUT' && this.element.tagName !== 'TEXTAREA') this.element.textContent = props.value;else this.element.value = props.value;\n }\n }\n }\n componentWillUnmount() {\n this.destroyMask();\n }\n _inputRef(el) {\n this.element = el;\n if (this.props.inputRef) {\n if (Object.prototype.hasOwnProperty.call(this.props.inputRef, 'current')) this.props.inputRef.current = el;else this.props.inputRef(el);\n }\n }\n initMask(maskOptions) {\n if (maskOptions === void 0) {\n maskOptions = this._extractMaskOptionsFromProps(this.props);\n }\n this.maskRef = IMask(this.element, maskOptions).on('accept', this._onAccept.bind(this)).on('complete', this._onComplete.bind(this));\n if ('value' in this.props && this.props.value !== undefined) this.maskValue = this.props.value;\n }\n destroyMask() {\n if (this.maskRef) {\n this.maskRef.destroy();\n delete this.maskRef;\n }\n }\n _extractMaskOptionsFromProps(props) {\n const {\n ...cloneProps\n } = props;\n\n // keep only mask options\n Object.keys(cloneProps).filter(prop => MASK_OPTIONS_NAMES.indexOf(prop) < 0).forEach(nonMaskProp => {\n delete cloneProps[nonMaskProp];\n });\n return cloneProps;\n }\n _extractNonMaskProps(props) {\n const {\n ...cloneProps\n } = props;\n MASK_PROPS_NAMES.forEach(maskProp => {\n if (maskProp !== 'maxLength') delete cloneProps[maskProp];\n });\n if (!('defaultValue' in cloneProps)) cloneProps.defaultValue = props.mask ? '' : cloneProps.value;\n delete cloneProps.value;\n return cloneProps;\n }\n get maskValue() {\n if (!this.maskRef) return '';\n if (this.props.unmask === 'typed') return this.maskRef.typedValue;\n if (this.props.unmask) return this.maskRef.unmaskedValue;\n return this.maskRef.value;\n }\n set maskValue(value) {\n if (!this.maskRef) return;\n value = value == null && this.props.unmask !== 'typed' ? '' : value;\n if (this.props.unmask === 'typed') this.maskRef.typedValue = value;else if (this.props.unmask) this.maskRef.unmaskedValue = value;else this.maskRef.value = value;\n }\n _onAccept(e) {\n if (this.props.onAccept && this.maskRef) this.props.onAccept(this.maskValue, this.maskRef, e);\n }\n _onComplete(e) {\n if (this.props.onComplete && this.maskRef) this.props.onComplete(this.maskValue, this.maskRef, e);\n }\n render() {\n return React.createElement(ComposedComponent, {\n ...this._extractNonMaskProps(this.props),\n inputRef: this._inputRef\n });\n }\n }, _Class.displayName = void 0, _Class.propTypes = void 0, _Class);\n const nestedComponentName = ComposedComponent.displayName || ComposedComponent.name || 'Component';\n MaskedComponent.displayName = \"IMask(\" + nestedComponentName + \")\";\n MaskedComponent.propTypes = MASK_PROPS;\n return React.forwardRef((props, ref) => React.createElement(MaskedComponent, {\n ...props,\n ref\n }));\n}\n\nexport { IMaskMixin as default };\n","import React from 'react';\nimport IMaskMixin from './mixin.js';\nimport 'prop-types';\nimport 'imask/esm/imask';\n\nconst IMaskInputClass = IMaskMixin(_ref => {\n let {\n inputRef,\n ...props\n } = _ref;\n return React.createElement('input', {\n ...props,\n ref: inputRef\n });\n});\nconst IMaskInputFn = (props, ref) => React.createElement(IMaskInputClass, {\n ...props,\n ref\n}) // TODO fix no idea\n;\nconst IMaskInput = React.forwardRef(IMaskInputFn);\n\nexport { IMaskInput as default };\n","var _excluded = [\"sitekey\", \"onChange\", \"theme\", \"type\", \"tabindex\", \"onExpired\", \"onErrored\", \"size\", \"stoken\", \"grecaptcha\", \"badge\", \"hl\", \"isolated\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nimport * as React from \"react\";\nimport PropTypes from \"prop-types\";\nvar ReCAPTCHA = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ReCAPTCHA, _React$Component);\n function ReCAPTCHA() {\n var _this;\n _this = _React$Component.call(this) || this;\n _this.handleExpired = _this.handleExpired.bind(_assertThisInitialized(_this));\n _this.handleErrored = _this.handleErrored.bind(_assertThisInitialized(_this));\n _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _this.handleRecaptchaRef = _this.handleRecaptchaRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n var _proto = ReCAPTCHA.prototype;\n _proto.getCaptchaFunction = function getCaptchaFunction(fnName) {\n if (this.props.grecaptcha) {\n if (this.props.grecaptcha.enterprise) {\n return this.props.grecaptcha.enterprise[fnName];\n }\n return this.props.grecaptcha[fnName];\n }\n return null;\n };\n _proto.getValue = function getValue() {\n var getResponse = this.getCaptchaFunction(\"getResponse\");\n if (getResponse && this._widgetId !== undefined) {\n return getResponse(this._widgetId);\n }\n return null;\n };\n _proto.getWidgetId = function getWidgetId() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this._widgetId;\n }\n return null;\n };\n _proto.execute = function execute() {\n var execute = this.getCaptchaFunction(\"execute\");\n if (execute && this._widgetId !== undefined) {\n return execute(this._widgetId);\n } else {\n this._executeRequested = true;\n }\n };\n _proto.executeAsync = function executeAsync() {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n _this2.executionResolve = resolve;\n _this2.executionReject = reject;\n _this2.execute();\n });\n };\n _proto.reset = function reset() {\n var resetter = this.getCaptchaFunction(\"reset\");\n if (resetter && this._widgetId !== undefined) {\n resetter(this._widgetId);\n }\n };\n _proto.forceReset = function forceReset() {\n var resetter = this.getCaptchaFunction(\"reset\");\n if (resetter) {\n resetter();\n }\n };\n _proto.handleExpired = function handleExpired() {\n if (this.props.onExpired) {\n this.props.onExpired();\n } else {\n this.handleChange(null);\n }\n };\n _proto.handleErrored = function handleErrored() {\n if (this.props.onErrored) {\n this.props.onErrored();\n }\n if (this.executionReject) {\n this.executionReject();\n delete this.executionResolve;\n delete this.executionReject;\n }\n };\n _proto.handleChange = function handleChange(token) {\n if (this.props.onChange) {\n this.props.onChange(token);\n }\n if (this.executionResolve) {\n this.executionResolve(token);\n delete this.executionReject;\n delete this.executionResolve;\n }\n };\n _proto.explicitRender = function explicitRender() {\n var render = this.getCaptchaFunction(\"render\");\n if (render && this._widgetId === undefined) {\n var wrapper = document.createElement(\"div\");\n this._widgetId = render(wrapper, {\n sitekey: this.props.sitekey,\n callback: this.handleChange,\n theme: this.props.theme,\n type: this.props.type,\n tabindex: this.props.tabindex,\n \"expired-callback\": this.handleExpired,\n \"error-callback\": this.handleErrored,\n size: this.props.size,\n stoken: this.props.stoken,\n hl: this.props.hl,\n badge: this.props.badge,\n isolated: this.props.isolated\n });\n this.captcha.appendChild(wrapper);\n }\n if (this._executeRequested && this.props.grecaptcha && this._widgetId !== undefined) {\n this._executeRequested = false;\n this.execute();\n }\n };\n _proto.componentDidMount = function componentDidMount() {\n this.explicitRender();\n };\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.explicitRender();\n };\n _proto.handleRecaptchaRef = function handleRecaptchaRef(elem) {\n this.captcha = elem;\n };\n _proto.render = function render() {\n // consume properties owned by the reCATPCHA, pass the rest to the div so the user can style it.\n /* eslint-disable no-unused-vars */\n var _this$props = this.props,\n sitekey = _this$props.sitekey,\n onChange = _this$props.onChange,\n theme = _this$props.theme,\n type = _this$props.type,\n tabindex = _this$props.tabindex,\n onExpired = _this$props.onExpired,\n onErrored = _this$props.onErrored,\n size = _this$props.size,\n stoken = _this$props.stoken,\n grecaptcha = _this$props.grecaptcha,\n badge = _this$props.badge,\n hl = _this$props.hl,\n isolated = _this$props.isolated,\n childProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n /* eslint-enable no-unused-vars */\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, childProps, {\n ref: this.handleRecaptchaRef\n }));\n };\n return ReCAPTCHA;\n}(React.Component);\nexport { ReCAPTCHA as default };\nReCAPTCHA.displayName = \"ReCAPTCHA\";\nReCAPTCHA.propTypes = {\n sitekey: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n grecaptcha: PropTypes.object,\n theme: PropTypes.oneOf([\"dark\", \"light\"]),\n type: PropTypes.oneOf([\"image\", \"audio\"]),\n tabindex: PropTypes.number,\n onExpired: PropTypes.func,\n onErrored: PropTypes.func,\n size: PropTypes.oneOf([\"compact\", \"normal\", \"invisible\"]),\n stoken: PropTypes.string,\n hl: PropTypes.string,\n badge: PropTypes.oneOf([\"bottomright\", \"bottomleft\", \"inline\"]),\n isolated: PropTypes.bool\n};\nReCAPTCHA.defaultProps = {\n onChange: function onChange() {},\n theme: \"light\",\n type: \"image\",\n tabindex: 0,\n size: \"normal\",\n badge: \"bottomright\"\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nimport { Component, createElement, forwardRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nvar SCRIPT_MAP = {}; // A counter used to generate a unique id for each component that uses the function\n\nvar idCount = 0;\nexport default function makeAsyncScript(getScriptURL, options) {\n options = options || {};\n return function wrapWithAsyncScript(WrappedComponent) {\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n\n var AsyncScriptLoader =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(AsyncScriptLoader, _Component);\n\n function AsyncScriptLoader(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this.state = {};\n _this.__scriptURL = \"\";\n return _this;\n }\n\n var _proto = AsyncScriptLoader.prototype;\n\n _proto.asyncScriptLoaderGetScriptLoaderID = function asyncScriptLoaderGetScriptLoaderID() {\n if (!this.__scriptLoaderID) {\n this.__scriptLoaderID = \"async-script-loader-\" + idCount++;\n }\n\n return this.__scriptLoaderID;\n };\n\n _proto.setupScriptURL = function setupScriptURL() {\n this.__scriptURL = typeof getScriptURL === \"function\" ? getScriptURL() : getScriptURL;\n return this.__scriptURL;\n };\n\n _proto.asyncScriptLoaderHandleLoad = function asyncScriptLoaderHandleLoad(state) {\n var _this2 = this;\n\n // use reacts setState callback to fire props.asyncScriptOnLoad with new state/entry\n this.setState(state, function () {\n return _this2.props.asyncScriptOnLoad && _this2.props.asyncScriptOnLoad(_this2.state);\n });\n };\n\n _proto.asyncScriptLoaderTriggerOnScriptLoaded = function asyncScriptLoaderTriggerOnScriptLoaded() {\n var mapEntry = SCRIPT_MAP[this.__scriptURL];\n\n if (!mapEntry || !mapEntry.loaded) {\n throw new Error(\"Script is not loaded.\");\n }\n\n for (var obsKey in mapEntry.observers) {\n mapEntry.observers[obsKey](mapEntry);\n }\n\n delete window[options.callbackName];\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this3 = this;\n\n var scriptURL = this.setupScriptURL();\n var key = this.asyncScriptLoaderGetScriptLoaderID();\n var _options = options,\n globalName = _options.globalName,\n callbackName = _options.callbackName,\n scriptId = _options.scriptId; // check if global object already attached to window\n\n if (globalName && typeof window[globalName] !== \"undefined\") {\n SCRIPT_MAP[scriptURL] = {\n loaded: true,\n observers: {}\n };\n } // check if script loading already\n\n\n if (SCRIPT_MAP[scriptURL]) {\n var entry = SCRIPT_MAP[scriptURL]; // if loaded or errored then \"finish\"\n\n if (entry && (entry.loaded || entry.errored)) {\n this.asyncScriptLoaderHandleLoad(entry);\n return;\n } // if still loading then callback to observer queue\n\n\n entry.observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n return;\n }\n /*\n * hasn't started loading\n * start the \"magic\"\n * setup script to load and observers\n */\n\n\n var observers = {};\n\n observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n SCRIPT_MAP[scriptURL] = {\n loaded: false,\n observers: observers\n };\n var script = document.createElement(\"script\");\n script.src = scriptURL;\n script.async = true;\n\n for (var attribute in options.attributes) {\n script.setAttribute(attribute, options.attributes[attribute]);\n }\n\n if (scriptId) {\n script.id = scriptId;\n }\n\n var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(func) {\n if (SCRIPT_MAP[scriptURL]) {\n var mapEntry = SCRIPT_MAP[scriptURL];\n var observersMap = mapEntry.observers;\n\n for (var obsKey in observersMap) {\n if (func(observersMap[obsKey])) {\n delete observersMap[obsKey];\n }\n }\n }\n };\n\n if (callbackName && typeof window !== \"undefined\") {\n window[callbackName] = function () {\n return _this3.asyncScriptLoaderTriggerOnScriptLoaded();\n };\n }\n\n script.onload = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.loaded = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n if (callbackName) {\n return false;\n }\n\n observer(mapEntry);\n return true;\n });\n }\n };\n\n script.onerror = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.errored = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n observer(mapEntry);\n return true;\n });\n }\n };\n\n document.body.appendChild(script);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Remove tag script\n var scriptURL = this.__scriptURL;\n\n if (options.removeOnUnmount === true) {\n var allScripts = document.getElementsByTagName(\"script\");\n\n for (var i = 0; i < allScripts.length; i += 1) {\n if (allScripts[i].src.indexOf(scriptURL) > -1) {\n if (allScripts[i].parentNode) {\n allScripts[i].parentNode.removeChild(allScripts[i]);\n }\n }\n }\n } // Clean the observer entry\n\n\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()];\n\n if (options.removeOnUnmount === true) {\n delete SCRIPT_MAP[scriptURL];\n }\n }\n };\n\n _proto.render = function render() {\n var globalName = options.globalName; // remove asyncScriptOnLoad from childProps\n\n var _this$props = this.props,\n asyncScriptOnLoad = _this$props.asyncScriptOnLoad,\n forwardedRef = _this$props.forwardedRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"asyncScriptOnLoad\", \"forwardedRef\"]); // eslint-disable-line no-unused-vars\n\n\n if (globalName && typeof window !== \"undefined\") {\n childProps[globalName] = typeof window[globalName] !== \"undefined\" ? window[globalName] : undefined;\n }\n\n childProps.ref = forwardedRef;\n return createElement(WrappedComponent, childProps);\n };\n\n return AsyncScriptLoader;\n }(Component); // Note the second param \"ref\" provided by React.forwardRef.\n // We can pass it along to AsyncScriptLoader as a regular prop, e.g. \"forwardedRef\"\n // And it can then be attached to the Component.\n\n\n var ForwardedComponent = forwardRef(function (props, ref) {\n return createElement(AsyncScriptLoader, _extends({}, props, {\n forwardedRef: ref\n }));\n });\n ForwardedComponent.displayName = \"AsyncScriptLoader(\" + wrappedComponentName + \")\";\n ForwardedComponent.propTypes = {\n asyncScriptOnLoad: PropTypes.func\n };\n return hoistStatics(ForwardedComponent, WrappedComponent);\n };\n}","import ReCAPTCHA from \"./recaptcha\";\nimport makeAsyncScriptLoader from \"react-async-script\";\nvar callbackName = \"onloadcallback\";\nvar globalName = \"grecaptcha\";\nfunction getOptions() {\n return typeof window !== \"undefined\" && window.recaptchaOptions || {};\n}\nfunction getURL() {\n var dynamicOptions = getOptions();\n var hostname = dynamicOptions.useRecaptchaNet ? \"recaptcha.net\" : \"www.google.com\";\n if (dynamicOptions.enterprise) {\n return \"https://\" + hostname + \"/recaptcha/enterprise.js?onload=\" + callbackName + \"&render=explicit\";\n }\n return \"https://\" + hostname + \"/recaptcha/api.js?onload=\" + callbackName + \"&render=explicit\";\n}\nexport default makeAsyncScriptLoader(getURL, {\n callbackName: callbackName,\n globalName: globalName,\n attributes: getOptions().nonce ? {\n nonce: getOptions().nonce\n } : {}\n})(ReCAPTCHA);","import RecaptchaWrapper from \"./recaptcha-wrapper\";\nimport ReCAPTCHA from \"./recaptcha\";\nexport default RecaptchaWrapper;\nexport { ReCAPTCHA };","import * as cookie from 'cookie';\nexport function hasDocumentCookie() {\n const testingValue = typeof global === 'undefined'\n ? undefined\n : global.TEST_HAS_DOCUMENT_COOKIE;\n if (typeof testingValue === 'boolean') {\n return testingValue;\n }\n // Can we get/set cookies on document.cookie?\n return typeof document === 'object' && typeof document.cookie === 'string';\n}\nexport function cleanCookies() {\n document.cookie.split(';').forEach(function (c) {\n document.cookie = c\n .replace(/^ +/, '')\n .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');\n });\n}\nexport function parseCookies(cookies) {\n if (typeof cookies === 'string') {\n return cookie.parse(cookies);\n }\n else if (typeof cookies === 'object' && cookies !== null) {\n return cookies;\n }\n else {\n return {};\n }\n}\nexport function readCookie(value, options = {}) {\n const cleanValue = cleanupCookieValue(value);\n if (!options.doNotParse) {\n try {\n return JSON.parse(cleanValue);\n }\n catch (e) {\n // At least we tried\n }\n }\n // Ignore clean value if we failed the deserialization\n // It is not relevant anymore to trim those values\n return value;\n}\nfunction cleanupCookieValue(value) {\n // express prepend j: before serializing a cookie\n if (value && value[0] === 'j' && value[1] === ':') {\n return value.substr(2);\n }\n return value;\n}\n","import Cookies from './Cookies';\nexport default Cookies;\nexport * from './types';\n","import * as cookie from 'cookie';\nimport { hasDocumentCookie, parseCookies, readCookie } from './utils';\nexport default class Cookies {\n constructor(cookies, defaultSetOptions = {}) {\n this.changeListeners = [];\n this.HAS_DOCUMENT_COOKIE = false;\n this.update = () => {\n if (!this.HAS_DOCUMENT_COOKIE) {\n return;\n }\n const previousCookies = this.cookies;\n this.cookies = cookie.parse(document.cookie);\n this._checkChanges(previousCookies);\n };\n const domCookies = typeof document === 'undefined' ? '' : document.cookie;\n this.cookies = parseCookies(cookies || domCookies);\n this.defaultSetOptions = defaultSetOptions;\n this.HAS_DOCUMENT_COOKIE = hasDocumentCookie();\n }\n _emitChange(params) {\n for (let i = 0; i < this.changeListeners.length; ++i) {\n this.changeListeners[i](params);\n }\n }\n _checkChanges(previousCookies) {\n const names = new Set(Object.keys(previousCookies).concat(Object.keys(this.cookies)));\n names.forEach((name) => {\n if (previousCookies[name] !== this.cookies[name]) {\n this._emitChange({\n name,\n value: readCookie(this.cookies[name]),\n });\n }\n });\n }\n _startPolling() {\n this.pollingInterval = setInterval(this.update, 300);\n }\n _stopPolling() {\n if (this.pollingInterval) {\n clearInterval(this.pollingInterval);\n }\n }\n get(name, options = {}) {\n if (!options.doNotUpdate) {\n this.update();\n }\n return readCookie(this.cookies[name], options);\n }\n getAll(options = {}) {\n if (!options.doNotUpdate) {\n this.update();\n }\n const result = {};\n for (let name in this.cookies) {\n result[name] = readCookie(this.cookies[name], options);\n }\n return result;\n }\n set(name, value, options) {\n if (options) {\n options = Object.assign(Object.assign({}, this.defaultSetOptions), options);\n }\n else {\n options = this.defaultSetOptions;\n }\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\n this.cookies = Object.assign(Object.assign({}, this.cookies), { [name]: stringValue });\n if (this.HAS_DOCUMENT_COOKIE) {\n document.cookie = cookie.serialize(name, stringValue, options);\n }\n this._emitChange({ name, value, options });\n }\n remove(name, options) {\n const finalOptions = (options = Object.assign(Object.assign(Object.assign({}, this.defaultSetOptions), options), { expires: new Date(1970, 1, 1, 0, 0, 1), maxAge: 0 }));\n this.cookies = Object.assign({}, this.cookies);\n delete this.cookies[name];\n if (this.HAS_DOCUMENT_COOKIE) {\n document.cookie = cookie.serialize(name, '', finalOptions);\n }\n this._emitChange({ name, value: undefined, options });\n }\n addChangeListener(callback) {\n this.changeListeners.push(callback);\n if (this.HAS_DOCUMENT_COOKIE && this.changeListeners.length === 1) {\n if (typeof window === 'object' && 'cookieStore' in window) {\n window.cookieStore.addEventListener('change', this.update);\n }\n else {\n this._startPolling();\n }\n }\n }\n removeChangeListener(callback) {\n const idx = this.changeListeners.indexOf(callback);\n if (idx >= 0) {\n this.changeListeners.splice(idx, 1);\n }\n if (this.HAS_DOCUMENT_COOKIE && this.changeListeners.length === 0) {\n if (typeof window === 'object' && 'cookieStore' in window) {\n window.cookieStore.removeEventListener('change', this.update);\n }\n else {\n this._stopPolling();\n }\n }\n }\n}\n","import Cookies from 'universal-cookie';\nexport default Cookies;\n","import * as React from 'react';\nimport Cookies from './Cookies';\nconst CookiesContext = React.createContext(new Cookies());\nexport const { Provider, Consumer } = CookiesContext;\nexport default CookiesContext;\n","import { useContext, useLayoutEffect, useState, useMemo } from 'react';\nimport CookiesContext from './CookiesContext';\nimport { isInBrowser } from './utils';\nexport default function useCookies(dependencies) {\n const cookies = useContext(CookiesContext);\n if (!cookies) {\n throw new Error('Missing <CookiesProvider>');\n }\n const [allCookies, setCookies] = useState(() => cookies.getAll());\n if (isInBrowser()) {\n useLayoutEffect(() => {\n function onChange() {\n const newCookies = cookies.getAll({\n doNotUpdate: true,\n });\n if (shouldUpdate(dependencies || null, newCookies, allCookies)) {\n setCookies(newCookies);\n }\n }\n cookies.addChangeListener(onChange);\n return () => {\n cookies.removeChangeListener(onChange);\n };\n }, [cookies, allCookies]);\n }\n const setCookie = useMemo(() => cookies.set.bind(cookies), [cookies]);\n const removeCookie = useMemo(() => cookies.remove.bind(cookies), [cookies]);\n const updateCookies = useMemo(() => cookies.update.bind(cookies), [cookies]);\n return [allCookies, setCookie, removeCookie, updateCookies];\n}\nfunction shouldUpdate(dependencies, newCookies, oldCookies) {\n if (!dependencies) {\n return true;\n }\n for (let dependency of dependencies) {\n if (newCookies[dependency] !== oldCookies[dependency]) {\n return true;\n }\n }\n return false;\n}\n","export function isInBrowser() {\n return (typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined');\n}\n","import React, {useState, forwardRef, useImperativeHandle, useRef, useEffect} from 'react';\nimport {useNavigate} from 'react-router-dom';\nimport {Button, Modal, Overlay, Spinner, Tooltip} from 'react-bootstrap';\n\nimport {useCallback} from 'react';\nimport axios from \"axios\";\nimport {formatNumber} from \"chart.js/helpers\";\nimport {CopyToClipboard} from \"react-copy-to-clipboard/src\"; // Import at the top of your file\nimport {IMaskInput} from 'react-imask';\nimport ReCAPTCHA from \"react-google-recaptcha\";\nimport * as Sentry from \"@sentry/react\";\n\nimport {useCookies} from \"react-cookie\";\n\nconst {REACT_APP_STAGE} = process.env;\n\nconst DoacaoSorteioModal = forwardRef((props, ref) => {\n\n const [donateModal, setDonateModal] = useState(false);\n const [displayError, setDisplayError] = useState(false);\n const [displayErrorMessage, setDisplayErrorMessage] = useState(\"\");\n\n const [show, setShow] = useState(false);\n const target = useRef(null);\n\n const [totalRaffle, setTotalRaffleValor] = useState(1);\n\n const [paymentMethod, setPaymentMethod] = useState(2);\n\n const [qrCodeBase64, setQrCodeBase64] = useState(\"\");\n const [valor, setValor] = useState();\n const [pixCopyPaste, setPixCopyPaste] = useState(\"\");\n const [donationCod, setDonationCod] = useState(\"\");\n\n const [showCopy, setShowCopy] = useState(false);\n\n const [cpf_cnpj, setCpfCnpj] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [emailError, setEmailError] = useState(false);\n\n const [name, setName] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n\n const [promoter] = useCookies(['promoter']);\n\n const filterName = (e) => {\n // Remove special characters, but keep accents\n const value = e.target.value.normalize();\n\n // \" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"\n //\n const sanitized = value.replace(/[^\\w\\s]/gi, '');\n }\n\n const setPhoneInput = (e) => {\n setPhone(e.target.value)\n }\n\n const [zipcode, setZipcode] = useState(\"\");\n\n const [address, setAddress] = useState(\"\");\n const [district, setDistrict] = useState(\"\");\n const [city, setCity] = useState(\"\");\n const [state, setState] = useState(\"\");\n\n const [terms, setTerms] = useState(false);\n const [termsError, setTermsError] = useState(false);\n\n const [zipcodeError, setZipcodeError] = useState(false);\n const [phoneError, setPhonecodeError] = useState(false);\n\n const [numbers, setNumbers] = useState([]);\n\n const numbersTags = numbers.map((number) => {\n return (\n <span className=\"badge bg-secondary m-1\">{number}</span>\n )\n });\n\n const recaptchaRef = React.createRef();\n\n const [consultPaymentTime, setStartConsultPaymentTime] = useState();\n\n useEffect(() => {\n let interval;\n\n interval = setInterval(() => {\n // If page is 2 or consultPaymentTime is less 5 minutes, stop interval\n if (page === 2 && (new Date().getTime() - consultPaymentTime) < 300000) {\n consultPayment();\n }\n }, 5000);\n\n return () => {\n clearInterval(interval);\n }\n });\n\n const consultPayment = function () {\n const data = {\n \"Document\": cpf_cnpj.replace(/\\D/g, ''),\n \"Email\": email,\n \"DonationCod\": donationCod,\n \"g-recaptcha-response\": '',\n \"CauseCod\": 7,\n }\n\n axios.post(`https://${REACT_APP_STAGE}.ajudeumacausa.com.br/v1/raffle/GetMyRaffle`, data)\n .then(res => {\n\n setNumbers(res.data.Details.map((number) => {\n return number.Number;\n }));\n\n setPage(3);\n\n }).catch((error) => {\n })\n }\n\n\n // Run a function every 5 seconds, stop after first successful request or after 5 minutes\n\n const consultZipCode = function (zipcode) {\n setZipcode(zipcode);\n\n if (zipcode.length === 9) {\n axios.get('https://viacep.com.br/ws/' + zipcode + '/json/')\n .then(response => {\n if (response.data.erro) {\n setZipcodeError(true);\n return;\n }\n\n setZipcodeError(false)\n\n if (response.data.logradouro === \"\") {\n setAddress(\"Sem endereço\");\n } else {\n setAddress(response.data.logradouro);\n }\n\n if (response.data.bairro === \"\") {\n setDistrict(\"Sem bairro\");\n } else {\n setDistrict(response.data.bairro);\n }\n\n setCity(response.data.localidade);\n setState(response.data.uf);\n }).catch(err => {\n setZipcodeError(true);\n return;\n });\n }\n }\n\n // Validar e-mail\n const validateEmail = (email) => {\n return String(email)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|.(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n );\n };\n\n // Validar CPF ou CNPJ\n const validateCpfCnpj = (value) => {\n const cpfCnpj = value.replace(/\\D/g, '');\n\n if (cpfCnpj.length === 11) {\n return validateCpf(cpfCnpj);\n } else if (cpfCnpj.length === 14) {\n return validateCnpj(cpfCnpj);\n } else if (cpfCnpj.length < 11) {\n return true;\n } else {\n return false;\n }\n }\n\n function validateCnpj(cnpj) {\n\n cnpj = cnpj.replace(/[^\\d]+/g, '');\n\n if (!cnpj || cnpj.length != 14\n || cnpj == \"00000000000000\"\n || cnpj == \"11111111111111\"\n || cnpj == \"22222222222222\"\n || cnpj == \"33333333333333\"\n || cnpj == \"44444444444444\"\n || cnpj == \"55555555555555\"\n || cnpj == \"66666666666666\"\n || cnpj == \"77777777777777\"\n || cnpj == \"88888888888888\"\n || cnpj == \"99999999999999\")\n return false\n var tamanho = cnpj.length - 2\n var numeros = cnpj.substring(0, tamanho)\n var digitos = cnpj.substring(tamanho)\n var soma = 0\n var pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(0)) return false;\n tamanho = tamanho + 1\n numeros = cnpj.substring(0, tamanho)\n soma = 0\n pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(1)) return false\n return true;\n }\n\n function validateCpf(cpf) {\n cpf = cpf.replace(/[^\\d]+/g, '');\n if (cpf == '') return false;\n // Elimina CPFs invalidos conhecidos\n if (cpf.length != 11 ||\n cpf == \"00000000000\" ||\n cpf == \"11111111111\" ||\n cpf == \"22222222222\" ||\n cpf == \"33333333333\" ||\n cpf == \"44444444444\" ||\n cpf == \"55555555555\" ||\n cpf == \"66666666666\" ||\n cpf == \"77777777777\" ||\n cpf == \"88888888888\" ||\n cpf == \"99999999999\")\n return false;\n // Valida 1o digito\n let add = 0;\n for (let i = 0; i < 9; i++)\n add += parseInt(cpf.charAt(i)) * (10 - i);\n let rev = 11 - (add % 11);\n if (rev == 10 || rev == 11)\n rev = 0;\n if (rev != parseInt(cpf.charAt(9)))\n return false;\n // Valida 2o digito\n add = 0;\n for (let i = 0; i < 10; i++)\n add += parseInt(cpf.charAt(i)) * (11 - i);\n rev = 11 - (add % 11);\n if (rev == 10 || rev == 11)\n rev = 0;\n if (rev != parseInt(cpf.charAt(10)))\n return false;\n return true;\n }\n\n const [page, setPage] = useState(1);\n\n const [botaoPagar, setBotaoPagar] = useState(false);\n\n const paymentMethodClass = (paymentMethodElement) => {\n if (paymentMethod === paymentMethodElement) {\n return \"btn btn-primary\";\n } else {\n return \"btn btn-light\";\n }\n }\n\n const setShowToolTip = useCallback(() => {\n setShow(true);\n setTimeout(() => {\n setShow(false);\n }, 1000);\n });\n\n const copyPix = () => {\n navigator.clipboard.writeText(pixCopyPaste);\n }\n\n const limiteNumeros = 100;\n\n const handleNumerosChange = (e) => {\n // If value is not a number, set it to 1\n if (e.target.value === 0 || e.target.value === \"0\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (isNaN(e.target.value) || e.target.value === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n // filter out non-digit characters\n const sanitized = e.target.value.replace(/\\D/g, '');\n // remove leading zeros\n const value = parseInt(sanitized, 10);\n\n if (value > limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n setTotalRaffleValor(value);\n };\n\n const incrementNumeros = (quantity) => {\n if (totalRaffle >= limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n\n if (totalRaffle === 0) {\n setTotalRaffleValor(1);\n return;\n }\n\n // solve NaN issue\n if (isNaN(totalRaffle)) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle + quantity > limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n\n setTotalRaffleValor(prevNumeros => prevNumeros + quantity);\n };\n\n const decrementNumeros = (quantity = 1) => {\n if (totalRaffle === 0) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (isNaN(totalRaffle)) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle - quantity < 1) {\n setTotalRaffleValor(1);\n return;\n }\n\n setTotalRaffleValor(prevNumeros => prevNumeros > 1 ? prevNumeros - quantity : 1);\n };\n\n useImperativeHandle(ref, () => ({\n handleModalOpen() {\n setDonateModal(true);\n if (page === 3) {\n setPage(1);\n }\n\n if (page === 2) {\n setStartConsultPaymentTime(new Date().getTime());\n }\n }\n }));\n\n function handleModalClose() {\n setDonateModal(false);\n }\n\n const nav = useNavigate();\n\n // submit form using axios\n\n const FormSubmit = (e) => {\n\n e.preventDefault();\n\n if (!validateEmail(email)) {\n setEmailError(true);\n return;\n }\n\n if (!terms) {\n setTermsError(true);\n return;\n }\n\n const transaction = Sentry.startTransaction({name: \"raffle-buyraffle\"});\n\n const data = {\n \"Document\": cpf_cnpj.replace(/\\D/g, ''),\n \"Email\": email,\n \"Name\": name,\n \"Telephone\": phone,\n \"Zipcode\": zipcode.replace('-', ''),\n \"PaymentMethod\": paymentMethod,\n \"TotalRaffle\": totalRaffle,\n \"PayAdministrativeFees\": false,\n \"TermsAndConditions\": terms,\n \"Address\": address,\n \"District\": district,\n \"City\": city,\n \"State\": state,\n 'grecaptcharesponse': '',\n 'PromoterName': promoter.promoterName,\n 'PromoterId': promoter.promoterId,\n 'CauseCod': 7,\n }\n setBotaoPagar(true);\n\n const span = transaction.startChild({op: \"axios-post\"}); // This function returns a Span\n axios.post(`https://${REACT_APP_STAGE}.ajudeumacausa.com.br/v1/raffle/BuyRaffle`, data)\n .then(response => {\n\n if (response.data.ErroGeneric) {\n setDisplayError(true);\n setDisplayErrorMessage(response.data.ErroGeneric);\n\n setTimeout(() => {\n setDisplayError(false);\n setDisplayErrorMessage(\"\");\n }, 5000);\n return;\n }\n\n setValor(response.data.Value);\n setQrCodeBase64(response.data.QrCodeBase64);\n setPixCopyPaste(response.data.PixCopyPaste);\n setDonationCod(response.data.DonationCod);\n\n setPage(2);\n\n setStartConsultPaymentTime(new Date().getTime());\n\n }).finally(() => {\n setBotaoPagar(false);\n }).catch(err => {\n setDisplayError(true);\n setDisplayErrorMessage(\"Erro ao gerar Pix, tente novamente.\");\n\n setTimeout(() => {\n setDisplayError(false);\n setDisplayErrorMessage(\"\");\n }, 5000);\n }).finally(() => {\n span.finish();\n transaction.finish();\n });\n }\n\n return (\n <Modal className=\"fade modal-wrapper\" id=\"modalDonate\" show={donateModal} onHide={setDonateModal}\n backdrop=\"static\" centered>\n <div className=\"modal-content\">\n <div className={page === 1 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Participe do sorteio</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <form onSubmit={(e) => FormSubmit(e)}>\n <div className=\"row\">\n <div className=\"col-lg-12 mb-2\">\n <div className=\"tag-donate style-1 d-flex justify-content-center\">\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(1)\n }}\n id=\"success-outlined-1\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-1\">1 número</label>\n </div>\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(3)\n }}\n id=\"success-outlined-2\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-2\">3 números</label>\n </div>\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(5)\n }}\n id=\"success-outlined-3\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-3\">5 números</label>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"tag-donate style-1 d-flex justify-content-center\">\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(10)\n }}\n id=\"success-outlined-4\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-4\">10 número</label>\n </div>\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(15)\n }}\n id=\"success-outlined-5\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-5\">15 números</label>\n </div>\n <div className=\"form-check form-check-inline\">\n <input type=\"radio\" className=\"btn-check\" name=\"options-outlined\"\n onInput={() => {\n setTotalRaffleValor(20)\n }}\n id=\"success-outlined-6\" autoComplete=\"off\"/>\n <label className=\"btn btn-sm btn-outline-success\"\n htmlFor=\"success-outlined-6\">20 números</label>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group input-group-sm mb-3\">\n <button className=\"btn btn-sm btn-outline-dark p-3\" type=\"button\"\n id=\"button-remove-5\"\n onClick={() => decrementNumeros(5)}>-5\n </button>\n <button className=\"btn btn-sm btn-outline-dark p-3\" type=\"button\"\n id=\"button-addon1\"\n onClick={() => decrementNumeros(1)}>-1\n </button>\n <input max={100} type=\"text\" className=\"form-control form-control-sm\"\n placeholder=\"Números\"\n value={totalRaffle} onChange={handleNumerosChange}/>\n <button className=\"btn btn-sm btn-outline-dark p-3\" type=\"button\"\n id=\"button-addon1\"\n onClick={() => {\n incrementNumeros(1)\n }}>+1\n </button>\n <button className=\"btn btn-sm btn-outline-dark p-3\" type=\"button\"\n id=\"button-addon1\"\n onClick={() => {\n incrementNumeros(5)\n }}>+5\n </button>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <input name=\"dzName\" required=\"\" type=\"text\" maxLength=\"255\"\n className=\"form-control\" placeholder=\"Nome Completo\"\n value={name} onChange={(e) => setName(e.target.value)}\n />\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n mask={[\"000.000.000-00\", \"00.000.000/0000-00\"]}\n className={validateCpfCnpj(cpf_cnpj) ? \"form-control\" : \"form-control is-invalid\"}\n value={cpf_cnpj}\n onChange={(e) => setCpfCnpj(e.target.value)}\n onComplete={(e) => setCpfCnpj(e)}\n placeholder=\"CPF/CNPJ\"\n name=\"dzCpfCnpj\" required\n ></IMaskInput>\n <div className=\"invalid-feedback\">\n {cpf_cnpj.length > 14 ? \"CNPJ inválido\" : \"CPF inválido\"}\n </div>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <input name=\"dzEmail\"\n required\n maxLength={255}\n type=\"text\"\n className={emailError ? \"form-control is-invalid\" : \"form-control\"}\n placeholder=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value.length > 255 ? e.target.value.substring(0, 255) : e.target.value)}\n />\n </div>\n <div className=\"invalid-feedback\">\n E-mail inválido\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n mask={[{mask: '(00) 0000-0000'}, {mask: '(00) 00000-0000'}]}\n name=\"dzPhone\"\n className={phoneError ? \"form-control is-invalid\" : \"form-control\"}\n placeholder=\"Telefone\"\n required\n value={phone}\n onChange={(e) => setPhoneInput(e)}\n onComplete={(e) => setPhone(e)}\n >\n </IMaskInput>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group mb-0\"\n style={{display: 'grid', gridTemplateColumns: 'auto auto', gap: '10px'}}>\n <input type=\"checkbox\" className=\"form-check-input form-check-input-terms p-r5\"\n name=\"terms\"\n id=\"terms\"\n value={terms} onChange={(e) => setTerms(e.target.checked)}\n required/>\n <div className=\"label-and-feedback\">\n <label className=\"form-label px-2\" htmlFor=\"terms\">\n Li e aceito os <a className=\"fw-bold\" target=\"_blank\"\n href=\"https://cdn.ajudeumacausa.com.br/termos/termosdeuso-202312.pdf\">termos</a> de\n uso\n e <a className=\"fw-bold\" target=\"_blank\"\n href=\"https://cdn.ajudeumacausa.com.br/termos/privacidade-202312.pdf\">condições\n de\n privacidade</a>.\n </label>\n <div className=\"invalid-feedback\">\n </div>\n </div>\n </div>\n <div className=\"form-group mb-0 text-center py-2\">\n <div\n className={(displayError ? \"alert alert-danger\" : 'd-none') + \" fade show\"}>{displayErrorMessage}</div>\n <Button variant=\"primary\" type=\"submit\" name=\"submit\"\n className=\"btn btn-primary btn-block\" disabled={botaoPagar}>\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className={botaoPagar ? '' : 'd-none'}\n />\n {' '}\n Pagar R$ {totalRaffle * 30},00\n </Button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div className={page === 2 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Dados para pagamento</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <div className=\"row\" style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"col-lg-12\"\n style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"form-group\">\n <div className=\"input-group mb-0\">\n <img src={\"data:image/png;base64, \" + qrCodeBase64} alt=\"QR Code\"/>\n </div>\n </div>\n </div>\n\n <div\n className={showCopy ? \"alert alert-success fade show text-center my-2\" : \"alert fade d-none\"}\n role=\"alert\">\n Código copiado!<br/>\n </div>\n <div className=\"col-lg-12\"\n style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"form-group mb-0\">\n <div className=\"input-group mb-0\">\n <CopyToClipboard text={pixCopyPaste} onCopy={() => {\n setShowCopy(true);\n setTimeout(() => {\n setShowCopy(false);\n }, 2000)\n }}>\n <button className=\"btn btn-primary btn-sm\">Copiar código Pix\n </button>\n </CopyToClipboard>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mt-2\"\n style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"row\">\n <div className=\"col-lg-12\"\n style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"form-group\">\n <div className=\"input-group mb-0\">\n <h5>Valor: R$ {formatNumber(valor, {\n style: 'currency',\n currency: 'BRL'\n })},00</h5>\n </div>\n <div className=\"input-group mb-3\">\n <div className=\"text-xl-center\">\n Intermediada por <b>AJUDE UMA CAUSA</b>\n <br/>\n CNPJ: <b>53.131.729/0001-63</b>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12\"\n style={{display: 'flex', justifyContent: 'center', alignItems: 'center'}}>\n <div className=\"form-group mb-0 text-center\">\n <Button variant=\"primary\" type=\"button\" name=\"submit\"\n className=\"btn btn-primary btn-block\" onClick={() => {\n setPage(1)\n }}>\n {' '}\n Voltar\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className={page === 3 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Números do sorteio</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <div className=\"row\">\n <div className={\"col-lg-12\"}>\n <div className={\"alert alert-success text-center\"} role=\"alert\">\n <p className={\"mb-0\"}>Obrigado pela sua doação!</p>\n <p className={\"mb-0\"}>Enviaremos para o seu e-mail todos os detalhes do\n sorteio.</p>\n <p className={\"mb-0\"}>Seus números da sorte são:</p>\n </div>\n </div>\n <div className={\"col-lg-12\"}>\n {numbersTags}\n </div>\n </div>\n </div>\n </div>\n <ReCAPTCHA\n ref={recaptchaRef}\n size=\"invisible\"\n sitekey=\"6LeYASkpAAAAAEqY8ZBGuL-2Y2GRTPR1pF-fhQjl\"\n />\n </div>\n </Modal>\n );\n});\nexport default DoacaoSorteioModal;\n","import React, {useState, forwardRef, useImperativeHandle, useRef} from 'react';\nimport {useNavigate} from 'react-router-dom';\nimport {Button, Modal, Overlay, Spinner, Tooltip} from 'react-bootstrap';\n\nimport {useCallback} from 'react';\nimport axios from \"axios\";\nimport {formatNumber} from \"chart.js/helpers\";\nimport {CopyToClipboard} from \"react-copy-to-clipboard/src\"; // Import at the top of your file\nimport {IMaskInput} from 'react-imask';\nimport ReCAPTCHA from \"react-google-recaptcha\"\n\nconst {REACT_APP_STAGE} = process.env;\n\nconst DoacaoConsultaModal = forwardRef((props, ref) => {\n\n const [donateConsultModal, setConsultDonateModal] = useState(false);\n\n const recaptchaRef = React.createRef();\n\n const [page, setPage] = useState(1);\n\n const [botaoConsultar, setBotaoConsultar] = useState(false);\n\n const [emailError, setEmailError] = useState(false);\n\n const [cpf_cnpj, setCpfCnpj] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n\n const [numbers, setNumbers] = useState([]);\n\n const [displayError, setDisplayError] = useState(false);\n const [displayErrorMessage, setDisplayErrorMessage] = useState(false);\n\n const numbersTags = numbers.map((number) => {\n return (\n <span className=\"badge bg-secondary m-1\">{number}</span>\n )\n });\n\n // Validar e-mail\n const validateEmail = (email) => {\n return String(email)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|.(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n );\n };\n\n // Validar CPF ou CNPJ\n const validateCpfCnpj = (value) => {\n const cpfCnpj = value.replace(/\\D/g, '');\n if (cpfCnpj.length === 11) {\n return validateCpf(cpfCnpj);\n } else if (cpfCnpj.length === 14) {\n return validateCnpj(cpfCnpj);\n } else if (cpfCnpj.length < 11) {\n return true;\n } else {\n return false;\n }\n }\n\n function validateCnpj(cnpj) {\n cnpj = cnpj.replace(/[^\\d]+/g, '');\n\n if (!cnpj || cnpj.length !== 14\n || cnpj === \"00000000000000\"\n || cnpj === \"11111111111111\"\n || cnpj === \"22222222222222\"\n || cnpj === \"33333333333333\"\n || cnpj === \"44444444444444\"\n || cnpj === \"55555555555555\"\n || cnpj === \"66666666666666\"\n || cnpj === \"77777777777777\"\n || cnpj === \"88888888888888\"\n || cnpj === \"99999999999999\")\n return false\n var tamanho = cnpj.length - 2\n var numeros = cnpj.substring(0, tamanho)\n var digitos = cnpj.substring(tamanho)\n var soma = 0\n var pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(0)) return false;\n tamanho = tamanho + 1\n numeros = cnpj.substring(0, tamanho)\n soma = 0\n pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(1)) return false\n return true;\n }\n\n function validateCpf(cpf) {\n cpf = cpf.replace(/[^\\d]+/g, '');\n if (cpf === '') return false;\n // Elimina CPFs invalidos conhecidos\n if (cpf.length !== 11 ||\n cpf === \"00000000000\" ||\n cpf === \"11111111111\" ||\n cpf === \"22222222222\" ||\n cpf === \"33333333333\" ||\n cpf === \"44444444444\" ||\n cpf === \"55555555555\" ||\n cpf === \"66666666666\" ||\n cpf === \"77777777777\" ||\n cpf === \"88888888888\" ||\n cpf === \"99999999999\")\n return false;\n // Valida 1o digito\n let add = 0;\n for (let i = 0; i < 9; i++)\n add += parseInt(cpf.charAt(i)) * (10 - i);\n let rev = 11 - (add % 11);\n if (rev === 10 || rev === 11)\n rev = 0;\n if (rev !== parseInt(cpf.charAt(9)))\n return false;\n // Valida 2o digito\n add = 0;\n for (let i = 0; i < 10; i++)\n add += parseInt(cpf.charAt(i)) * (11 - i);\n rev = 11 - (add % 11);\n if (rev === 10 || rev === 11)\n rev = 0;\n return rev === parseInt(cpf.charAt(10));\n }\n\n useImperativeHandle(ref, () => ({\n handleModalOpen() {\n setConsultDonateModal(true);\n setPage(1);\n setEmail(\"\");\n setCpfCnpj(\"\");\n }\n }));\n\n function handleModalClose() {\n setConsultDonateModal(false);\n }\n\n const nav = useNavigate();\n\n // submit form using axios\n\n const FormSubmit = (e) => {\n e.preventDefault();\n\n if (!validateEmail(email)) {\n setEmailError(true);\n return;\n }\n setEmailError(false);\n\n if (!validateCpfCnpj(cpf_cnpj)) {\n return;\n }\n\n setBotaoConsultar(true);\n\n recaptchaRef.current.executeAsync().then(recaptchaValue => {\n const data = {\n \"Document\": cpf_cnpj.replace(/\\D/g, ''),\n \"Email\": email,\n \"CauseCod\": 7,\n \"g-recaptcha-response\": recaptchaValue,\n }\n axios.post(`https://${REACT_APP_STAGE}.ajudeumacausa.com.br/v1/raffle/GetMyRaffle`, data)\n .then(res => {\n\n setNumbers(res.data.Details.map((number) => {\n return number.Number;\n }));\n\n setPage(2);\n\n }).catch((error) => {\n\n // caso erro 404\n if (error.response.status === 404) {\n setDisplayError(true);\n setDisplayErrorMessage(\"Nenhum número encontrado para o CPF/CNPJ e e-mail informados.\");\n\n setTimeout(() => {\n setDisplayError(false);\n setDisplayErrorMessage(\"\");\n }, 5000);\n return;\n }\n\n }).finally(() => {\n setBotaoConsultar(false)\n });\n });\n\n }\n\n return (\n <Modal className=\"fade modal-wrapper\" id=\"modalConsultDonate\" show={donateConsultModal}\n onHide={setConsultDonateModal}\n backdrop=\"static\" centered>\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h4 className=\"modal-title\">Consultar números da doação</h4>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className={page === 1 ? \"modal-body\" : \"d-none\"}>\n <div className=\"row\">\n <div className=\"col-lg-12\">\n <div className=\"contact-form\">\n <form id=\"contactForm\" onSubmit={FormSubmit}>\n <ReCAPTCHA\n ref={recaptchaRef}\n size=\"invisible\"\n sitekey=\"6LeYASkpAAAAAEqY8ZBGuL-2Y2GRTPR1pF-fhQjl\"\n />\n <div className=\"row\">\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <input name=\"dzEmail\" required type=\"text\"\n className={emailError ? \"form-control is-invalid\" : \"form-control\"}\n placeholder=\"Email\"\n value={email} onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n <div className=\"invalid-feedback\">\n E-mail inválido\n </div>\n </div>\n </div>\n <div className=\"col-lg-12\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n mask={[\"000.000.000-00\", \"00.000.000/0000-00\"]}\n className={validateCpfCnpj(cpf_cnpj) ? \"form-control\" : \"form-control is-invalid\"}\n value={cpf_cnpj} onChange={(e) => setCpfCnpj(e.target.value)}\n onComplete={(e) => setCpfCnpj(e)}\n placeholder=\"CPF/CNPJ\"\n name=\"dzCpfCnpj\" required\n ></IMaskInput>\n <div className=\"invalid-feedback\">\n {cpf_cnpj.length > 14 ? \"CNPJ inválido\" : \"CPF inválido\"}\n </div>\n </div>\n </div>\n </div>\n <div className=\"form-group mb-0 text-center py-2\">\n <div\n className={(displayError ? \"alert alert-danger\" : 'd-none') + \" fade show\"}>{displayErrorMessage}</div>\n <Button variant=\"primary\" type=\"submit\" name=\"submit\"\n className=\"btn btn-primary btn-block\" disabled={botaoConsultar}>\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className={botaoConsultar ? '' : 'd-none'}\n />\n {' '}\n Consultar\n </Button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n <div className={page === 2 ? \"modal-body\" : \"d-none\"}>\n <div className=\"row\">\n <div className={\"col-lg-12\"}>\n <div className={\"alert alert-success text-center\"} role=\"alert\">\n <p className={\"mb-0\"}>Seus números da doação são</p>\n </div>\n </div>\n <div className={\"col-lg-12\"}>\n {numbersTags}\n </div>\n </div>\n </div>\n </div>\n </Modal>\n );\n});\nexport default DoacaoConsultaModal","export const IMAGES = {\n\t//bg images\n\tBackground5 : require('../assets/images/background/bg5.jpg'),\n\tBackground10 : require('../assets/images/background/bg10.jpg'),\n\t\n\t//Logo\n\tlogo2 : require('../assets/images/logo-2.png'),\n\tlogo3 : require('../assets/images/logo-3.png'),\n\tlogoWhite3 : require('../assets/images/logo-white-3.png'),\n\n\t//other all\n\tBlogGrid1 : require('../assets/images/blog/blog-grid/pic1.jpg'),\n\tBlogGrid2 : require('../assets/images/blog/blog-grid/pic2.jpg'),\n\tBlogGrid3 : require('../assets/images/blog/blog-grid/pic3.jpg'),\n\tShape : require('../assets/images/shape.png'),\n\tShape1 : require('./../assets/images/pattern/shape1.png'),\n\tShape2 : require('./../assets/images/pattern/shape2.png'),\n\tShape3 : require('./../assets/images/pattern/shape3.png'),\n\tShape5 : require('./../assets/images/pattern/shape5.png'),\n\tShape6 : require('./../assets/images/pattern/shape6.png'),\n\tPattren1 : require('./../assets/images/counter/pattren1.png'),\n\tPattren2 : require('./../assets/images/counter/pattren2.png'),\n\tPattren3 : require('./../assets/images/counter/pattren3.png'),\n\tPattren4 : require('./../assets/images/counter/pattren4.png'),\n\tPattren5 : require('./../assets/images/counter/pattren5.png'),\n\tPattren6 : require('./../assets/images/counter/pattren6.png'),\n\tRecentblog1 : require('./../assets/images/blog/recent-blog/pic1.jpg'),\n\tRecentblog2 : require('./../assets/images/blog/recent-blog/pic2.jpg'),\n\tRecentblog3 : require('./../assets/images/blog/recent-blog/pic3.jpg'),\n\tRecentblog4 : require('./../assets/images/blog/recent-blog/pic4.jpg'),\n\tAvatar1 : require('./../assets/images/avatar/avatar1.jpg'),\n\tAvatar2 : require('./../assets/images/avatar/avatar2.jpg'),\n\tAvatar3 : require('./../assets/images/avatar/avatar3.jpg'),\n\tAvatar4 : require('./../assets/images/avatar/avatar4.jpg'),\n\tAvatar5 : require('./../assets/images/avatar/avatar5.jpg'),\n\tAboutPic2 : require('./../assets/images/about/pic2.jpg'),\n\tAboutPic3 : require('./../assets/images/about/pic3.jpg'),\n\tProjectPic13 : require('./../assets/images/project/pic13.jpg'),\n\tlargePic1 : require('./../assets/images/testimonials/large/pic1.jpg'),\n\tlargePic2 : require('./../assets/images/testimonials/large/pic2.jpg'),\n\tlargePic3 : require('./../assets/images/testimonials/large/pic3.jpg'),\n\tSliderBg1 : require('../assets/images/main-slider/slider1/slider-bg1.jpg'),\n\tSliderBg2 : require('../assets/images/main-slider/slider1/slider-bg2.jpg'),\n\tSliderPic1 : require('./../assets/images/main-slider/slider2/pic1.png'),\n\tSliderPic2 : require('./../assets/images/main-slider/slider2/pic2.png'),\n\tiPhoneAppleWatch : require('./../assets/images/prizes/iPhoneAppleWatch.png'),\n\n\t//Icons IC\n\n\tICShape1 : require('./../assets/images/ic_assets/illustration/ilustracao-01.png'),\n\tICShape2 : require('./../assets/images/ic_assets/illustration/ilustracao-02.png'),\n\tICShape3 : require('./../assets/images/ic_assets/illustration/ilustracao-03.png'),\n\tICShape4 : require('./../assets/images/ic_assets/illustration/ilustracao-04.png'),\n\tICShape5 : require('./../assets/images/ic_assets/illustration/ilustracao-05.png'),\n\tICShape6 : require('./../assets/images/ic_assets/illustration/ilustracao-06.png'),\n\tICShape7 : require('./../assets/images/ic_assets/illustration/ilustracao-07.png'),\n\tICShape8 : require('./../assets/images/ic_assets/illustration/ilustracao-08.png'),\n\tICShape9 : require('./../assets/images/ic_assets/illustration/ilustracao-09.png'),\n\tICShape10 : require('./../assets/images/ic_assets/illustration/ilustracao-10.png'),\n\n\t// New About\n\tAbout00: require('./../assets/images/ic_assets/background/about_00.jpg'),\n\tAbout04: require('./../assets/images/ic_assets/about/about_04.jpg'),\n\tAbout03: require('./../assets/images/ic_assets/about/about_03.jpg'),\n\n\t// Slideshow\n\n\tICImageSlide1 : require('./../assets/images/ic_assets/slideshow/Carrossel_01_-_400_x.png'),\n\tICImageSlide2 : require('./../assets/images/ic_assets/slideshow/Carrossel_04_-_400_x.png'),\n\tICImageSlide3 : require('./../assets/images/ic_assets/slideshow/Carrossel_06_-_400_x.png'),\n\tICImageSlide4 : require('./../assets/images/ic_assets/slideshow/Carrossel_07_-_400_x.png'),\n\tICImageSlide5 : require('./../assets/images/ic_assets/slideshow/Carrossel_08_-_400_x.png'),\n\tICImageSlide6 : require('./../assets/images/ic_assets/slideshow/Carrossel_10_-_400_x.png'),\n\tICImageSlide7 : require('./../assets/images/ic_assets/slideshow/Carrossel_11_-_400_x.png'),\n\tICImageSlide8 : require('./../assets/images/ic_assets/slideshow/Carrossel_12_-_400_x.png'),\n\n};\n\nexport const SVGICON = {\n\tDoubleHeart : <svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M40.2617 48.1014C39.7379 48.1014 39.2212 47.8615 38.8858 47.4079C38.3249 46.6488 38.4857 45.5787 39.2449 45.018C46.6367 39.5566 51.6673 34.7706 53.7932 31.1772C55.7479 27.873 56.582 24.8238 56.582 20.9815C56.582 11.7683 50.0773 7.6442 43.6309 7.6442C37.6911 7.6442 35.0672 10.8946 34.0319 12.832C33.6643 13.5199 32.9504 13.9476 32.1685 13.9482C32.168 13.9482 32.1674 13.9482 32.1667 13.9482C31.3855 13.9482 30.6716 13.5216 30.3033 12.8348C29.264 10.8962 26.6318 7.64408 20.6815 7.64408C14.4216 7.64408 9.63368 11.2387 8.18606 17.0251C7.95707 17.9405 7.0293 18.4972 6.11348 18.2682C5.19789 18.0392 4.64125 17.1111 4.87036 16.1956C6.68934 8.92447 12.8955 4.22607 20.6815 4.22607C26.8206 4.22607 30.2941 6.98994 32.1652 9.43576C34.0319 6.98959 37.4984 4.22607 43.6307 4.22607C48.0409 4.22607 52.1 5.7692 55.0601 8.57115C58.2916 11.6297 59.9996 15.921 59.9996 20.9812C59.9996 25.419 58.9925 29.0999 56.7346 32.917C53.7571 37.9499 46.6844 43.7701 41.2757 47.7664C40.9703 47.9926 40.6144 48.1014 40.2617 48.1014Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M18.6579 55.7734C18.2063 55.7734 17.7656 55.6452 17.3836 55.4028C16.1793 54.6387 5.51988 47.7737 2.19586 42.1549C0.677227 39.5876 0 37.108 0 34.1144C0 30.6662 1.1734 27.7344 3.39293 25.6355C5.42496 23.714 8.20301 22.6558 11.2155 22.6558C14.9923 22.6558 17.3152 24.2427 18.6562 25.712C19.9946 24.2424 22.3136 22.6558 26.0863 22.6558C29.0985 22.6558 31.8755 23.7141 33.9059 25.636C36.1228 27.7343 37.2947 30.6662 37.2947 34.1142C37.2947 37.1037 36.6164 39.5833 35.0953 42.1547C31.7955 47.7325 21.1414 54.6312 19.9375 55.3994C19.5537 55.6442 19.1114 55.7734 18.6579 55.7734ZM11.2155 26.0737C7.33418 26.0737 3.41789 28.56 3.41789 34.1144C3.41789 36.4928 3.93223 38.3771 5.13762 40.4146C7.40379 44.2454 14.4473 49.4297 18.656 52.1583C22.6461 49.5518 29.9057 44.2138 32.1533 40.4146C33.3612 38.3727 33.8764 36.4885 33.8764 34.1144C33.8764 28.56 29.9637 26.0737 26.0859 26.0737C22.7277 26.0737 21.1384 27.7287 20.3966 29.1172C20.0536 29.7594 19.3871 30.1587 18.6577 30.1587C17.9295 30.1587 17.2637 29.7607 16.9202 29.1202C16.1749 27.7301 14.5806 26.0737 11.2155 26.0737Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tRing : <svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M30.0001 60C21.9868 60 14.4532 56.8794 8.78679 51.213C-2.91005 39.516 -2.91005 20.4837 8.78679 8.78672C14.4532 3.12059 21.9868 0 30.0001 0C38.0133 0 45.547 3.12059 51.2133 8.78695C62.9102 20.484 62.9102 39.5163 51.2133 51.2133C45.547 56.8794 38.0135 60 30.0001 60ZM30.0001 3.57598C22.942 3.57598 16.3064 6.32449 11.3156 11.3155C1.0128 21.618 1.0128 38.382 11.3156 48.6845C16.3066 53.6755 22.9422 56.424 30.0003 56.424C37.0584 56.424 43.694 53.6755 48.6848 48.6845C58.9876 38.382 58.9876 21.618 48.6848 11.3155C43.6939 6.32449 37.0582 3.57598 30.0001 3.57598ZM30.0001 47.0007C25.6446 47.0007 21.2889 45.3429 17.973 42.0271C11.3414 35.3952 11.3414 24.6049 17.973 17.973C24.6046 11.3414 35.3951 11.3414 42.027 17.973C42.7252 18.6712 42.7252 19.8034 42.027 20.5018C41.3288 21.1999 40.1967 21.1999 39.4982 20.5018C34.2609 15.2641 25.7388 15.2643 20.5013 20.5018C15.264 25.7392 15.264 34.2612 20.5013 39.4985C25.7387 44.7361 34.2608 44.7359 39.4982 39.4985C40.1964 38.8004 41.3288 38.8004 42.0268 39.4985C42.725 40.1967 42.725 41.3289 42.0268 42.0273C38.7113 45.3429 34.3556 47.0007 30.0001 47.0007Z\" fill=\"white\"/>\n\t\t<path d=\"M42.8169 24.6083C41.6303 24.6083 40.5148 24.1461 39.6758 23.307L36.6932 20.3246C35.8542 19.4857 35.3921 18.3699 35.3921 17.1836C35.3921 15.997 35.8542 14.8814 36.693 14.0425L44.2911 6.44445C45.1301 5.60551 46.2458 5.14355 47.4322 5.14355C48.6187 5.14355 49.7342 5.60563 50.5731 6.44445L53.5559 9.42723C54.3949 10.2662 54.857 11.3819 54.857 12.5683C54.857 13.7547 54.395 14.8704 53.5559 15.7093L45.9581 23.3071C45.119 24.1461 44.0035 24.6083 42.8169 24.6083ZM47.4323 8.7193C47.2982 8.7193 47.0405 8.75234 46.8197 8.97301L39.2219 16.5711C38.8842 16.9088 38.8842 17.4583 39.2219 17.7961L42.2044 20.7786C42.4252 20.9994 42.6829 21.0325 42.8169 21.0325C42.9509 21.0325 43.2084 20.9995 43.4293 20.7788L51.0275 13.1807C51.2481 12.9601 51.2812 12.7023 51.2812 12.5683C51.2812 12.4343 51.2481 12.1766 51.0275 11.9558L48.0447 8.97301C47.824 8.75223 47.5662 8.7193 47.4323 8.7193Z\" fill=\"white\"/>\n\t\t<path d=\"M12.5684 54.8568C11.3819 54.8568 10.2664 54.3947 9.42746 53.5559L6.44469 50.5731C5.60574 49.7342 5.14355 48.6185 5.14355 47.4322C5.14355 46.2455 5.60563 45.1299 6.44469 44.2911L14.0425 36.6932C14.8815 35.8543 15.997 35.3921 17.1836 35.3921C18.3702 35.3921 19.4857 35.8543 20.3247 36.6933L23.3073 39.6758C24.1463 40.5147 24.6084 41.6304 24.6084 42.8169C24.6084 44.0034 24.1463 45.1189 23.3075 45.9578L15.7093 53.5557C14.8704 54.3947 13.7548 54.8568 12.5684 54.8568ZM17.1839 38.9676C17.0498 38.9676 16.7923 39.0006 16.5714 39.2213L8.97324 46.8194C8.75258 47.0401 8.71953 47.2979 8.71953 47.4319C8.71953 47.5659 8.75258 47.8235 8.97324 48.0444L11.956 51.0271C12.1767 51.2478 12.4345 51.2808 12.5684 51.2808C12.7024 51.2808 12.9602 51.2478 13.181 51.0271L20.7788 43.429C21.1166 43.0913 21.1166 42.5418 20.7788 42.2041L17.7963 39.2215C17.5754 39.0006 17.3177 38.9676 17.1839 38.9676Z\" fill=\"white\"/>\n\t\t<path d=\"M47.432 54.8568C46.2455 54.8568 45.13 54.3947 44.2911 53.5559L36.693 45.9578C35.854 45.1189 35.3921 44.0031 35.3921 42.8169C35.3921 41.6302 35.8542 40.5146 36.693 39.6758L39.6758 36.6932C40.5145 35.8543 41.6302 35.3921 42.8167 35.3921C44.0034 35.3921 45.119 35.8543 45.9578 36.6933L53.5557 44.2911C54.3947 45.13 54.8568 46.2458 54.8568 47.4322C54.8568 48.6187 54.3947 49.7342 53.5557 50.5731L50.5731 53.5559C49.7341 54.3947 48.6186 54.8568 47.432 54.8568ZM42.8166 38.9676C42.6827 38.9676 42.4251 39.0006 42.2044 39.2213L39.2215 42.2041C38.8838 42.5418 38.8838 43.0913 39.2215 43.429L46.8196 51.0271C47.0403 51.2478 47.2981 51.2808 47.432 51.2808C47.566 51.2808 47.8238 51.2478 48.0446 51.0271L51.0271 48.0444C51.2479 47.8237 51.2808 47.5659 51.2808 47.4319C51.2808 47.2979 51.2478 47.0402 51.0271 46.8194L43.429 39.2215C43.2083 39.0006 42.9507 38.9676 42.8166 38.9676Z\" fill=\"white\"/>\n\t\t<path d=\"M17.1836 24.6084C15.997 24.6084 14.8814 24.1462 14.0425 23.3071L6.44469 15.7093C5.60563 14.8704 5.14355 13.7546 5.14355 12.5683C5.14355 11.3817 5.60563 10.2661 6.44469 9.42723L9.42723 6.44445C10.2663 5.60551 11.3819 5.14355 12.5683 5.14355C13.7547 5.14355 14.8704 5.60563 15.7093 6.44445L23.3074 14.0425C24.1463 14.8815 24.6083 15.9972 24.6083 17.1836C24.6083 18.3702 24.1462 19.4857 23.3074 20.3246L20.3246 23.3071C19.4857 24.1462 18.37 24.6084 17.1836 24.6084ZM12.5682 8.71941C12.4341 8.71941 12.1764 8.75246 11.9557 8.97312L8.97312 11.9557C8.75234 12.1763 8.71941 12.4341 8.71941 12.5682C8.71941 12.7021 8.75246 12.9597 8.97312 13.1806L16.5712 20.7785C16.792 20.9993 17.0497 21.0324 17.1838 21.0324C17.3177 21.0324 17.5753 20.9994 17.7959 20.7787L20.7788 17.7959C21.1166 17.4582 21.1166 16.9087 20.7788 16.571L13.1806 8.97312C12.9598 8.75234 12.7021 8.71941 12.5682 8.71941Z\" fill=\"white\"/>\n\t</svg>,\n\tHeartWindow : <svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M30.008 45.5103C29.585 45.5103 29.1721 45.3903 28.8141 45.1633C27.8561 44.5553 19.3778 39.0941 16.7132 34.59C15.4808 32.5066 14.9312 30.4944 14.9312 28.0652C14.9312 25.2447 15.8951 22.8424 17.7189 21.1181C19.3883 19.5396 21.6666 18.6704 24.1344 18.6704C27.0119 18.6704 28.8678 19.7942 30.0064 20.9253C31.1431 19.794 32.9957 18.6704 35.8706 18.6704C38.3382 18.6704 40.6157 19.5398 42.2837 21.1187C44.1051 22.8429 45.068 25.2451 45.068 28.0653C45.068 30.4912 44.5176 32.5036 43.2831 34.5901C40.6373 39.0624 32.1643 44.5495 31.2067 45.1604C30.8476 45.3893 30.4332 45.5103 30.008 45.5103ZM24.1346 22.071C21.2465 22.071 18.3322 23.9244 18.3322 28.065C18.3322 29.8988 18.7112 31.2875 19.6404 32.8581C21.3594 35.7638 26.8472 39.8135 30.0064 41.8849C33.1648 39.8037 38.6497 35.7425 40.3562 32.8581C41.2873 31.284 41.6671 29.8953 41.6671 28.065C41.6671 23.9242 38.7557 22.071 35.8704 22.071C33.3943 22.071 32.2307 23.276 31.6904 24.2871C31.3585 24.9084 30.7136 25.2948 30.0077 25.2948C29.303 25.2948 28.6587 24.9095 28.3263 24.2893C27.7839 23.2774 26.6162 22.071 24.1346 22.071Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M29.9997 59.9999C29.736 59.9999 29.4723 59.9387 29.2306 59.8159C26.4614 58.4114 22.3044 56.164 18.2272 53.4344C14.374 50.8547 11.2587 48.3075 8.96756 45.8634C6.75589 43.5039 5.53784 40.4213 5.53784 37.1835V12.7906C5.53784 11.9408 6.16491 11.2216 7.00667 11.106C15.1371 9.98849 22.8832 6.214 28.8181 0.477685C29.4772 -0.159228 30.5224 -0.159228 31.1816 0.477685C34.3564 3.54623 38.0184 6.0456 42.0652 7.9063C42.9185 8.29853 43.2921 9.30833 42.9 10.1616C42.5077 11.015 41.4982 11.3888 40.6447 10.9962C36.7416 9.20181 33.1674 6.85935 29.9995 4.02201C24.0903 9.30739 16.7124 12.8896 8.93873 14.246V37.1837C8.93873 39.5541 9.83029 41.8108 11.4489 43.5377C13.5633 45.7934 16.4806 48.1724 20.1193 50.6084C23.6957 53.0028 27.3477 55.0189 30 56.389C32.6523 55.0186 36.3043 53.0027 39.8806 50.6084C43.5195 48.1722 46.4367 45.7934 48.5511 43.5377C50.1699 41.8108 51.0612 39.5541 51.0612 37.1837V12.7906C51.0612 11.8514 51.8225 11.0902 52.7616 11.0902C53.7008 11.0902 54.462 11.8514 54.462 12.7906V37.1837C54.462 40.4214 53.244 43.5038 51.0323 45.8635C48.7412 48.3077 45.6259 50.8549 41.7725 53.4345C37.6953 56.1641 33.5386 58.4116 30.7692 59.816C30.5272 59.9386 30.2633 59.9999 29.9997 59.9999Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tHeartHelp : <svg width=\"48\" height=\"60\" viewBox=\"0 0 48 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M24.0084 27.3055C23.5883 27.3055 23.1784 27.1864 22.8228 26.9611C21.8442 26.34 13.1905 20.7653 10.4751 16.1753C9.22158 14.0566 8.6626 12.01 8.6626 9.53883C8.6626 6.67406 9.641 4.23469 11.492 2.48426C13.1864 0.882305 15.4995 0 18.0053 0C20.9633 0 22.8563 1.1693 24.0067 2.33098C25.1551 1.1693 27.0453 0 30.0003 0C32.506 0 34.8183 0.882656 36.5114 2.48496C38.36 4.2348 39.3372 6.67406 39.3372 9.53883C39.3372 12.0062 38.7773 14.053 37.5219 16.1753C34.8249 20.7343 26.1767 26.3343 25.1995 26.9576C24.843 27.1853 24.431 27.3055 24.0084 27.3055ZM18.0053 3.34898C15.0219 3.34898 12.0115 5.26301 12.0115 9.53883C12.0115 11.4257 12.4013 12.8544 13.3572 14.47C15.1261 17.4596 20.7784 21.6258 24.0067 23.7396C27.2345 21.6159 32.8831 17.4389 34.6394 14.47C35.5974 12.8507 35.9881 11.4221 35.9881 9.53883C35.9881 5.26301 32.9808 3.34898 30.0002 3.34898C27.4379 3.34898 26.2324 4.59879 25.6721 5.64738C25.3433 6.26238 24.7058 6.64383 24.0079 6.64383C23.3114 6.64383 22.6744 6.2632 22.3455 5.6502C21.783 4.6002 20.5732 3.34898 18.0053 3.34898Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M43.006 60H4.99387C2.73508 60 0.897461 58.1624 0.897461 55.9036V31.6884C0.897461 29.4297 2.73508 27.592 4.99387 27.592H16.3955C17.3202 27.592 18.07 28.3419 18.07 29.2665V34.5666H31.6045C32.5291 34.5666 33.2789 35.3165 33.2789 36.2411C33.2789 37.1658 32.5291 37.9156 31.6045 37.9156H16.3955C15.4709 37.9156 14.721 37.1657 14.721 36.2411V30.941H4.99387C4.58172 30.941 4.24656 31.2763 4.24656 31.6883V55.9035C4.24656 56.3156 4.58184 56.6508 4.99387 56.6508H43.006C43.4181 56.6508 43.7533 56.3155 43.7533 55.9035V31.6884C43.7533 31.2763 43.418 30.9411 43.006 30.9411H31.6043C30.6796 30.9411 29.9298 30.1913 29.9298 29.2667C29.9298 28.342 30.6797 27.5922 31.6043 27.5922H43.006C45.2648 27.5922 47.1024 29.4298 47.1024 31.6886V55.9037C47.1024 58.1624 45.2648 60 43.006 60Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M14.528 47.256H11.8366V50.921C11.8366 51.3539 11.3092 51.5703 10.7817 51.5703C10.2543 51.5703 9.72681 51.3539 9.72681 50.921V42.3197C9.72681 41.8735 10.2542 41.6841 10.7817 41.6841C11.3091 41.6841 11.8366 41.8735 11.8366 42.3197V45.6331H14.528V42.3197C14.528 41.8735 15.0553 41.6841 15.5828 41.6841C16.1102 41.6841 16.6377 41.8735 16.6377 42.3197V50.921C16.6377 51.3539 16.1104 51.5703 15.5828 51.5703C15.0554 51.5703 14.528 51.3539 14.528 50.921V47.256Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M20.2074 45.8088H22.2359C22.6416 45.8088 22.8715 46.2012 22.8715 46.6338C22.8715 46.999 22.6821 47.4319 22.2359 47.4319H20.2074V49.7309H23.8319C24.2376 49.7309 24.4675 50.1638 24.4675 50.664C24.4675 51.0967 24.2781 51.5701 23.8319 51.5701H19.0173C18.5575 51.5701 18.0977 51.3538 18.0977 50.9209V42.3333C18.0977 41.9004 18.5575 41.6841 19.0173 41.6841H23.8319C24.2781 41.6841 24.4675 42.1575 24.4675 42.5902C24.4675 43.0906 24.2376 43.5233 23.8319 43.5233H20.2074V45.8088Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M26.3059 51.5703C25.8461 51.5703 25.3862 51.3539 25.3862 50.921V42.3197C25.3862 41.8735 25.9136 41.6841 26.4412 41.6841C26.9685 41.6841 27.4961 41.8735 27.4961 42.3197V49.731H30.5795C30.9852 49.731 31.1882 50.1908 31.1882 50.6507C31.1882 51.1105 30.9852 51.5704 30.5795 51.5704H26.3059V51.5703Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M32.0393 42.3197C32.0393 41.9815 32.3502 41.6841 32.8238 41.6841H35.6233C37.4085 41.6841 38.8151 42.5227 38.8151 44.7947V44.8622C38.8151 47.1342 37.3545 47.9998 35.4881 47.9998H34.1494V50.9209C34.1494 51.3538 33.6219 51.5701 33.0945 51.5701C32.567 51.5701 32.0395 51.3538 32.0395 50.9209V42.3198H32.0393V42.3197ZM34.1493 43.5233V46.3769H35.488C36.2454 46.3769 36.7054 45.944 36.7054 45.0245V44.8757C36.7054 43.956 36.2455 43.5233 35.488 43.5233H34.1493Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tDollerBox : <svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M29.9996 28.702C22.0862 28.702 15.6484 22.2643 15.6484 14.351C15.6484 6.4377 22.0862 0 29.9996 0C37.9127 0 44.3506 6.43793 44.3506 14.3511C44.3506 22.2643 37.9129 28.702 29.9996 28.702ZM29.9996 3.31277C23.913 3.31277 18.9612 8.26453 18.9612 14.3511C18.9612 20.4376 23.913 25.3894 29.9996 25.3894C36.0862 25.3894 41.0378 20.4376 41.0378 14.3511C41.0378 8.26465 36.0862 3.31277 29.9996 3.31277Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M29.4777 21.1478C27.1995 21.0718 25.3389 19.8947 25.3389 18.6797C25.3389 18.0343 25.9085 17.0849 26.6298 17.0849C27.4271 17.0849 28.0727 18.2051 29.4777 18.4519V15.3761C27.731 14.7115 25.6806 13.8953 25.6806 11.465C25.6806 9.05372 27.4652 7.89579 29.4777 7.61103V7.07935C29.4777 6.81345 29.7814 6.56665 30.1991 6.56665C30.5599 6.56665 30.9206 6.81345 30.9206 7.07935V7.55395C32.0977 7.59192 34.3191 7.89567 34.3191 9.20571C34.3191 9.71841 33.9773 10.7625 33.142 10.7625C32.5154 10.7625 32.1548 10.1549 30.9209 10.0601V12.832C32.6484 13.4774 34.661 14.3698 34.661 16.9328C34.661 19.287 33.1423 20.7109 30.9209 21.0717V21.6222C30.9209 21.8881 30.56 22.1349 30.1993 22.1349C29.7816 22.1349 29.4779 21.8881 29.4779 21.6222V21.1476H29.4777V21.1478ZM29.6675 12.3766V10.1172C28.8131 10.2882 28.4524 10.7248 28.4524 11.1804C28.4525 11.731 28.9461 12.0727 29.6675 12.3766ZM30.7308 15.8889V18.4329C31.3763 18.2811 31.8889 17.9202 31.8889 17.2368C31.8888 16.6103 31.4142 16.2115 30.7308 15.8889Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M46.6165 60H13.3831C9.84111 60 6.95947 57.1185 6.95947 53.5765V33.7495C6.95947 32.8348 7.70104 32.093 8.61592 32.093C9.5308 32.093 10.2724 32.8347 10.2724 33.7495V53.5765C10.2724 55.2917 11.6678 56.6873 13.3832 56.6873H46.6167C48.3321 56.6873 49.7275 55.2918 49.7275 53.5765V42.6071C49.7275 41.6924 50.4691 40.9506 51.384 40.9506C52.2988 40.9506 53.0404 41.6923 53.0404 42.6071V53.5765C53.0401 57.1185 50.1584 60 46.6165 60Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M50.582 35.406H9.41758C6.10398 35.406 3.4082 32.7102 3.4082 29.3966C3.4082 26.083 6.10398 23.3872 9.41758 23.3872H12.2729C13.1877 23.3872 13.9293 24.1289 13.9293 25.0437C13.9293 25.9583 13.1877 26.7001 12.2729 26.7001H9.41758C7.93059 26.7001 6.72098 27.9099 6.72098 29.3967C6.72098 30.8835 7.93059 32.0933 9.41758 32.0933H50.582C52.069 32.0933 53.2786 30.8835 53.2786 29.3967C53.2786 27.9099 52.0689 26.7001 50.582 26.7001H47.7268C46.8119 26.7001 46.0703 25.9584 46.0703 25.0437C46.0703 24.129 46.8119 23.3872 47.7268 23.3872H50.582C53.8956 23.3872 56.5914 26.083 56.5914 29.3966C56.5914 32.7102 53.8956 35.406 50.582 35.406Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tHeartHome : <svg width=\"58\" height=\"60\" viewBox=\"0 0 58 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M28.9918 52.5505C28.5576 52.5505 28.1348 52.4268 27.7682 52.1931C26.7843 51.5652 18.0741 45.9251 15.355 41.3286C14.0874 39.1857 13.522 37.119 13.522 34.6277C13.522 31.7321 14.5102 29.2663 16.3799 27.4966C18.0919 25.8761 20.4299 24.9836 22.9628 24.9836C25.9237 24.9836 27.828 26.1449 28.9933 27.3097C30.1606 26.1451 32.0678 24.9836 35.0321 24.9836C37.5653 24.9836 39.9042 25.8758 41.6173 27.4961C43.4893 29.2664 44.4788 31.7324 44.4788 34.6277C44.4788 37.1225 43.9143 39.189 42.6487 41.3286C39.9101 45.9577 31.195 51.5715 30.2102 52.1963C29.8447 52.4281 29.4235 52.5505 28.9918 52.5505ZM22.9628 28.4457C19.987 28.4457 16.9842 30.3572 16.9842 34.6277C16.9842 36.5135 17.3756 37.9442 18.3347 39.5659C20.0934 42.5382 25.7456 46.7217 28.9935 48.8612C32.2421 46.7321 37.8978 42.5601 39.6691 39.5658C40.6261 37.9475 41.0167 36.5169 41.0167 34.6276C41.0167 30.3573 38.0109 28.4456 35.0321 28.4456C32.4713 28.4456 31.2658 29.6913 30.7056 30.7363C30.366 31.3686 29.7096 31.7608 28.9921 31.7608C28.2728 31.7608 27.6158 31.3673 27.2772 30.7338C26.7193 29.6902 25.5178 28.4457 22.9628 28.4457Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M37.1694 59.9999H11.9538C8.61584 59.9999 5.8999 57.2842 5.8999 53.946V26.4005C5.8999 24.3582 6.92447 22.4778 8.64057 21.3706L24.2263 11.3152C27.1262 9.44408 30.8738 9.44408 33.7738 11.3152L49.3594 21.3706C51.0756 22.4778 52.1001 24.3581 52.1001 26.4005V56.4467C52.1001 57.4027 51.3249 58.1778 50.369 58.1778C49.4131 58.1778 48.6379 57.4028 48.6379 56.4467V26.4005C48.6379 25.5395 48.206 24.7467 47.4822 24.2798L31.897 14.2244C30.1371 13.089 27.863 13.0888 26.103 14.2244L10.5176 24.2798C9.79393 24.7467 9.36209 25.5394 9.36209 26.4005V53.9461C9.36209 55.3754 10.5247 56.5379 11.9538 56.5379H37.1694C38.1253 56.5379 38.9005 57.3128 38.9005 58.269C38.9005 59.2251 38.1253 59.9999 37.1694 59.9999Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M56.0609 20.2716C55.7276 20.2716 55.3912 20.1757 55.0941 19.9752L31.9889 4.3841C30.1733 3.15891 27.8269 3.15891 26.0114 4.3841L2.90627 19.9752C2.11409 20.5099 1.03795 20.3012 0.502993 19.5087C-0.0319682 18.7161 0.176977 17.6401 0.969516 17.1054L24.0747 1.51418C27.0668 -0.504727 30.9333 -0.504727 33.9255 1.51418L57.0306 17.1053C57.823 17.64 58.032 18.716 57.4971 19.5086C57.1628 20.0041 56.6168 20.2716 56.0609 20.2716Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tThumbDoller1 : <svg width=\"60\" height=\"44\" viewBox=\"0 0 60 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M13.5727 34.7998C12.2023 34.7999 10.8324 34.2784 9.78954 33.2355L9.77712 33.2232C7.80918 31.2549 7.75961 28.1985 9.65688 25.7904C13.0953 21.4263 23.2242 7.40712 23.3262 7.26591C23.3742 7.19958 23.4272 7.13712 23.4851 7.07923C24.9772 5.58731 27.1119 4.85512 29.2049 5.11586L36.9672 5.71035C37.8125 5.77516 38.4452 6.51286 38.3804 7.3579C38.3158 8.20318 37.5771 8.83388 36.7328 8.77107L28.9317 8.17353C28.9041 8.17142 28.8766 8.1686 28.8491 8.16497C27.7193 8.01685 26.5641 8.39197 25.7366 9.17162C24.7125 10.5887 15.4239 23.4309 12.0683 27.6898C11.3044 28.6593 10.9711 30.0749 11.948 31.052L11.9603 31.0641C12.8498 31.9535 14.2975 31.9539 15.1869 31.0641L20.6811 25.5462C21.279 24.9452 22.2511 24.9432 22.8518 25.5416C23.4526 26.1396 23.4547 27.1117 22.8563 27.7123L17.3598 33.2326C16.3152 34.2776 14.9436 34.7998 13.5727 34.7998Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M41.7583 43.7391H5.2676C2.36321 43.7391 0 41.3762 0 38.4717V21.6009C0 18.6963 2.36321 16.3333 5.2676 16.3333H29.953C30.7426 16.3333 31.4031 16.9321 31.4806 17.7177C31.5579 18.5033 31.0268 19.2195 30.2527 19.3736C29.1909 19.5847 28.4204 20.5257 28.4204 21.6107V21.628C28.4204 22.8861 29.4439 23.9096 30.702 23.9096L41.4401 23.823C42.5573 23.8139 43.6401 23.4062 44.4889 22.675C44.9436 22.2832 45.5847 22.1925 46.1303 22.4425C46.676 22.6927 47.0257 23.2377 47.0257 23.8379V38.4717C47.0259 41.3762 44.6628 43.7391 41.7583 43.7391ZM5.2676 19.403C4.05564 19.403 3.06986 20.3889 3.06986 21.6007V38.4715C3.06986 39.6833 4.05576 40.669 5.2676 40.669H41.7582C42.9701 40.669 43.9559 39.6831 43.9559 38.4715V26.4618C43.1596 26.7383 42.3184 26.886 41.4647 26.8929L30.7145 26.9795C27.7512 26.9795 25.3507 24.5789 25.3507 21.6282V21.6108C25.3507 20.8299 25.5211 20.0808 25.8294 19.4031H5.2676V19.403Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M23.4315 43.7115C15.8911 43.7115 9.75635 37.5767 9.75635 30.0363C9.75635 22.4959 15.8911 16.3611 23.4315 16.3611C24.2792 16.3611 24.9665 17.0484 24.9665 17.896C24.9665 18.7436 24.2792 19.4309 23.4315 19.4309C17.5837 19.4309 12.8262 24.1884 12.8262 30.0363C12.8262 35.8842 17.5837 40.6416 23.4315 40.6416C29.2794 40.6416 34.037 35.8842 34.037 30.0363C34.037 29.1887 34.7243 28.5014 35.5719 28.5014C36.4195 28.5014 37.1069 29.1887 37.1069 30.0363C37.1069 37.5767 30.9722 43.7115 23.4315 43.7115Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M22.9325 36.5361C20.7536 36.4634 18.9744 35.3377 18.9744 34.1758C18.9744 33.5584 19.5191 32.6506 20.2091 32.6506C20.9716 32.6506 21.5889 33.7218 22.9325 33.9579V31.0165C21.2621 30.381 19.3012 29.6004 19.3012 27.2764C19.3012 24.9705 21.0079 23.8631 22.9325 23.5907V23.0824C22.9325 22.8282 23.2229 22.592 23.6225 22.592C23.9675 22.592 24.3125 22.8281 24.3125 23.0824V23.5362C25.4382 23.5725 27.5623 23.8631 27.5623 25.1158C27.5623 25.6061 27.2355 26.6047 26.4366 26.6047C25.8375 26.6047 25.4925 26.0236 24.3123 25.9328V28.5836C25.9645 29.2009 27.8891 30.0542 27.8891 32.5053C27.8891 34.7567 26.4365 36.1183 24.3123 36.4634V36.9899C24.3123 37.2441 23.9673 37.4802 23.6223 37.4802C23.2229 37.4802 22.9323 37.2442 22.9323 36.9899V36.5361H22.9325ZM23.114 28.1479V25.9872C22.297 26.1507 21.9521 26.5682 21.9521 27.0039C21.952 27.5306 22.4241 27.8574 23.114 28.1479ZM24.1307 31.5068V33.9399C24.7481 33.7947 25.2383 33.4497 25.2383 32.796C25.2383 32.1967 24.7844 31.8155 24.1307 31.5068Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M30.7144 27.1014C27.7511 27.1014 25.3506 24.7008 25.3506 21.75V21.7327C25.3506 18.7818 27.7512 16.3812 30.702 16.3812H42.2776C43.1252 16.3812 43.8125 17.0685 43.8125 17.9161C43.8125 18.7637 43.1252 19.451 42.2776 19.451H30.702C29.444 19.451 28.4204 20.4747 28.4204 21.7327V21.75C28.4204 23.008 29.444 24.0315 30.702 24.0315L41.44 23.9449C42.6896 23.935 43.8642 23.4429 44.7477 22.5593L52.5722 14.7348C53.1717 14.1356 54.1433 14.1356 54.743 14.7348C55.3424 15.3342 55.3424 16.306 54.743 16.9056L46.9184 24.7301C45.4617 26.1867 43.5249 26.9982 41.4649 27.0148L30.7144 27.1014Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M52.2327 18.7409C51.8398 18.7409 51.4471 18.5909 51.1473 18.2913L41.9696 9.11355C41.6817 8.82562 41.52 8.43527 41.52 8.02816C41.52 7.62106 41.6817 7.23082 41.9696 6.94277L48.202 0.710274C48.49 0.422462 48.8803 0.260742 49.2874 0.260742C49.6946 0.260742 50.0848 0.422579 50.3728 0.710274L59.5506 9.88805C60.15 10.4875 60.15 11.4593 59.5506 12.0588L53.3181 18.2913C53.0182 18.5909 52.6254 18.7409 52.2327 18.7409ZM45.2257 8.02828L52.2326 15.0352L56.2944 10.9733L49.2876 3.96645L45.2257 8.02828Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\tThumbDoller2 : <svg width=\"60\" height=\"52\" viewBox=\"0 0 60 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M53.5835 51.8118H14.4268C11.9167 51.8118 9.50566 50.6233 7.97672 48.6325L1.23949 39.8595C1.01227 39.5636 0.890039 39.2006 0.892266 38.8276L0.930703 32.1607C0.936094 31.2374 1.68621 30.4919 2.60918 30.4919C2.6107 30.4919 2.61199 30.4919 2.61352 30.4919C4.60535 30.4971 7.46121 30.506 9.75516 30.5199C10.7673 30.526 11.6244 30.5327 12.2307 30.5402C13.5202 30.556 13.8667 30.5601 14.3619 31.0543L24.24 40.9324C25.3812 42.0736 27.2379 42.0736 28.3791 40.9324L28.3939 40.9175C29.535 39.7765 29.535 37.9196 28.3939 36.7784L19.157 27.6894C18.0497 26.5998 16.5843 25.9997 15.0309 25.9997H1.67848C0.751406 25.9998 0 25.2484 0 24.3213C0 23.3943 0.751406 22.6428 1.67848 22.6428H15.0308C17.4709 22.6428 19.7725 23.5852 21.5114 25.2968L30.7577 34.3952C33.2173 36.8547 33.2173 40.8411 30.7675 43.2911L30.7527 43.3059C28.3025 45.7559 24.3162 45.7559 21.8662 43.3059L12.4603 33.9C11.4014 33.8849 8.87262 33.8674 4.27793 33.8533L4.25238 38.2713L10.639 46.5877C11.5368 47.7568 12.9527 48.4549 14.4267 48.4549H53.5834C55.1972 48.4549 56.5103 47.142 56.5103 45.528V45.507C56.5103 43.8932 55.1974 42.5802 53.5834 42.5802H37.3835C36.4566 42.5802 35.705 41.8288 35.705 40.9017C35.705 39.9746 36.4564 39.2232 37.3835 39.2232H53.5833C57.048 39.2232 59.867 42.042 59.867 45.5069V45.5279C59.8672 48.993 57.0483 51.8118 53.5835 51.8118Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M42.6095 34.9688C33.0204 34.9688 25.219 27.1676 25.219 17.5783C25.219 7.98916 33.0202 0.187988 42.6095 0.187988C52.1986 0.187988 59.9998 7.98916 59.9998 17.5783C60 27.1676 52.1986 34.9688 42.6095 34.9688ZM42.6095 3.54482C34.8714 3.54482 28.5759 9.84014 28.5759 17.5783C28.5759 25.3164 34.8715 31.6118 42.6095 31.6118C50.3475 31.6118 56.6429 25.3163 56.6429 17.5783C56.6429 9.84025 50.3476 3.54482 42.6095 3.54482Z\" fill=\"#01BFBD\"/>\n\t\t<path d=\"M41.9634 25.9907C39.1437 25.8968 36.8408 24.4399 36.8408 22.936C36.8408 22.137 37.5458 20.9622 38.4387 20.9622C39.4256 20.9622 40.2245 22.3487 41.9634 22.6541V18.8473C39.8016 18.0249 37.2638 17.0145 37.2638 14.0067C37.2638 11.0224 39.4726 9.58906 41.9634 9.23668V8.57879C41.9634 8.24984 42.3394 7.94434 42.8564 7.94434C43.3029 7.94434 43.7494 8.24984 43.7494 8.57879V9.16625C45.2063 9.21324 47.9556 9.58918 47.9556 11.2106C47.9556 11.845 47.5327 13.1374 46.4987 13.1374C45.7233 13.1374 45.2768 12.3854 43.7494 12.268V15.6987C45.8877 16.4977 48.3785 17.6021 48.3785 20.7744C48.3785 23.6881 46.4987 25.4505 43.7494 25.897V26.5784C43.7494 26.9074 43.3029 27.2129 42.8564 27.2129C42.3395 27.2129 41.9634 26.9074 41.9634 26.5784V25.9907ZM42.1984 15.1346V12.3383C41.141 12.5498 40.6945 13.0903 40.6945 13.6542C40.6945 14.3356 41.3055 14.7587 42.1984 15.1346ZM43.5143 19.4818V22.6305C44.3133 22.4425 44.9477 21.9961 44.9477 21.1501C44.9477 20.3746 44.3603 19.8812 43.5143 19.4818Z\" fill=\"#01BFBD\"/>\n\t</svg>,\n\n\tHelpHeart : <svg width=\"81\" height=\"66\" viewBox=\"0 0 81 66\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t<path d=\"M32.8415 39.1484C31.7105 39.1484 30.7937 38.2316 30.7937 37.1006V12.1683C30.7937 11.2084 30.0129 10.4277 29.053 10.4277C28.0932 10.4277 27.3124 11.2084 27.3124 12.1683V37.1009C27.3124 38.2319 26.3955 39.1487 25.2646 39.1487C24.1337 39.1487 23.2168 38.2319 23.2168 37.1009V12.1683C23.2168 8.95016 25.8349 6.33203 29.053 6.33203C32.2712 6.33203 34.8893 8.95016 34.8893 12.1683V37.1009C34.8893 38.2317 33.9724 39.1484 32.8415 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M17.6877 39.1483C16.5567 39.1483 15.6399 38.2314 15.6399 37.1005V10.2738C15.6399 9.31391 14.8591 8.53313 13.8992 8.53313C12.9394 8.53313 12.1586 9.31391 12.1586 10.2738V15.5152C12.1586 16.6461 11.2417 17.563 10.1108 17.563C8.97986 17.563 8.06299 16.6461 8.06299 15.5152V10.2738C8.06299 7.05563 10.6811 4.4375 13.8992 4.4375C17.1174 4.4375 19.7355 7.05563 19.7355 10.2738V37.1008C19.7355 38.2316 18.8186 39.1483 17.6877 39.1483Z\" fill=\"#141818\"/>\n\t\t<path d=\"M25.2646 39.1484C24.1336 39.1484 23.2168 38.2315 23.2168 37.1006V6.48493C23.2168 5.52509 22.436 4.74431 21.4761 4.74431C20.5163 4.74431 19.7355 5.52509 19.7355 6.48493V37.1007C19.7355 38.2317 18.8186 39.1485 17.6877 39.1485C16.5568 39.1485 15.6399 38.2317 15.6399 37.1007V6.48493C15.6399 3.26681 18.258 0.648682 21.4761 0.648682C24.6943 0.648682 27.3124 3.26681 27.3124 6.48493V37.1007C27.3124 38.2317 26.3955 39.1484 25.2646 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M11.4736 59.8366C10.7258 59.8366 10.0051 59.4253 9.64452 58.7124C8.8953 57.2307 7.79718 55.9208 6.46874 54.9246C2.72265 52.1146 0.486084 47.6411 0.486084 42.9583V26.5286C0.486084 23.3105 3.10421 20.6924 6.32233 20.6924C9.54046 20.6924 12.1586 23.3105 12.1586 26.5286V35.3958C12.1586 36.5268 11.2417 37.4436 10.1108 37.4436C8.97983 37.4436 8.06296 36.5268 8.06296 35.3958V26.5286C8.06296 25.5688 7.28218 24.788 6.32233 24.788C5.36249 24.788 4.58171 25.5688 4.58171 26.5286V42.9583C4.58171 46.3591 6.20577 49.6077 8.9264 51.6483C10.7555 53.0203 12.2678 54.8241 13.2995 56.8644C13.8098 57.8736 13.4055 59.1055 12.3961 59.6158C12.0998 59.7657 11.7844 59.8366 11.4736 59.8366Z\" fill=\"#141818\"/>\n\t\t<path d=\"M40.4184 39.1484C39.2874 39.1484 38.3706 38.2315 38.3706 37.1006V17.8514C38.3706 16.8915 37.5898 16.1108 36.63 16.1108C35.6701 16.1108 34.8893 16.8915 34.8893 17.8514V37.1008C34.8893 38.2317 33.9725 39.1486 32.8415 39.1486C31.7106 39.1486 30.7937 38.2317 30.7937 37.1008V17.8514C30.7937 14.6333 33.4118 12.0151 36.63 12.0151C39.8481 12.0151 42.4662 14.6333 42.4662 17.8514V37.1008C42.466 38.2317 41.5493 39.1484 40.4184 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M55.7077 39.1484C54.5768 39.1484 53.6599 38.2316 53.6599 37.1006V12.1683C53.6599 11.2084 52.8791 10.4277 51.9193 10.4277C50.9594 10.4277 50.1786 11.2084 50.1786 12.1683V37.1009C50.1786 38.2319 49.2618 39.1487 48.1308 39.1487C46.9999 39.1487 46.083 38.2319 46.083 37.1009V12.1683C46.083 8.95016 48.7011 6.33203 51.9193 6.33203C55.1374 6.33203 57.7555 8.95016 57.7555 12.1683V37.1009C57.7555 38.2317 56.8388 39.1484 55.7077 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M63.2846 39.1483C62.1537 39.1483 61.2368 38.2314 61.2368 37.1005V10.2738C61.2368 7.05563 63.8549 4.4375 67.0731 4.4375C70.2912 4.4375 72.9093 7.05563 72.9093 10.2738V15.5152C72.9093 16.6461 71.9924 17.563 70.8615 17.563C69.7306 17.563 68.8137 16.6461 68.8137 15.5152V10.2738C68.8137 9.31391 68.0329 8.53313 67.0731 8.53313C66.1132 8.53313 65.3324 9.31391 65.3324 10.2738V37.1008C65.3324 38.2316 64.4157 39.1483 63.2846 39.1483Z\" fill=\"#141818\"/>\n\t\t<path d=\"M63.2846 39.1484C62.1537 39.1484 61.2368 38.2315 61.2368 37.1006V6.48493C61.2368 5.52509 60.456 4.74431 59.4962 4.74431C58.5363 4.74431 57.7555 5.52509 57.7555 6.48493V37.1007C57.7555 38.2317 56.8387 39.1485 55.7077 39.1485C54.5768 39.1485 53.6599 38.2317 53.6599 37.1007V6.48493C53.6599 3.26681 56.278 0.648682 59.4962 0.648682C62.7143 0.648682 65.3324 3.26681 65.3324 6.48493V37.1007C65.3324 38.2317 64.4157 39.1484 63.2846 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M69.4985 59.8368C69.1875 59.8368 68.8722 59.766 68.5761 59.616C67.5667 59.1057 67.1624 57.8736 67.6727 56.8646C68.7044 54.8241 70.2166 53.0205 72.0458 51.6482C74.7663 49.6077 76.3905 46.3591 76.3905 42.9583V26.5286C76.3905 25.5688 75.6097 24.788 74.6499 24.788C73.69 24.788 72.9092 25.5688 72.9092 26.5286V35.3958C72.9092 36.5268 71.9925 37.4436 70.8614 37.4436C69.7305 37.4436 68.8136 36.5268 68.8136 35.3958V26.5286C68.8136 23.3105 71.4317 20.6924 74.6499 20.6924C77.868 20.6924 80.4861 23.3105 80.4861 26.5286V42.9583C80.4861 47.6413 78.2496 52.1147 74.5035 54.9246C73.175 55.921 72.0771 57.2308 71.3277 58.7125C70.9669 59.4257 70.2463 59.8368 69.4985 59.8368Z\" fill=\"#141818\"/>\n\t\t<path d=\"M48.1308 39.1484C46.9999 39.1484 46.083 38.2315 46.083 37.1006V17.8514C46.083 16.8915 45.3022 16.1108 44.3424 16.1108C43.3825 16.1108 42.6017 16.8915 42.6017 17.8514V37.1008C42.6017 38.2317 41.6849 39.1486 40.5539 39.1486C39.423 39.1486 38.5061 38.2317 38.5061 37.1008V17.8514C38.5061 14.6333 41.1242 12.0151 44.3424 12.0151C47.5605 12.0151 50.1786 14.6333 50.1786 17.8514V37.1008C50.1786 38.2317 49.2619 39.1484 48.1308 39.1484Z\" fill=\"#141818\"/>\n\t\t<path d=\"M50.5145 23.2265C44.5276 23.2265 41.8414 26.5823 40.7846 28.5532C40.652 28.8008 40.2915 28.8004 40.1592 28.5527C39.106 26.5815 36.4346 23.2263 30.4481 23.2263C23.6285 23.2263 17.6296 27.8816 17.6296 36.3826C17.6296 39.8224 18.3306 42.7694 20.2764 46.0582C24.2414 52.7604 37.3032 61.4488 39.9862 63.161C40.2829 63.3502 40.6585 63.3509 40.9556 63.1623C43.6409 61.4584 56.705 52.8129 60.701 46.0582C62.6467 42.7694 63.3429 39.8224 63.3429 36.3826C63.3426 27.8818 57.334 23.2265 50.5145 23.2265Z\" fill=\"#F7CF47\"/>\n\t\t<path d=\"M40.4717 65.3515C39.9087 65.3515 39.36 65.1912 38.8845 64.8876C37.2651 63.8543 22.9356 54.5757 18.5136 47.1012C16.4859 43.6736 15.5815 40.3681 15.5815 36.3828C15.5815 31.8025 17.1348 27.9112 20.0736 25.1295C22.7651 22.5818 26.4497 21.1787 30.448 21.1787C35.6008 21.1787 38.6947 23.3289 40.485 25.4206C42.227 23.4253 45.3383 21.1787 50.5145 21.1787C54.5133 21.1787 58.1989 22.5817 60.893 25.1289C63.8355 27.9111 65.3906 31.8026 65.3906 36.3828C65.3906 40.3736 64.4878 43.679 62.4634 47.1012C58.009 54.6312 43.6726 63.8637 42.0526 64.8917C41.5787 65.1923 41.0319 65.3515 40.4717 65.3515ZM30.4481 25.2743C25.087 25.2743 19.6773 28.7092 19.6773 36.3828C19.6773 39.6361 20.3836 42.2179 22.0386 45.0157C25.6278 51.0828 37.5862 59.1456 40.4753 61.0381C46.158 57.3676 55.8311 50.2679 58.9383 45.0157C60.59 42.2237 61.2948 39.6418 61.2948 36.3828C61.2948 28.7092 55.8805 25.2743 50.5142 25.2743C45.8461 25.2743 43.6278 27.5837 42.589 29.5211C42.1706 30.3017 41.3594 30.7865 40.472 30.7865C39.5828 30.7865 38.7709 30.3001 38.3528 29.5175C37.3186 27.582 35.1075 25.2743 30.4481 25.2743Z\" fill=\"#141818\"/>\n\t</svg>,\n}\n\nconst appTheme = {IMAGES, SVGICON}\n\nexport default appTheme;","import React, {useRef, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport {IMAGES} from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\nimport cat from \"../assets/images/ic_assets/animals/gato.png\";\nimport dog from \"../assets/images/ic_assets/animals/cachorro.png\";\n\nimport iPhoneAppleWatch from './../assets/images/prizes/iPhoneAppleWatch.png';\n\nimport axios from \"axios\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n {id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0},\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let {raised, goal, supporters, daysLeft} = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n const modalConsultRef = useRef(null);\n\n return (\n <>\n <div className=\"page-content bg-white\">\n <div className=\"banner-one\">\n <section className=\"content-inner-1 p-0\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-xl-8 col-lg-8 m-b30 pt-1\">\n <h3> \n Sorteio pelos Animais\n </h3>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-xl-8 col-lg-8 m-b30\">\n <div className=\"fundraiser-single\">\n <div className=\"title\">\n <div className=\"premio\">\n <p><img src={iPhoneAppleWatch} alt=\"\" width={200} /></p>\n <h5>Concorra a 1 iPhone 15 Pro Max + 1 Apple Watch SE</h5>\n <p>A cada R$ 20,00 doados, uma chance de ganhar!</p>\n </div>\n <div className=\"descricao\">\n <ul className=\"fundraiser-bottom\">\n <li>\n <Link to={\"#\"} className=\"btn btn-primary btn-sm\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}\n data-bs-target=\"#modalDonate\">\n <i className=\"flaticon-like me-2\"></i> Adquira seu número\n </Link>\n </li>\n </ul>\n </div>\n <div className=\"detalhes-sorteio\">\n <p>\n Junte-se a nós nesta campanha incrÃvel em prol dos animais! Ao\n adquirir um número do Sorteio você não apenas concorre a um prêmio\n espetacular,\n mas\n também se junta a uma causa nobre e essencial para a proteção e\n cuidado de animais resgatados.\n </p>\n <h4>Detalhes do Sorteio:</h4>\n <p>Valor por número: R$ 20,00</p>\n <p>Data do sorteio: 31/01/2024</p>\n <p>Meio: Loteria Federal</p>\n <p>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/Certificado_autorizacao_010314152023-1.pdf\"\n target=\"_blank\">Certificado</a> \n <a href=\"https://cdn.ajudeumacausa.com.br/termos/Regulamento_SORTEIO_PELOS_ANIMAIS_-_0202307634-4.pdf\"\n target=\"_blank\">Regulamento</a>\n </p>\n </div>\n {/*\n <FoundCounter raised={raised} goal={goal} percentage={percentage}\n supporters={supporters} daysLeft={daysLeft} mobile={true}/>\n\n\n <div className=\"como-participar\">\n <h4>Como adquirir seu número e ajudar:</h4>\n <p>[BOTAO DA CAMPANHA]</p>\n </div>\n */}\n </div>\n <ul className=\"fundraiser-bottom\">\n <li>\n <Link to={\"#\"} className=\"btn btn-primary btn-sm\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}\n data-bs-target=\"#modalDonate\">\n <i className=\"flaticon-like me-2\"></i> Adquira seu número\n </Link>\n </li>\n <li><a href=\"https://wa.me/?text=https://www.sorteiopelosanimais.org/sorteio-pelos-animais-instituto-caramelo\" target=\"_blank\" rel=\"noreferrer\"\n className=\"btn whatsapp btn-primary btn-sm\"><i\n className=\"fa-brands fa-whatsapp me-2\"></i>Compartilhe</a></li>\n <li>\n <Link className=\"btn btn-donate btn-secondary btn-sm\"\n // Open modal\n onClick={() => {\n modalConsultRef.current.handleModalOpen();\n }}\n data-bs-toggle=\"modal\" data-bs-target=\"#modalConsultDonate\"><i\n className=\"flaticon-check me-3\"></i> Consultar meus números </Link>\n </li>\n </ul>\n </div>\n <div className=\"widget style-1 widget_refer\">\n <div className=\"widget-title\">\n <h4 className=\"title\">O Instituto Caramelo </h4>\n </div>\n <GallerySlider imgs={\n [\n {image: IMAGES.ICImageSlide1},\n {image: IMAGES.ICImageSlide2},\n {image: IMAGES.ICImageSlide3},\n {image: IMAGES.ICImageSlide4},\n {image: IMAGES.ICImageSlide5},\n {image: IMAGES.ICImageSlide6},\n {image: IMAGES.ICImageSlide7},\n {image: IMAGES.ICImageSlide8},\n ]\n }></GallerySlider>\n <br/>\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em\n prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco,\n recuperação e adoção. Mantemos um abrigo com cerca de 300 animais, entre\n cães e\n gatos, todos resgatados das ruas, onde eles são protegidos, tratados,\n alimentados e aguardam pela chance de serem adotados.\n </p>\n <p>O Instituto Caramelo fica na cidade de Ribeirão Pires/SP, em um\n terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário\n 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 3\n áreas de\n soltura, 30 gatis e canis e uma equipe de mais de 40 profissionais que se\n doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos\n bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as\n doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.\n </p>\n <Link to={\"https://institutocaramelo.org/\"} className=\"btn btn-outline-primary\"\n target=\"_blank\">Saiba\n mais</Link>\n </div>\n </div>\n\n\n </div>\n <div className=\"row banner-inner d-none\"></div>\n\n </div>\n </section>\n </div>\n <DoacaoSorteioModal\n ref={modalRef}\n ></DoacaoSorteioModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </div>\n </>\n )\n}\n\nexport default FundraiserDetail;","import {Link} from 'react-router-dom';\n\nimport bg from '../assets/images/background/bg2.jpg';\nimport {useCookies} from \"react-cookie\";\nconst RedirectWithCookies = () => {\n const [cookies, setCookie] = useCookies(['promoter']);\n\n // if has more than 1 path\n if (window.location.pathname.split('/').length > 2) {\n // the first path is the promoter id\n const promoterId = window.location.pathname.split('/')[1];\n\n // the second path is the promoter name\n const promoterName = window.location.pathname.split('/')[2];\n\n // Set the cookie with the promoter name and expiration date indeterminate\n setCookie('promoterName', promoterName, {path: '/', maxAge: 60 * 60 * 24 * 365 * 10});\n\n // set the cookie with the promoter id and expiration date indeterminate\n setCookie('promoterId', promoterId, {path: '/', maxAge: 60 * 60 * 24 * 365 * 10});\n\n window.location.href = `https://ajudeumacausa.com.br/`;\n\n } else {\n // the first path is the promoter name\n const promoterName = window.location.pathname.split('/')[1];\n\n // Set the cookie with the promoter name and expiration date indeterminate\n setCookie('promoterName', promoterName, {path: '/', maxAge: 60 * 60 * 24 * 365 * 10});\n\n window.location.href = `https://ajudeumacausa.com.br/`;\n }\n};\n\nexport default RedirectWithCookies;","import React, {useRef, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport {IMAGES} from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\nimport cat from \"../assets/images/ic_assets/animals/gato.png\";\nimport dog from \"../assets/images/ic_assets/animals/cachorro.png\";\n\nimport iPhoneAppleWatch from './../assets/images/prizes/iPhoneAppleWatch.png';\nimport iPhone14 from './../assets/images/prizes/iphone14.jpg';\nimport AppleVision from '../assets/images/prizes/applevision-c.png';\n\nimport DogBanner from './../assets/images/prizes/dog-banner.png';\n\nimport axios from \"axios\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n {id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0},\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let {raised, goal, supporters, daysLeft} = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n\n const modalConsultRef = useRef(null);\n\n return (\n <>\n <main>\n <section id=\"sorteio\" className=\"featured bg-secondary\">\n <div className=\"overlay\"></div>\n <div className=\"container d-flex align-items-center\">\n <div className=\"row row-cols-md-2 \">\n <div className=\"px-5\">\n <h5 className=\"subtitle text-primary\">DOE E AJUDE</h5>\n <h1>Sorteio pelos Animais</h1>\n <p>\n Junte-se a nós nesta campanha incrÃvel em prol dos animais! Ao adquirir um número do\n Sorteio você não apenas concorre a um prêmio espetacular, mas também se junta a uma\n causa nobre e essencial para a proteção e cuidado de animais resgatados.\n </p>\n <div className=\"prize\">\n <img src={AppleVision}/>\n </div>\n <div className=\"prize\">\n <img src={iPhone14}/>\n </div>\n </div>\n <div>\n\n <div className=\"featured-cta mx-md-5\">\n <img src={DogBanner}/>\n <h2>Concorra a 1 <b className=\"text-primary\">Apple Vision Pro 256GB</b> e 1 <b\n className=\"text-primary\">iPhone 14 256GB</b></h2>\n <p><b>A cada R$ 30,00 doados, uma chance de ganhar!</b></p>\n <button className=\"btn btn-md btn-primary my-3 p-3\"\n id=\"doar\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}>\n <i className=\"lab la-gratipay\"></i>ADQUIRA\n SEU NÚMERO\n </button>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section id=\"\" className=\"aos-item cta-wrapper\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row row-cols-1 row-cols-md-4 cta-bar\">\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Valor por número:</h5>\n <hr className=\"divider\"/>\n <h4>R$ 30,00</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Data do sorteio:</h5>\n <hr className=\"divider\"/>\n <h4>20/04/2024</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Mais Informações</h5>\n <hr className=\"divider\"/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/certificado_iPhone_14_e_Vision_Pro_autorizacao_010321932024.pdf\" target=\"_blank\">Certificado</a><br/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/regulamento_iphone_14_e_Vision_Pro_0202400147.pdf\" target=\"_blank\">Regulamento</a>\n </div>\n <div className=\"col bg-primary\">\n <h5 className=\"subtitle text-black\">CONSULTE SEUS NÚMEROS</h5>\n <hr className=\"divider\"/>\n <button className=\"btn btn-sm btn-dark p-3\" data-bs-toggle=\"modal\"\n id={\"consultarNumero\"}\n onClick={() => {\n modalConsultRef.current.handleModalOpen();\n }}\n data-bs-target=\"#consultarModal\"><i className=\"las la-search\"></i> CONSULTAR\n </button>\n </div>\n </div>\n </div>\n </section>\n <section id=\"sobre\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">SOBRE</h5>\n <h2>Instituto Caramelo</h2>\n <hr className=\"divider\"/>\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco, recuperação e\n adoção. Mantemos um abrigo com cerca de 300 animais, entre cães e gatos, todos\n resgatados das ruas, onde eles são protegidos, tratados, alimentados e aguardam pela\n chance de serem adotados.</p>\n\n <p>O Instituto Caramelo fica em Ribeirão Pires, na região metropolitana, em um terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 5 áreas de\n soltura, 35 canis, 4 gatis e uma equipe de mais de 40 profissionais que se doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.</p>\n\n <a href=\"https://institutocaramelo.org/\" className=\"btn btn-md btn-dark\"\n target=\"_blank\">Saiba mais</a>\n\n </div>\n <div className=\"col-12 col-md-6 px-md-5\">\n <img src={IMAGES.About00} className=\"rounded w-100 m-md-3\"/>\n <div className=\"row\">\n <div className=\"col\">\n <img src={IMAGES.About03} className=\"rounded w-100 m-md-3\"/>\n\n </div>\n <div className=\"col\">\n <img src={IMAGES.About04} className=\"rounded w-100 m-md-3\"/>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n <DoacaoSorteioModal\n ref={modalRef}\n ></DoacaoSorteioModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </>\n )\n}\n\nexport default FundraiserDetail;","import React, {useRef, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport {IMAGES} from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\nimport cat from \"../assets/images/ic_assets/animals/gato.png\";\nimport dog from \"../assets/images/ic_assets/animals/cachorro.png\";\n\nimport HondaCity from '../assets/images/prizes/Novo-Honda-City-2018-6-150px.jpeg';\n\nimport DogBanner from './../assets/images/prizes/dog-banner.png';\n\nimport axios from \"axios\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n {id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0},\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let {raised, goal, supporters, daysLeft} = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n\n const modalConsultRef = useRef(null);\n\n return (\n <>\n <main>\n <section id=\"sorteio\" className=\"featured bg-secondary\">\n <div className=\"overlay\"></div>\n <div className=\"container d-flex align-items-center\">\n <div className=\"row row-cols-md-2 \">\n <div className=\"px-5\">\n <h5 className=\"subtitle text-primary\">DOE E AJUDE</h5>\n <h1>Sorteio pelos Animais</h1>\n <p>\n Junte-se a nós nesta campanha incrÃvel em prol dos animais! Ao adquirir um número do\n Sorteio você não apenas concorre a um prêmio espetacular, mas também se junta a uma\n causa nobre e essencial para a proteção e cuidado de animais resgatados.\n </p>\n <div className=\"prize-square\">\n <img src={HondaCity}/>\n <p style={{fontSize: '11px'}}>Foto meramente ilustrativa. Consulte o regulamento.</p>\n </div>\n </div>\n <div>\n <div className=\"featured-cta mx-md-5\">\n <img src={DogBanner}/>\n <h2>Concorra a 1 <b className=\"text-primary\">HONDA/CITY LX CVT 2018, CINZA.</b></h2>\n <p><b>A cada R$ 30,00 doados, uma chance de ganhar!</b></p>\n <div className={\"alert-info text-center animated bounce p-3\"} style={{fontSize: '18px', fontWeight: 'bold', backgroundColor: '#ffeb3b', color: '#000'}}>\n Número da Loteria: 3 76.191<br/>\n Número ganhador por aproximação: 3 76.184<br/>\n Ganhadora: Fernanda M. C. L.<br/>\n CPF: 066.XXX.XXX-06\n</div>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section id=\"\" className=\"aos-item cta-wrapper\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row row-cols-1 row-cols-md-4 cta-bar\">\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Valor por número:</h5>\n <hr className=\"divider\"/>\n <h4>R$ 30,00</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Data do sorteio:</h5>\n <hr className=\"divider\"/>\n <h4>21/09/2024</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Mais Informações</h5>\n <hr className=\"divider\"/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/Certificado_autorizacao_sorteio+pelos+animais+-+SETEMBRO-+ok+010330182024.pdf\" target=\"_blank\">Certificado</a><br/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/Regulamento_SORTEIO+PELOS+ANIMAIS+-+SETEMBRO+OK++-+0202400870.pdf\" target=\"_blank\">Regulamento</a>\n </div>\n <div className=\"col bg-primary\">\n <h5 className=\"subtitle text-black\">CONSULTE SEUS NÚMEROS</h5>\n <hr className=\"divider\"/>\n <button className=\"btn btn-sm btn-dark p-3\" data-bs-toggle=\"modal\"\n id={\"consultarNumero\"}\n onClick={() => {\n modalConsultRef.current.handleModalOpen();\n }}\n data-bs-target=\"#consultarModal\"><i className=\"las la-search\"></i> CONSULTAR\n </button>\n </div>\n </div>\n </div>\n </section>\n <section id=\"sobre\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">SOBRE</h5>\n <h2>Instituto Caramelo</h2>\n <hr className=\"divider\"/>\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco, recuperação e\n adoção. Mantemos um abrigo com cerca de 300 animais, entre cães e gatos, todos\n resgatados das ruas, onde eles são protegidos, tratados, alimentados e aguardam pela\n chance de serem adotados.</p>\n\n <p>O Instituto Caramelo fica em Ribeirão Pires, na região metropolitana, em um terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 5 áreas de\n soltura, 35 canis, 4 gatis e uma equipe de mais de 40 profissionais que se doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.</p>\n\n <a href=\"https://institutocaramelo.org/\" className=\"btn btn-md btn-dark\"\n target=\"_blank\">Saiba mais</a>\n\n </div>\n <div className=\"col-12 col-md-6 px-md-5\">\n <img src={IMAGES.About00} className=\"rounded w-100 m-md-3\"/>\n <div className=\"row\">\n <div className=\"col\">\n <img src={IMAGES.About03} className=\"rounded w-100 m-md-3\"/>\n\n </div>\n <div className=\"col\">\n <img src={IMAGES.About04} className=\"rounded w-100 m-md-3\"/>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n <DoacaoSorteioModal\n ref={modalRef}\n ></DoacaoSorteioModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </>\n )\n}\n\nexport default FundraiserDetail;\n","import React, { useState, forwardRef, useImperativeHandle, useRef, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Button, Modal, Overlay, Spinner, Tooltip } from 'react-bootstrap';\n\nimport { useCallback } from 'react';\nimport axios from \"axios\";\nimport { formatNumber } from \"chart.js/helpers\";\nimport { CopyToClipboard } from \"react-copy-to-clipboard/src\"; // Import at the top of your file\nimport { IMaskInput } from 'react-imask';\nimport ReCAPTCHA from \"react-google-recaptcha\";\nimport * as Sentry from \"@sentry/react\";\n\nimport { useCookies } from \"react-cookie\";\n\nconst { REACT_APP_STAGE } = process.env;\n\nconst DoacaoRSModal = forwardRef((props, ref) => {\n\n const [donateModal, setDonateModal] = useState(false);\n const [displayError, setDisplayError] = useState(false);\n const [displayErrorMessage, setDisplayErrorMessage] = useState(\"\");\n\n const [show, setShow] = useState(false);\n const target = useRef(null);\n\n const [totalRaffle, setTotalRaffleValor] = useState(1);\n\n const [paymentMethod, setPaymentMethod] = useState(2);\n\n const [qrCodeBase64, setQrCodeBase64] = useState(\"\");\n const [valor, setValor] = useState();\n const [pixCopyPaste, setPixCopyPaste] = useState(\"\");\n const [donationCod, setDonationCod] = useState(\"\");\n\n const [showCopy, setShowCopy] = useState(false);\n\n const [cpf_cnpj, setCpfCnpj] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [emailError, setEmailError] = useState(false);\n\n const [name, setName] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n\n const [promoter] = useCookies(['promoter']);\n\n const filterName = (e) => {\n // Remove special characters, but keep accents\n const value = e.target.value.normalize();\n\n // \" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"\n //\n const sanitized = value.replace(/[^\\w\\s]/gi, '');\n }\n\n const setPhoneInput = (e) => {\n setPhone(e.target.value)\n }\n\n const [zipcode, setZipcode] = useState(\"\");\n\n const [address, setAddress] = useState(\"\");\n const [district, setDistrict] = useState(\"\");\n const [city, setCity] = useState(\"\");\n const [state, setState] = useState(\"\");\n\n const [donationValue, setDonationValue] = useState();\n\n const [terms, setTerms] = useState(false);\n const [termsError, setTermsError] = useState(false);\n\n const [zipcodeError, setZipcodeError] = useState(false);\n const [phoneError, setPhonecodeError] = useState(false);\n\n const [numbers, setNumbers] = useState([]);\n\n const numbersTags = numbers.map((number) => {\n return (\n <span className=\"badge bg-secondary m-1\">{number}</span>\n )\n });\n\n const recaptchaRef = React.createRef();\n\n const [consultPaymentTime, setStartConsultPaymentTime] = useState();\n\n useEffect(() => {\n let interval;\n\n interval = setInterval(() => {\n // If page is 2 or consultPaymentTime is less 5 minutes, stop interval\n if (page === 2 && (new Date().getTime() - consultPaymentTime) < 300000) {\n consultPayment();\n }\n }, 5000);\n\n return () => {\n clearInterval(interval);\n }\n });\n\n const consultPayment = function () {\n const data = {\n \"Document\": cpf_cnpj.replace(/\\D/g, ''),\n \"Email\": email,\n \"DonationCod\": donationCod,\n \"g-recaptcha-response\": '',\n \"CauseCod\": 4,\n }\n\n axios.post(`https://${REACT_APP_STAGE}.ajudeumacausa.com.br/v1/raffle/GetMyRaffle`, data)\n .then(res => {\n\n setNumbers(res.data.Details.map((number) => {\n return number.Number;\n }));\n\n setPage(3);\n\n }).catch((error) => {\n })\n }\n\n\n // Run a function every 5 seconds, stop after first successful request or after 5 minutes\n\n const consultZipCode = function (zipcode) {\n setZipcode(zipcode);\n\n if (zipcode.length === 9) {\n axios.get('https://viacep.com.br/ws/' + zipcode + '/json/')\n .then(response => {\n if (response.data.erro) {\n setZipcodeError(true);\n return;\n }\n\n setZipcodeError(false)\n\n if (response.data.logradouro === \"\") {\n setAddress(\"Sem endereço\");\n } else {\n setAddress(response.data.logradouro);\n }\n\n if (response.data.bairro === \"\") {\n setDistrict(\"Sem bairro\");\n } else {\n setDistrict(response.data.bairro);\n }\n\n setCity(response.data.localidade);\n setState(response.data.uf);\n }).catch(err => {\n setZipcodeError(true);\n return;\n });\n }\n }\n\n // Validar e-mail\n const validateEmail = (email) => {\n return String(email)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|.(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n );\n };\n\n // Validar CPF ou CNPJ\n const validateCpfCnpj = (value) => {\n const cpfCnpj = value.replace(/\\D/g, '');\n\n if (cpfCnpj.length === 11) {\n return validateCpf(cpfCnpj);\n } else if (cpfCnpj.length === 14) {\n return validateCnpj(cpfCnpj);\n } else if (cpfCnpj.length < 11) {\n return true;\n } else {\n return false;\n }\n }\n\n function validateCnpj(cnpj) {\n\n cnpj = cnpj.replace(/[^\\d]+/g, '');\n\n if (!cnpj || cnpj.length != 14\n || cnpj == \"00000000000000\"\n || cnpj == \"11111111111111\"\n || cnpj == \"22222222222222\"\n || cnpj == \"33333333333333\"\n || cnpj == \"44444444444444\"\n || cnpj == \"55555555555555\"\n || cnpj == \"66666666666666\"\n || cnpj == \"77777777777777\"\n || cnpj == \"88888888888888\"\n || cnpj == \"99999999999999\")\n return false\n var tamanho = cnpj.length - 2\n var numeros = cnpj.substring(0, tamanho)\n var digitos = cnpj.substring(tamanho)\n var soma = 0\n var pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(0)) return false;\n tamanho = tamanho + 1\n numeros = cnpj.substring(0, tamanho)\n soma = 0\n pos = tamanho - 7\n for (var i = tamanho; i >= 1; i--) {\n soma += numeros.charAt(tamanho - i) * pos--\n if (pos < 2) pos = 9\n }\n resultado = soma % 11 < 2 ? 0 : 11 - soma % 11\n if (resultado != digitos.charAt(1)) return false\n return true;\n }\n\n function validateCpf(cpf) {\n cpf = cpf.replace(/[^\\d]+/g, '');\n if (cpf == '') return false;\n // Elimina CPFs invalidos conhecidos\n if (cpf.length != 11 ||\n cpf == \"00000000000\" ||\n cpf == \"11111111111\" ||\n cpf == \"22222222222\" ||\n cpf == \"33333333333\" ||\n cpf == \"44444444444\" ||\n cpf == \"55555555555\" ||\n cpf == \"66666666666\" ||\n cpf == \"77777777777\" ||\n cpf == \"88888888888\" ||\n cpf == \"99999999999\")\n return false;\n // Valida 1o digito\n let add = 0;\n for (let i = 0; i < 9; i++)\n add += parseInt(cpf.charAt(i)) * (10 - i);\n let rev = 11 - (add % 11);\n if (rev == 10 || rev == 11)\n rev = 0;\n if (rev != parseInt(cpf.charAt(9)))\n return false;\n // Valida 2o digito\n add = 0;\n for (let i = 0; i < 10; i++)\n add += parseInt(cpf.charAt(i)) * (11 - i);\n rev = 11 - (add % 11);\n if (rev == 10 || rev == 11)\n rev = 0;\n if (rev != parseInt(cpf.charAt(10)))\n return false;\n return true;\n }\n\n const [page, setPage] = useState(1);\n\n const [botaoPagar, setBotaoPagar] = useState(false);\n\n const paymentMethodClass = (paymentMethodElement) => {\n if (paymentMethod === paymentMethodElement) {\n return \"btn btn-primary\";\n } else {\n return \"btn btn-light\";\n }\n }\n\n const setShowToolTip = useCallback(() => {\n setShow(true);\n setTimeout(() => {\n setShow(false);\n }, 1000);\n });\n\n const copyPix = () => {\n navigator.clipboard.writeText(pixCopyPaste);\n }\n\n const limiteNumeros = 100;\n\n const handleNumerosChange = (e) => {\n // If value is not a number, set it to 1\n if (e.target.value === 0 || e.target.value === \"0\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (isNaN(e.target.value) || e.target.value === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n // filter out non-digit characters\n const sanitized = e.target.value.replace(/\\D/g, '');\n // remove leading zeros\n const value = parseInt(sanitized, 10);\n\n if (value > limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n setTotalRaffleValor(value);\n };\n\n const incrementNumeros = (quantity) => {\n if (totalRaffle >= limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n\n if (totalRaffle === 0) {\n setTotalRaffleValor(1);\n return;\n }\n\n // solve NaN issue\n if (isNaN(totalRaffle)) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle + quantity > limiteNumeros) {\n setTotalRaffleValor(limiteNumeros);\n return;\n }\n\n setTotalRaffleValor(prevNumeros => prevNumeros + quantity);\n };\n\n const decrementNumeros = (quantity = 1) => {\n if (totalRaffle === 0) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle === \"\") {\n setTotalRaffleValor(1);\n return;\n }\n\n if (isNaN(totalRaffle)) {\n setTotalRaffleValor(1);\n return;\n }\n\n if (totalRaffle - quantity < 1) {\n setTotalRaffleValor(1);\n return;\n }\n\n setTotalRaffleValor(prevNumeros => prevNumeros > 1 ? prevNumeros - quantity : 1);\n };\n\n useImperativeHandle(ref, () => ({\n handleModalOpen() {\n setDonateModal(true);\n if (page === 3) {\n setPage(1);\n }\n\n if (page === 2) {\n setStartConsultPaymentTime(new Date().getTime());\n }\n }\n }));\n\n function handleModalClose() {\n setDonateModal(false);\n }\n\n const nav = useNavigate();\n\n // submit form using axios\n\n const FormSubmit = (e) => {\n\n e.preventDefault();\n\n if (!validateEmail(email)) {\n setEmailError(true);\n return;\n }\n\n if (!terms) {\n setTermsError(true);\n return;\n }\n\n const transaction = Sentry.startTransaction({ name: \"raffle-buyraffle\" });\n\n const data = {\n \"Document\": cpf_cnpj.replace(/\\D/g, ''),\n \"Email\": email,\n \"Name\": name,\n \"Telephone\": phone,\n \"Zipcode\": zipcode.replace('-', ''),\n \"PaymentMethod\": paymentMethod,\n \"TotalRaffle\": totalRaffle,\n \"PayAdministrativeFees\": false,\n \"TermsAndConditions\": terms,\n \"Address\": address,\n \"District\": district,\n \"City\": city,\n \"State\": state,\n 'grecaptcharesponse': '',\n 'PromoterName': promoter.promoterName,\n 'PromoterId': promoter.promoterId,\n 'CauseCod': 4,\n 'DonationValue': donationValue ? donationValue : 10,\n }\n setBotaoPagar(true);\n\n const span = transaction.startChild({ op: \"axios-post\" }); // This function returns a Span\n axios.post(`https://${REACT_APP_STAGE}.ajudeumacausa.com.br/v1/raffle/BuyRaffle`, data)\n .then(response => {\n\n if (response.data.ErroGeneric) {\n setDisplayError(true);\n setDisplayErrorMessage(response.data.ErroGeneric);\n\n setTimeout(() => {\n setDisplayError(false);\n setDisplayErrorMessage(\"\");\n }, 5000);\n return;\n }\n\n setValor(response.data.Value);\n setQrCodeBase64(response.data.QrCodeBase64);\n setPixCopyPaste(response.data.PixCopyPaste);\n setDonationCod(response.data.DonationCod);\n\n setPage(2);\n\n setStartConsultPaymentTime(new Date().getTime());\n\n }).finally(() => {\n setBotaoPagar(false);\n }).catch(err => {\n setDisplayError(true);\n setDisplayErrorMessage(\"Erro ao gerar Pix, tente novamente.\");\n\n setTimeout(() => {\n setDisplayError(false);\n setDisplayErrorMessage(\"\");\n }, 5000);\n }).finally(() => {\n span.finish();\n transaction.finish();\n });\n }\n\n return (\n <Modal className=\"fade modal-wrapper\" id=\"modalDonate\" show={donateModal} onHide={setDonateModal}\n backdrop=\"static\" centered>\n <div className=\"modal-content\">\n <div className={page === 1 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Participe dessa causa</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <form onSubmit={(e) => FormSubmit(e)}>\n <div className=\"row\">\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <input name=\"dzName\" required=\"\" type=\"text\" maxLength=\"255\"\n className=\"form-control\" placeholder=\"Nome Completo\"\n value={name} onChange={(e) => setName(e.target.value)}\n />\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n mask={[\"000.000.000-00\", \"00.000.000/0000-00\"]}\n className={validateCpfCnpj(cpf_cnpj) ? \"form-control\" : \"form-control is-invalid\"}\n value={cpf_cnpj}\n onChange={(e) => setCpfCnpj(e.target.value)}\n onComplete={(e) => setCpfCnpj(e)}\n placeholder=\"CPF/CNPJ\"\n name=\"dzCpfCnpj\" required\n ></IMaskInput>\n <div className=\"invalid-feedback\">\n {cpf_cnpj.length > 14 ? \"CNPJ inválido\" : \"CPF inválido\"}\n </div>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <input name=\"dzEmail\"\n required\n maxLength={255}\n type=\"text\"\n className={emailError ? \"form-control is-invalid\" : \"form-control\"}\n placeholder=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value.length > 255 ? e.target.value.substring(0, 255) : e.target.value)}\n />\n </div>\n <div className=\"invalid-feedback\">\n E-mail inválido\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n mask={[{ mask: '(00) 0000-0000' }, { mask: '(00) 00000-0000' }]}\n name=\"dzPhone\"\n className={phoneError ? \"form-control is-invalid\" : \"form-control\"}\n placeholder=\"Telefone\"\n required\n value={phone}\n onChange={(e) => setPhoneInput(e)}\n onComplete={(e) => setPhone(e)}\n >\n </IMaskInput>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group\">\n <div className=\"input-group\">\n <IMaskInput\n type='number'\n name=\"dzDonationValue\"\n className={\"form-control\"}\n placeholder=\"Valor de doação\"\n required\n value={donationValue}\n onChange={(e) => setDonationValue(e.target.value)}\n >\n </IMaskInput>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mb-2\">\n <div className=\"form-group mb-0\"\n style={{ display: 'grid', gridTemplateColumns: 'auto auto', gap: '10px' }}>\n <input type=\"checkbox\" className=\"form-check-input form-check-input-terms p-r5\"\n name=\"terms\"\n id=\"terms\"\n value={terms} onChange={(e) => setTerms(e.target.checked)}\n required />\n <div className=\"label-and-feedback\">\n <label className=\"form-label px-2\" htmlFor=\"terms\">\n Li e aceito os <a className=\"fw-bold\" target=\"_blank\"\n href=\"https://cdn.ajudeumacausa.com.br/termos/termosdeuso-202312.pdf\">termos</a> de\n uso\n e <a className=\"fw-bold\" target=\"_blank\"\n href=\"https://cdn.ajudeumacausa.com.br/termos/privacidade-202312.pdf\">condições\n de\n privacidade</a>.\n </label>\n <div className=\"invalid-feedback\">\n </div>\n </div>\n </div>\n <div className=\"form-group mb-0 text-center py-2\">\n <div\n className={(displayError ? \"alert alert-danger\" : 'd-none') + \" fade show\"}>{displayErrorMessage}</div>\n <Button variant=\"primary\" type=\"submit\" name=\"submit\"\n className=\"btn btn-primary btn-block\" disabled={botaoPagar}>\n <Spinner\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n role=\"status\"\n aria-hidden=\"true\"\n className={botaoPagar ? '' : 'd-none'}\n />\n {' '}\n Doar R$ {donationValue ? donationValue : 10},00\n </Button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div className={page === 2 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Dados para pagamento</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <div className=\"row\" style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"col-lg-12\"\n style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"form-group\">\n <div className=\"input-group mb-0\">\n <img src={\"data:image/png;base64, \" + qrCodeBase64} alt=\"QR Code\" />\n </div>\n </div>\n </div>\n\n <div\n className={showCopy ? \"alert alert-success fade show text-center my-2\" : \"alert fade d-none\"}\n role=\"alert\">\n Código copiado!<br />\n </div>\n <div className=\"col-lg-12\"\n style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"form-group mb-0\">\n <div className=\"input-group mb-0\">\n <CopyToClipboard text={pixCopyPaste} onCopy={() => {\n setShowCopy(true);\n setTimeout(() => {\n setShowCopy(false);\n }, 2000)\n }}>\n <button className=\"btn btn-primary btn-sm\">Copiar código Pix\n </button>\n </CopyToClipboard>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12 mt-2\"\n style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"row\">\n <div className=\"col-lg-12\"\n style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"form-group\">\n <div className=\"input-group mb-0\">\n <h5>Valor: R$ {formatNumber(valor, {\n style: 'currency',\n currency: 'BRL'\n })},00</h5>\n </div>\n <div className=\"input-group mb-3\">\n <div className=\"text-xl-center\">\n Intermediada por <b>AJUDE UMA CAUSA</b>\n <br />\n CNPJ: <b>53.131.729/0001-63</b>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"col-lg-12\"\n style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <div className=\"form-group mb-0 text-center\">\n <Button variant=\"primary\" type=\"button\" name=\"submit\"\n className=\"btn btn-primary btn-block\" onClick={() => {\n setPage(1)\n }}>\n {' '}\n Voltar\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className={page === 3 ? \"modal-content\" : \"d-none\"}>\n <div className=\"modal-header\">\n <h5 className=\"modal-title\">Números do sorteio</h5>\n <button type=\"button\" className=\"btn-close\" onClick={() => handleModalClose()}><i\n className=\"flaticon-close\"></i></button>\n </div>\n <div className=\"modal-body\">\n <div className=\"row\">\n <div className={\"col-lg-12\"}>\n <div className={\"alert alert-success text-center\"} role=\"alert\">\n <p className={\"mb-0\"}>Obrigado pela sua doação!</p>\n <p className={\"mb-0\"}>Enviaremos para o seu e-mail todos os detalhes do\n sorteio.</p>\n <p className={\"mb-0\"}>Seus números da sorte são:</p>\n </div>\n </div>\n <div className={\"col-lg-12\"}>\n {numbersTags}\n </div>\n </div>\n </div>\n </div>\n <ReCAPTCHA\n ref={recaptchaRef}\n size=\"invisible\"\n sitekey=\"6LeYASkpAAAAAEqY8ZBGuL-2Y2GRTPR1pF-fhQjl\"\n />\n </div>\n </Modal>\n );\n});\nexport default DoacaoRSModal;\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport { IMAGES } from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\nimport cat from \"../assets/images/ic_assets/animals/gato.png\";\nimport dog from \"../assets/images/ic_assets/animals/cachorro.png\";\n\nimport HondaCity from '../assets/images/prizes/Novo-Honda-City-2018-6-150px.jpeg';\n\nimport DogBanner from './../assets/images/prizes/dog-banner.png';\n\nimport axios from \"axios\";\nimport DoacaoRSModal from '../components/Modal/DoacaoRSModal';\n\nimport {Helmet} from \"react-helmet\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n { id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0 },\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let { raised, goal, supporters, daysLeft } = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n\n const modalConsultRef = useRef(null);\n\n const [width, setWidth] = useState(window.innerWidth);\n\n function handleWindowSizeChange() {\n setWidth(window.innerWidth);\n }\n useEffect(() => {\n document.title = 'Ajude o RS - Instituto Caramelo';\n\n // Set description meta tag\n const metaDescription = document.querySelector('meta[name=\"description\"]');\n metaDescription.setAttribute(\"content\", \"Ajude o RS - Instituto Caramelo\");\n metaDescription.setAttribute(\"og:description\", \"Ajude o RS - Instituto Caramelo\");\n metaDescription.setAttribute(\"og:title\", \"Ajude o RS - Instituto Caramelo\");\n\n window.addEventListener('resize', handleWindowSizeChange);\n return () => {\n window.removeEventListener('resize', handleWindowSizeChange);\n }\n }, []);\n\n\n const isMobile = width <= 768;\n\n const carousel = [\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-2.jpeg\",\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-7.jpeg\",\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-4.jpeg\",\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-9.jpeg\",\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-10.jpeg\",\n \"https://cdn.ajudeumacausa.com.br/causes/ajude-o-rs/ajude-o-rs-11.jpeg\",\n ]\n\n const [carouselIndex, setCarouselIndex] = useState(0);\n\n return (\n <>\n <main>\n <Helmet>\n <title>Ajude o RS - Instituto Caramelo</title>\n <meta name=\"description\" content=\"Ajude o RS - Instituto Caramelo\" />\n <meta property=\"og:title\" content=\"Ajude o RS - Instituto Caramelo\" />\n <meta property=\"og:description\" content=\"Ajude o RS - Instituto Caramelo\" />\n </Helmet>\n <section id=\"sorteio\" className=\"featured bg-secondary\">\n <div className=\"overlay\"></div>\n <div className=\"container d-flex align-items-center\">\n <div className=\"row row-cols-md-2 \">\n <div className=\"px-5\">\n <h5 className=\"subtitle text-primary\">DOE E AJUDE</h5>\n <h1>Ajude o RS</h1>\n <p className={\"pb-4 text-left\"}>\n O Instituto Caramelo tem como compromisso apoiar o resgate de animais em desastres,\n como fizemos em Mariana, Brumadinho, enchentes da Bahia e Pantanal. <br />\n Ao lado de quem atua na ponta, enviamos recursos e ficamos à frente de logÃsticas\n complexas para que as operações possam acontecer! <br />\n Faça a sua doação e nos ajude a salvar vidas! <br />\n Somente juntos somos capazes de mudar essa triste realidade. <br />\n <br />\n <b>Como estamos agindo no Rio Grande do Sul?</b>\n <ul>\n <li>Envio de 3 socorristas</li>\n <li>Compra de 3 barcos</li>\n <li>LogÃstica do envio dos barcos</li>\n <li>Caminhão com 1,4 T de ração + caixas de transporte</li>\n <li>Carro 4x4</li>\n </ul>\n\n <div className={\"text-center\"}>\n Estamos firmes nas operações e agindo conforme demanda uma vez que o cenário muda a cada dia!\n <br />\n <h5><b>Sua doação é o que nos possibilita ir a diante!</b>\n </h5>\n </div>\n\n </p>\n </div>\n <div>\n <div className=\"featured-cta mx-md-5\">\n <img src={DogBanner} />\n <h2><b className=\"text-primary\">Ajude o RS</b></h2>\n <p><b>Faça a diferença hoje: ajude-nos a trazer esperança e assistência à s vÃtimas das enchentes no Rio Grande do Sul!</b></p>\n <button className=\"btn btn-md btn-primary my-3 p-3\"\n id=\"doar\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}>\n <i className=\"lab la-gratipay\"></i>FAÇA UMA DOAÇÃO\n </button>\n </div>\n </div>\n </div>\n </div>\n </section>\n {/*\n Carrousel\n\n */}\n <section id=\"\">\n\n </section>\n <section id=\"galeria\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <GallerySlider imgs={\n [\n {image: carousel[0]},\n {image: carousel[1]},\n {image: carousel[2]},\n {image: carousel[3]},\n {image: carousel[4]},\n {image: carousel[5]}\n ]\n }></GallerySlider>\n </section>\n <section id=\"sobre\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">SOBRE</h5>\n <h2>Instituto Caramelo</h2>\n <hr className=\"divider\" />\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco, recuperação e\n adoção. Mantemos um abrigo com cerca de 300 animais, entre cães e gatos, todos\n resgatados das ruas, onde eles são protegidos, tratados, alimentados e aguardam pela\n chance de serem adotados.</p>\n\n <p>O Instituto Caramelo fica em Ribeirão Pires, na região metropolitana, em um terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 5 áreas de\n soltura, 35 canis, 4 gatis e uma equipe de mais de 40 profissionais que se doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.</p>\n\n <a href=\"https://institutocaramelo.org/\" className=\"btn btn-md btn-dark\"\n target=\"_blank\">Saiba mais</a>\n\n </div>\n <div className=\"col-12 col-md-6 px-md-5\">\n <img src={IMAGES.About00} className=\"rounded w-100 m-md-3\" />\n <div className=\"row\">\n <div className=\"col\">\n <img src={IMAGES.About03} className=\"rounded w-100 m-md-3\" />\n\n </div>\n <div className=\"col\">\n <img src={IMAGES.About04} className=\"rounded w-100 m-md-3\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n <DoacaoRSModal\n ref={modalRef}\n ></DoacaoRSModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </>\n )\n}\n\nexport default FundraiserDetail;","import React, {useRef, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport {IMAGES} from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\nimport cat from \"../assets/images/ic_assets/animals/gato.png\";\nimport dog from \"../assets/images/ic_assets/animals/cachorro.png\";\n\nimport FiatMobi2025 from '../assets/images/prizes/fiat-mobi-like-2025.png';\n\nimport DogBanner from './../assets/images/prizes/dog-banner.png';\n\nimport \"../assets/vendor/animate/animate.css\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n {id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0},\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let {raised, goal, supporters, daysLeft} = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n\n const modalConsultRef = useRef(null);\n\n return (\n <>\n <main>\n <section id=\"sorteio\" className=\"featured bg-secondary\">\n <div className=\"overlay\"></div>\n <div className=\"container d-flex align-items-center\">\n <div className=\"row row-cols-md-2 \">\n <div className=\"px-5\">\n <h5 className=\"subtitle text-primary\">DOE E AJUDE</h5>\n <h1>Sorteio pelos Animais</h1>\n <p>\n Junte-se a nós nesta campanha incrÃvel em prol dos animais! Ao adquirir um número do\n Sorteio você não apenas concorre a um prêmio espetacular, mas também se junta a uma\n causa nobre e essencial para a proteção e cuidado de animais resgatados.\n </p>\n <div className=\"prize-square\">\n <img className={\"w-75\"} src={FiatMobi2025}/>\n <p style={{fontSize: '11px'}}>Foto meramente ilustrativa. Consulte o regulamento.</p>\n </div>\n </div>\n <div>\n <div className=\"featured-cta mx-md-5\">\n <img src={DogBanner}/>\n <h2>Concorra a 1 <b className=\"text-primary\">FIAT/MOBI LIKE 1.0, cor prata,\n combustÃvel flex, ano modelo 2025 0KM.</b></h2>\n <p><b>A cada R$ 30,00 doados, uma chance de ganhar!</b></p>\n <button className=\"btn btn-md btn-primary my-3 p-3\"\n id=\"doar\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}>\n <i className=\"lab la-gratipay\"></i>ADQUIRA\n SEU NÚMERO\n </button>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section id=\"\" className=\"aos-item cta-wrapper\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row row-cols-1 row-cols-md-4 cta-bar\">\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Valor por número:</h5>\n <hr className=\"divider\"/>\n <h4>R$ 30,00</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Data do sorteio:</h5>\n <hr className=\"divider\"/>\n <h4>21/12/2024</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Mais Informações</h5>\n <hr className=\"divider\"/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/005-sorteio-fiat-mobi-2025/Certificado_autorizacao_SORTEIO+PELOS+ANIMAIS+-+NATAL+-+010370602024.pdf\" target=\"_blank\">Certificado</a><br/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/005-sorteio-fiat-mobi-2025/Regulamento_SORTEIO+PELOS+ANIMAIS+-+natal+-+0202406043-1.pdf\" target=\"_blank\">Regulamento</a>\n </div>\n <div className=\"col bg-primary\">\n <h5 className=\"subtitle text-black\">CONSULTE SEUS NÚMEROS</h5>\n <hr className=\"divider\"/>\n <button className=\"btn btn-sm btn-dark p-3\" data-bs-toggle=\"modal\"\n id={\"consultarNumero\"}\n onClick={() => {\n modalConsultRef.current.handleModalOpen();\n }}\n data-bs-target=\"#consultarModal\"><i className=\"las la-search\"></i> CONSULTAR\n </button>\n </div>\n </div>\n </div>\n </section>\n <section id=\"sobre\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">SOBRE</h5>\n <h2>Instituto Caramelo</h2>\n <hr className=\"divider\"/>\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco, recuperação e\n adoção. Mantemos um abrigo com cerca de 300 animais, entre cães e gatos, todos\n resgatados das ruas, onde eles são protegidos, tratados, alimentados e aguardam pela\n chance de serem adotados.</p>\n\n <p>O Instituto Caramelo fica em Ribeirão Pires, na região metropolitana, em um terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 5 áreas de\n soltura, 35 canis, 4 gatis e uma equipe de mais de 40 profissionais que se doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.</p>\n\n <a href=\"https://institutocaramelo.org/\" className=\"btn btn-md btn-dark\"\n target=\"_blank\">Saiba mais</a>\n\n </div>\n <div className=\"col-12 col-md-6 px-md-5\">\n <img src={IMAGES.About00} className=\"rounded w-100 m-md-3\"/>\n <div className=\"row\">\n <div className=\"col\">\n <img src={IMAGES.About03} className=\"rounded w-100 m-md-3\"/>\n\n </div>\n <div className=\"col\">\n <img src={IMAGES.About04} className=\"rounded w-100 m-md-3\"/>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n <DoacaoSorteioModal\n ref={modalRef}\n ></DoacaoSorteioModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </>\n )\n}\n\nexport default FundraiserDetail;\n","import React, {useRef, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport GallerySlider from '../components/Fundraiser/GallerySlider';\nimport DoacaoSorteioModal from \"../components/Modal/DoacaoSorteioModal\";\nimport DoacaoConsultaModal from \"../components/Modal/DoacaoConsultaModal\";\n\nimport CountUp from \"react-countup\";\nimport {IMAGES} from \"../constant/theme\";\n\nimport FoundCounter from \"../components/Widget/FoundCounter\";\n\n\nimport MotoLevaIphone from '../assets/images/prizes/Moto.png';\n\nimport DogBanner from './../assets/images/prizes/dog-banner.png';\n\nimport \"../assets/vendor/animate/animate.css\";\n\nconst FundraiserDetail = () => {\n\n const formater = new Intl.NumberFormat('pt-BR', {\n style: 'currency',\n currency: 'BRL',\n });\n\n const [list, setList] = React.useState(\n {id: 1, raised: 0, goal: 0, supporters: 0, daysLeft: 0},\n );\n\n React.useEffect(() => {\n getDetails();\n }, []);\n\n function getDetails() {\n\n }\n\n const percentGoal = (raised, goal) => {\n return (raised / goal) * 100;\n };\n\n let {raised, goal, supporters, daysLeft} = list;\n const percentage = percentGoal(raised, goal);\n\n // raised = formater.format(raised);\n goal = formater.format(goal);\n\n const modalRef = useRef(null);\n\n const modalConsultRef = useRef(null);\n\n return (\n <>\n <main>\n <section id=\"sorteio\" className=\"featured bg-secondary\">\n <div className=\"overlay\"></div>\n <div className=\"container d-flex align-items-center\">\n <div className=\"row row-cols-md-2 \">\n <div className=\"px-5\">\n <h5 className=\"subtitle text-primary\">DOE E AJUDE</h5>\n <h1>Sorteio pelos Animais</h1>\n <p>\n Junte-se a nós nesta campanha incrÃvel em prol dos animais! Ao adquirir um número do\n Sorteio você não apenas concorre a um prêmio espetacular, mas também se junta a uma\n causa nobre e essencial para a proteção e cuidado de animais resgatados.\n </p>\n <div className=\"prize-square\">\n <img className={\"w-75\"} src={MotoLevaIphone}/>\n <p style={{fontSize: '11px'}}>Foto meramente ilustrativa. Consulte o regulamento.</p>\n </div>\n </div>\n <div>\n <div className=\"featured-cta mx-md-5\">\n <img src={DogBanner}/>\n <h2>Concorra a 1 <b className=\"text-primary\"> MOTO ELÉTRICA EG1 DA MARCA LEVA, cor preta ano 2024 modelo 2025 0KM.</b> e 1\n <b className=\"text-primary\"> IPHONE 16 WHITE, com 256GB.</b>\n </h2>\n <p><b>A cada R$ 30,00 doados, uma chance de ganhar!</b></p>\n <button className=\"btn btn-md btn-primary my-3 p-3\"\n id=\"doar\"\n onClick={() => {\n modalRef.current.handleModalOpen();\n }}>\n <i className=\"lab la-gratipay\"></i>ADQUIRA\n SEU NÚMERO\n </button>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section id=\"\" className=\"aos-item cta-wrapper\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row row-cols-1 row-cols-md-4 cta-bar\">\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Valor por número:</h5>\n <hr className=\"divider\"/>\n <h4>R$ 30,00</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Data do sorteio:</h5>\n <hr className=\"divider\"/>\n <h4>26/04/2025</h4>\n </div>\n <div className=\"col\">\n <h5 className=\"subtitle text-primary\">Mais Informações</h5>\n <hr className=\"divider\"/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/007-sorteio-moto-leva-iphone/Certificado_autorizacao_ Sorteio Moto e iPhone 010395932025.pdf\" target=\"_blank\">Certificado</a><br/>\n <a href=\"https://cdn.ajudeumacausa.com.br/termos/007-sorteio-moto-leva-iphone/Regulamento_ Sorteio Moto e iPhone.pdf\" target=\"_blank\">Regulamento</a>\n </div>\n <div className=\"col bg-primary\">\n <h5 className=\"subtitle text-black\">CONSULTE SEUS NÚMEROS</h5>\n <hr className=\"divider\"/>\n <button className=\"btn btn-sm btn-dark p-3\" data-bs-toggle=\"modal\"\n id={\"consultarNumero\"}\n onClick={() => {\n modalConsultRef.current.handleModalOpen();\n }}\n data-bs-target=\"#consultarModal\"><i className=\"las la-search\"></i> CONSULTAR\n </button>\n </div>\n </div>\n </div>\n </section>\n <section id=\"sobre\" className=\"py-5 aos-item\" data-aos=\"fade-up\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-12 col-md-6\">\n <h5 className=\"subtitle text-primary\">SOBRE</h5>\n <h2>Instituto Caramelo</h2>\n <hr className=\"divider\"/>\n <p>Fundado em fevereiro de 2015, a partir da união de um grupo de pessoas em prol do\n propósito de cuidar bem e adotar bem cada animal, o Instituto Caramelo atua\n principalmente no resgate de animais feridos ou em situação de risco, recuperação e\n adoção. Mantemos um abrigo com cerca de 300 animais, entre cães e gatos, todos\n resgatados das ruas, onde eles são protegidos, tratados, alimentados e aguardam pela\n chance de serem adotados.</p>\n\n <p>O Instituto Caramelo fica em Ribeirão Pires, na região metropolitana, em um terreno\n de 27.000 metros quadrados. Há centro cirúrgico com atendimento veterinário 24\n horas, núcleo de fisioterapia, adestramento para tratamento psicológico, 5 áreas de\n soltura, 35 canis, 4 gatis e uma equipe de mais de 40 profissionais que se doam por\n completo para que o abrigo seja apenas uma fase de passagem na vida dos bichos. São\n necessários cerca de 300 mil reais por mês para sustentá-lo e são as doações,\n parcerias e vendas na loja que tornam esse sonho possÃvel.</p>\n\n <a href=\"https://institutocaramelo.org/\" className=\"btn btn-md btn-dark\"\n target=\"_blank\">Saiba mais</a>\n\n </div>\n <div className=\"col-12 col-md-6 px-md-5\">\n <img src={IMAGES.About00} className=\"rounded w-100 m-md-3\"/>\n <div className=\"row\">\n <div className=\"col\">\n <img src={IMAGES.About03} className=\"rounded w-100 m-md-3\"/>\n\n </div>\n <div className=\"col\">\n <img src={IMAGES.About04} className=\"rounded w-100 m-md-3\"/>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n <DoacaoSorteioModal\n ref={modalRef}\n ></DoacaoSorteioModal>\n <DoacaoConsultaModal ref={modalConsultRef}>\n </DoacaoConsultaModal>\n </>\n )\n}\n\nexport default FundraiserDetail;\n","import React, {useRef} from 'react';\nimport {Navigate, Route, Routes, Outlet} from 'react-router-dom';\n\nimport ScrollToTop from './../layouts/ScrollToTop';\nimport Header from './../layouts/Header2';\nimport Footer from './../layouts/Footer2';\nimport Error from './Error';\nimport UnderMaintenance from './UnderMaintenance';\nimport ComingSoon from './ComingSoon';\nimport FundraiserDetail from './FundraiserDetail';\n\nimport RedirectWithCookies from \"./RedirectWithCookies\";\nimport FundraiserDetail_VisionPro from \"./FundraiserDetail_VisionPro\";\nimport FundraiserDetail_Honda from \"./FundraiserDetail_Honda\";\nimport FundraiserDetail_RS from \"./FundraiserDetail_RS\";\nimport FundraiserDetail_FiatMobi from \"./FundraiserDetail_FiatMobi\";\nimport FundraiserDetail_MotoLevaIphone from \"./FundraiserDetail_MotoLevaIphone\";\n\nfunction Index() {\n\n return (\n <>\n <Routes>\n <Route path='/' element={<Navigate to=\"/sorteio-pelos-animais-instituto-caramelo-moto-leva-lg-iphone\"/>}/>\n <Route path='/error-404' element={<Error/>}/>\n <Route path='/under-maintenance' exact element={<UnderMaintenance/>}/>\n <Route path='/coming-soon' exact element={<ComingSoon/>}/>\n <Route path='/sorteio-pelos-animais-instituto-caramelo' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail/>}/>\n </Route>\n <Route path='/sorteio-pelos-animais-instituto-caramelo-apple-vision-pro-2024' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail_VisionPro/>}/>\n </Route>\n <Route path='/sorteio-pelos-animais-instituto-caramelo-honda-city' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail_Honda/>}/>\n </Route>\n <Route path='/sorteio-pelos-animais-instituto-caramelo-fiat-mobi-2025' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail_FiatMobi/>}/>\n </Route>\n <Route path='/sorteio-pelos-animais-instituto-caramelo-moto-leva-lg-iphone' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail_MotoLevaIphone/>}/>\n </Route>\n <Route path='/ajude-o-rs' element={<MainLayout/>}>\n <Route index element={<FundraiserDetail_RS/>}/>\n </Route>\n <Route path=\"*\" element={<RedirectWithCookies replace/>}/>\n </Routes>\n <ScrollToTop/>\n </>\n )\n}\n\nfunction MainLayout() {\n return (\n <div className=\"page-wraper\">\n <Header/>\n <Outlet/>\n <Footer/>\n </div>\n )\n}\n\nexport default Index;\n","import React from 'react';\nimport Route from './pages/Route';\t\n\nimport \"./assets/css/style.css\";\n//import \"./assets/css/skin/skin-1.css\";\nimport \"swiper/css\";\n\n\nfunction App() {\n return (\n <>\n\t\t <Route />\n </>\n );\n}\n\nexport default App;","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","let direction = 'ltr';\n\nexport const dezThemeSet = [\n\t{ /* Default */\n\t\t//typography: \"poppins\",\n\t\t//version: \"default\",\n\t\t//layout: \"vertical\",\n\t\t//headerBg: \"color_1\",\n\t\t//navheaderBg: \"color_1\",\n\t\t//sidebarBg: \"color_1\",\n\t\t//sidebarStyle: \"full\",\n\t\t//sidebarPosition: \"fixed\",\n\t\t//headerPosition: \"fixed\",\n\t\t//containerLayout: \"full\",\n\t\t//direction: direction\n\t},\n\t// { /* Demo Theme 1 */\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"verticle\",\n\t// \tnavheaderBg: \"color_12\",\n\t// \theaderBg: \"color_12\",\n\t// \tsidebarStyle: \"full\",\n\t// \tsidebarBg: \"color_1\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"wide\",\n\t// \tprimary: \"color_12\",\n\t// \tdirection: direction\n\t// },\n\t// { /* Demo Theme 2 */\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"vertical\",\n\t// \tnavheaderBg: \"color_4\",\n\t// \theaderBg: \"color_4\",\n\t// \tsidebarStyle: \"overlay\",\n\t// \tsidebarBg: \"color_1\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"boxed\",\n\t// \tprimary: \"color_10\",\n\t// \tdirection: direction\n\t// },\n\t// {\n\t// \t/* Demo Theme 3 */\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"vertical\",\n\t// \tnavheaderBg: \"color_7\",\n\t// \theaderBg: \"color_1\",\n\t// \tsidebarStyle: \"compact\",\n\t// \tsidebarBg: \"color_7\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"wide\",\n\t// \tprimary: \"color_7\",\n\t// \tdirection: direction\n\t// },\n\t// {\n\t// \t/* Demo Theme 4 */\t\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"horizontal\",\n\t// \tnavheaderBg: \"color_10\",\n\t// \theaderBg: \"color_10\",\n\t// \tsidebarStyle: \"full\",\n\t// \tsidebarBg: \"color_1\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"wide\",\n\t// \tprimary: \"color_10\",\n\t// \tdirection: direction\n\t\t\n\t// },\n\t// {\n\t// \t/* Demo Theme 5 */\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"horizontal\",\n\t// \tnavheaderBg: \"color_12\",\n\t// \theaderBg: \"color_12\",\n\t// \tsidebarStyle: \"full\",\n\t// \tsidebarBg: \"color_12\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"wide\",\n\t// \tprimary: \"color_12\",\n\t// \tdirection: direction\n\t// },\n\t// {\n\t// \t/* Demo Theme 6 */\n\t// \ttypography: \"poppins\",\n\t// \tversion: \"light\",\n\t// \tlayout: \"vertical\",\n\t// \tnavheaderBg: \"color_11\",\n\t// \theaderBg: \"color_1\",\n\t// \tsidebarStyle: \"mini\",\n\t// \tsidebarBg: \"color_11\",\n\t// \tsidebarPosition: \"fixed\",\n\t// \theaderPosition: \"fixed\",\n\t// \tcontainerLayout: \"wide\",\n\t// \tprimary: \"color_11\",\n\t// \tdirection: direction\n\t// },\n\t\n];\n\t","import React, { createContext, useEffect, useState, useReducer } from \"react\";\nimport {dezThemeSet} from './ThemeDemo';\n\nexport const ThemeContext = createContext();\n\nconst reducer = (previousState, updatedState) => ({\n\t ...previousState,\n\t ...updatedState,\n});\n\nconst initialState = { \n primaryColor : \"color-skin-1\", \n background : {value:\"defualt\", label:\"defualt\"}, \n windowWidth: 0,\n windowHeight: 0,\n};\n\nconst ThemeContextProvider = (props) => {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\t const { \n primaryColor , \n background, \n } = state;\n\t\n\n const body = document.querySelector(\"body\");\n \n const backgroundOption = [\n { value: \"default\", label: \"default\" },\n { value: \"data-typography-1\", label: \"data-typography-1\" },\n ];\n \n const changePrimaryColor = (name) => {\t\n\t dispatch({primaryColor: name });\t \n body.setAttribute(\"data-primary\", name);\n };\n \n\n const changeBackground = (name) => {\n body.setAttribute(\"data-theme-version\", name.value); \n dispatch({background: name});\n };\n \n const setDemoTheme = (theme,direction) => {\n var setAttr = {};\t\t \n var themeSettings = dezThemeSet[theme];\t \n body.setAttribute(\"data-typography\", themeSettings.typography); \n setAttr.value = themeSettings.version;\n changeBackground(setAttr); \n changePrimaryColor(themeSettings.primary); \n\t\n\t};\n\n useEffect(() => {\n\t const body = document.querySelector(\"body\");\n \n body.setAttribute(\"data-theme-version\", \"default\");\n \n body.setAttribute(\"data-primary\", \"color-skins-1\");\n \n\t\tlet resizeWindow = () => {\t\t\t\n // dispatch({windowWidth:window.innerWidth});\t\t\n\t\t};\n resizeWindow();\n window.addEventListener(\"resize\", resizeWindow);\n return () => window.removeEventListener(\"resize\", resizeWindow);\n }, []);\n\n return (\n <ThemeContext.Provider\n value={{\n body,\n \n backgroundOption,\n primaryColor,\t \t\n changePrimaryColor, \n changeBackground,\n background,\n setDemoTheme,\n\t}}\n >\n {props.children}\n </ThemeContext.Provider>\n );\n};\n\nexport default ThemeContextProvider;\n\n\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { BrowserRouter } from 'react-router-dom';\nimport $ from 'jquery';\n\nimport * as Sentry from \"@sentry/react\";\n\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nimport ThemeContext from \"./context/ThemeContext\";\nimport ReactGA from 'react-ga4';\n\nReactGA.initialize('G-8RYDVS9LJ4');\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\n\nconst {REACT_APP_STAGE} = process.env;\n\nconst domain = window.location.hostname;\n\nif (!domain.endsWith('ajudeumacausa.com.br') && !domain.endsWith('localhost') && REACT_APP_STAGE === 'api') {\n // replace the domain to ajudeumacausa.com.br, and keep paths\n const path = window.location.pathname;\n const newUrl = `https://ajudeumacausa.com.br${path}`;\n\n window.location.href = newUrl;\n}\n\nSentry.init({\n dsn: \"https://0d00078cb9a826bc667491837116ba17@o4506384935288832.ingest.sentry.io/4506399648448512\",\n integrations: [\n new Sentry.BrowserTracing({\n // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled\n tracePropagationTargets: [\"localhost\", /^https:\\/\\/apidev\\.ajudeumacausa\\.com\\.br/],\n }),\n new Sentry.Replay(),\n ],\n // Performance Monitoring\n tracesSampleRate: 0.1, // Capture 100% of the transactions\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});\n\nroot.render(\n <React.StrictMode>\n <BrowserRouter>\n <ThemeContext>\n <App />\n </ThemeContext>\n </BrowserRouter>\n </React.StrictMode>\n);\n\nreportWebVitals();\n","import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction, spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction() as IdleTransaction;\n if (WINDOW.document!.hidden && activeTransaction) {\n const statusType: SpanStatusType = 'cancelled';\n\n const { op, status } = spanToJSON(activeTransaction);\n\n DEBUG_BUILD &&\n logger.log(`[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${op}`);\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n activeTransaction.setStatus(statusType);\n }\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n"],"names":["isBrowserBundle","__SENTRY_BROWSER_BUNDLE__","getSDKSource","isNodeEnv","Object","prototype","toString","call","process","module","exports","e","window","global","self","t","n","NaN","o","i","a","r","c","s","parseInt","u","d","l","Function","f","m","Math","max","p","min","b","Date","now","v","TypeError","y","apply","h","k","x","setTimeout","O","arguments","this","w","g","leading","maxWait","trailing","cancel","clearTimeout","flush","valueOf","replace","test","slice","j","E","N","z","C","A","q","L","T","M","S","D","H","$","W","P","forEach","Array","addedNodes","removedNodes","length","dataset","aos","children","concat","Y","MutationObserver","WebKitMutationObserver","MozMutationObserver","_","isSupported","ready","document","observe","documentElement","childList","subtree","B","F","enumerable","configurable","writable","defineProperty","key","I","assign","hasOwnProperty","K","G","J","Q","R","navigator","userAgent","vendor","opera","U","value","substr","mobile","phone","style","V","ie11","createEvent","initCustomEvent","detail","CustomEvent","dispatchEvent","X","options","position","node","data","animated","classList","remove","animatedClassNames","id","mirror","out","once","in","add","pageYOffset","Z","isNaN","offsetLeft","offsetTop","tagName","scrollLeft","scrollTop","offsetParent","top","left","ee","getAttribute","te","useClassNames","animatedClassName","split","filter","initClassName","innerHeight","Number","querySelectorAll","offsetHeight","offset","anchorPlacement","ne","map","oe","ie","ae","delay","easing","duration","disable","startEvent","disableMutationObserver","throttleDelay","debounceDelay","re","all","atob","ce","addEventListener","se","de","ue","removeAttribute","tablet","init","console","info","querySelector","setAttribute","indexOf","readyState","refresh","refreshHard","str","obj","dec","decode","index","eqIdx","endIdx","lastIndexOf","trim","undefined","val","charCodeAt","tryDecode","name","opt","enc","encode","fieldContentRegExp","maxAge","isFinite","floor","domain","path","expires","__toString","isDate","toUTCString","httpOnly","secure","partitioned","priority","toLowerCase","sameSite","decodeURIComponent","encodeURIComponent","deselectCurrent","require","clipboardToIE11Formatting","text","debug","message","reselectPrevious","range","selection","mark","success","createRange","getSelection","createElement","textContent","ariaHidden","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","stopPropagation","format","preventDefault","clipboardData","warn","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","prompt","removeRange","removeAllRanges","removeChild","endVal","version","defaults","startVal","decimalPlaces","useEasing","useGrouping","useIndianSeparators","smartEasingThreshold","smartEasingAmount","separator","decimal","prefix","suffix","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","finalEndVal","countDown","paused","count","startTime","remaining","frameVal","easingFn","toFixed","printValue","rAF","requestAnimationFrame","update","onCompleteCallback","formatNumber","abs","numerals","easeOutExpo","pow","formattingFn","validateValue","resetDuration","String","el","getElementById","onScrollFns","push","handleScroll","onscroll","scrollY","getBoundingClientRect","height","start","reset","determineDirectionAndSmartEasing","onStartCallback","pauseResume","cancelAnimationFrame","plugin","render","innerHTML","ensureNumber","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","type","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","targetStatics","sourceStatics","descriptor","factory","noGlobal","arr","getProto","flat","array","class2type","hasOwn","fnToString","ObjectFunctionString","support","isFunction","nodeType","item","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","doc","script","head","parentNode","toType","rhtmlSuffix","jQuery","selector","context","fn","isArrayLike","nodeName","elem","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","first","eq","last","even","grep","_elem","odd","len","end","sort","splice","extend","copy","copyIsArray","clone","target","deep","isPlainObject","isArray","expando","random","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","ownerDocument","second","invert","matches","callbackExpect","arg","guid","Symbol","iterator","_i","pop","whitespace","rtrimCSS","RegExp","contains","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","disabled","dir","next","childNodes","els","find","seed","nid","match","groups","newSelector","newContext","exec","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","join","qsaError","select","cache","cacheLength","shift","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","getById","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","tag","className","input","sortDetached","expr","elements","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","parent","useCache","diff","firstChild","lastChild","pseudo","args","setFilters","idx","matched","not","matcher","compile","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","safeActiveElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","nextSibling","header","button","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","submit","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","filters","unique","getText","isXML","selectors","until","truncate","is","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","contents","prev","sibling","cur","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","flag","createOptions","firing","memory","fired","locked","list","queue","firingIndex","fire","stopOnFalse","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","that","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","stack","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","set","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","attrs","dequeue","startLength","hooks","_queueHooks","unshift","stop","setter","clearQueue","tmp","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","div","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","on","types","one","origFn","event","off","leverageNative","isSetup","saved","isTrigger","delegateType","stopImmediatePropagation","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","marginDelta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","scrollboxSizeBuggy","margin","padding","border","expand","expanded","parts","propHooks","run","percent","eased","pos","step","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","time","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","noConflict","propIsEnumerable","propertyIsEnumerable","test1","test2","test3","shouldUseNative","from","symbols","toObject","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","number","symbol","any","arrayOf","element","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","CopyToClipboard","React","_defineProperty","only","onClick","_text","_onCopy","_options","countup_js","ownKeys","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","toPrimitive","_toPrimitive","_extends","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","_slicedToArray","_arrayWithHoles","return","_iterableToArrayLimit","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useEventCallback","ref","useRef","useCallback","_len","_excluded$1","DEFAULTS","decimals","startOnMount","enableReinitialize","useCountUp","filteredProps","fromEntries","entries","_ref","_useMemo","useMemo","onEnd","onStart","onPauseResume","onReset","onUpdate","instanceProps","countUpRef","timerRef","isInitializedRef","createInstance","CountUp","createCountUpInstance","getCountUp","recreate","countUp","newCountUp","restart","newEnd","maybeInitialize","shouldReset","_excluded","aa","ca","da","Set","ea","fa","ha","ia","ja","ka","la","ma","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","ra","sa","ta","pa","qa","oa","setAttributeNS","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","prepareStackTrace","Reflect","construct","includes","Pa","Qa","$$typeof","_payload","_init","Ra","Sa","Ta","Va","_valueTracker","getValue","setValue","stopTracking","Ua","Wa","Xa","Ya","defaultChecked","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","eb","fb","defaultSelected","gb","dangerouslySetInnerHTML","hb","ib","jb","kb","lb","mb","nb","MSApp","execUnsafeLocalFunction","ob","pb","borderImageOutset","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columns","flex","flexPositive","flexNegative","flexOrder","gridRowSpan","gridColumnSpan","lineClamp","tabSize","strokeDasharray","strokeDashoffset","strokeWidth","qb","rb","sb","charAt","substring","tb","menuitem","area","br","embed","hr","img","keygen","link","meta","track","wbr","ub","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","flags","Wb","memoizedState","dehydrated","Xb","Zb","child","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","log","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","Tc","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","isDehydrated","containerInfo","Xc","Yc","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","Uc","jd","kd","ld","md","nd","od","pd","qd","rd","_reactName","_targetInst","cancelBubble","persist","isPersistent","wd","xd","yd","sd","isTrusted","ud","vd","Ad","getModifierState","zd","fromElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","repeat","locale","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Vd","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","be","fe","ge","he","le","color","date","datetime","email","month","search","tel","week","me","listeners","pe","qe","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","Le","Me","HTMLIFrameElement","contentWindow","Ne","contentEditable","Oe","focusedElem","selectionRange","selectionStart","selectionEnd","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","setStart","setEnd","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","Ub","instance","listener","of","pf","qf","rf","sf","capture","passive","tf","uf","vf","wf","na","xa","$a","ba","je","char","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","Hf","Promise","Jf","queueMicrotask","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","_owner","_stringRef","refs","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","_currentValue","bh","childLanes","dependencies","firstContext","lanes","dh","eh","memoizedValue","fh","gh","hh","interleaved","ih","jh","kh","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","lh","mh","eventTime","lane","payload","nh","oh","ph","qh","rh","sh","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","ReactCurrentDispatcher","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","Uh","Vh","Wh","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","Xh","Yh","Zh","$h","ai","getSnapshot","bi","ci","di","lastEffect","stores","ei","fi","gi","hi","ii","destroy","deps","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","readContext","useContext","useImperativeHandle","useInsertionEffect","useReducer","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ci","Di","Ei","isMounted","_reactInternals","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","Fi","shouldComponentUpdate","isPureReactComponent","Gi","updater","Hi","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ii","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Ji","digest","Ki","Li","Mi","WeakMap","Ni","Oi","Pi","Qi","componentDidCatch","Ri","componentStack","Si","pingCache","Ti","Ui","Vi","Wi","ReactCurrentOwner","Xi","Yi","Zi","$i","aj","bj","cj","dj","baseLanes","cachePool","transitions","ej","fj","gj","hj","ij","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","jj","kj","pendingContext","lj","zj","Aj","Bj","Cj","mj","nj","oj","fallback","pj","qj","sj","dgst","tj","uj","_reactRetry","rj","subtreeFlags","vj","wj","isBackwards","rendering","renderingStartTime","tail","tailMode","xj","Dj","Ej","Fj","wasMultiple","multiple","suppressHydrationWarning","onclick","size","createElementNS","autoFocus","Gj","Hj","Ij","Jj","Kj","WeakSet","Lj","Mj","Nj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","_reactRootContainer","Wj","Xj","Yj","Zj","onCommitFiberUnmount","componentWillUnmount","ak","bk","ck","dk","ek","isHidden","fk","gk","hk","ik","jk","kk","__reactInternalSnapshotBeforeUpdate","Vk","lk","mk","nk","ok","pk","qk","rk","sk","tk","Infinity","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","finishedWork","finishedLanes","Pk","timeoutHandle","Qk","Rk","Sk","Tk","Uk","mutableReadLanes","Bc","Oj","onCommitFiberRoot","mc","onRecoverableError","Wk","onPostCommitFiberRoot","Xk","Yk","$k","isReactComponent","pendingChildren","al","mutableSourceEagerHydrationData","bl","pendingSuspenseBoundaries","dl","fl","gl","hl","il","yj","Zk","kl","reportError","ll","_internalRoot","ml","nl","ol","pl","rl","ql","unmount","unstable_scheduleHydration","stringify","form","sl","usingClientEntryPoint","Events","tl","findFiberByHostInstance","bundleType","rendererPackageName","ul","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","supportsFiber","inject","createPortal","cl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","ArrayBuffer","isView","equal","it","titleCase","redactingEmail","_str","title","smallWords","mightBeEmail","redacted","redactEmail","GA4","_gtag","_interopRequireDefault","_format","_excluded2","_excluded3","__esModule","_typeof","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","enumerableOnly","sym","_objectSpread","_s","_e","_x","_r","_arr","_n","_d","_defineProperties","hint","prim","res","_this","Constructor","_classCallCheck","isInitialized","_testMode","_currentMeasurementId","_hasLoadedGA","_isQueuing","_queueGtag","GA_MEASUREMENT_ID","gtagUrl","dataLayer","gtag","gaOptions","mapFields","cookieUpdate","cookieExpires","cookieDomain","cookieFlags","userId","clientId","anonymizeIp","contentGroup1","contentGroup2","contentGroup3","contentGroup4","contentGroup5","allowAdFeatures","allowAdPersonalizationSignals","nonInteraction","page","hitCallback","reduce","_ref2","initConfigs","trackingId","gtagOptions","_options$testMode","testMode","_loadGA","config","mergedGtagOptions","_toGtagOptions","queues","fieldsObject","_gaCommand","eventCategory","eventAction","eventLabel","eventValue","event_category","event_label","non_interaction","_len2","_key2","_gaCommandSendEvent","_args$","rest","hitType","timingCategory","timingVar","timingValue","timingLabel","_this$_toGtagOptions","page_path","page_title","page_location","_len3","_key3","_gaCommandSendPageview","_args$2","_len4","_key4","_gaCommandSendEventParameters","_gaCommandSendPageviewParameters","_gaCommandSendTiming","_len5","_key5","command","_len6","_key6","_gaCommandSend","_gaCommandSet","_len7","_key7","readyCallback","property","ga","optionsOrName","category","label","fieldObject","protoProps","staticProps","_window","_ga","nodeInterop","_getRequireWildcardCache","newObj","hasPropertyDescriptor","desc","_interopRequireWildcard","cacheBabelInterop","cacheNodeInterop","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","React__default","canUseDOM","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","WrappedComponent","mountedInstances","emitChange","SideEffect","_PureComponent","subClass","superClass","__proto__","peek","rewind","recordedState","_proto","PureComponent","getDisplayName","__self","__source","jsx","jsxs","setState","forceUpdate","_status","_result","default","Children","Component","act","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","sortIndex","performance","setImmediate","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","ranges","getRangeAt","classes","appendClass","parseValue","newClass","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","leafPrototypes","ns","def","definition","chunkId","promises","miniCssF","globalThis","hmd","needAttach","nc","onScriptComplete","doneFns","toStringTag","installedChunks","installedChunkData","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","Action","PopStateEventType","invariant","warning","cond","getHistoryState","usr","createLocation","pathname","parsePath","createPath","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","v5Compat","globalHistory","history","Pop","getIndex","handlePop","nextIndex","createURL","origin","URL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","score","every","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","startsWith","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","segments","isOptional","endsWith","required","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","segment","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","compiledParams","regexpSource","paramName","compilePath","captureGroups","splatValue","startIndex","nextChar","getInvalidPathError","field","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","isRouteErrorResponse","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","future","routePathnamesJson","UNSAFE_getResolveToMatches","useNavigateUnstable","OutletContext","useResolvedPath","_temp2","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","errors","useRouteError","lightgrey","preStyles","backgroundColor","fontStyle","defaultErrorElement","RenderErrorBoundary","super","revalidation","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","findIndex","renderFallback","fallbackIndex","v7_partialHydration","HydrateFallback","hydrateFallbackElement","loaderData","needsToRunLoader","loader","reduceRight","shouldRenderHydrateFallback","alreadyWarned","getChildren","hookName","ctx","useRouteContext","thisRoute","Navigate","_ref4","isStatic","jsonPath","Outlet","useOutlet","Route","_props","Router","_ref5","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","__reactRouterVersion","startTransitionImpl","ReactDOM","BrowserRouter","historyRef","createBrowserHistory","setStateImpl","v7_startTransition","newState","isBrowser","ABSOLUTE_URL_REGEX","Link","_ref7","absoluteHref","reloadDocument","preventScrollReset","unstable_viewTransition","UNSAFE_NavigationContext","isExternal","currentUrl","targetUrl","_temp","joinedPathname","useHref","internalOnClick","replaceProp","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","DEBUG_BUILD","__SENTRY_DEBUG__","isGlobalObj","GLOBAL_OBJ","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","wrappedFuncs","wrappedLevels","level","originalConsoleMethod","logger","enable","isEnabled","makeLogger","objectToString","isError","wat","isInstanceOf","isBuiltin","isErrorEvent","isDOMError","isString","isParameterizedString","isPrimitive","isEvent","isThenable","Boolean","isVueViewModel","__isVue","_isVue","WINDOW","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","currentElem","MAX_TRAVERSE_HEIGHT","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","_oO","HTMLElement","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getComponentName","safeJoin","delimiter","output","isMatchingPattern","requireExactStringMatch","stringMatchesSomePattern","testString","fill","replacementFactory","wrapped","markFunctionWrapped","addNonEnumerableProperty","o_O","getOriginalFunction","__sentry_original__","convertToPlainObject","getOwnProperties","serializeEventTarget","extractedProps","dropUndefinedKeys","inputValue","_dropUndefinedKeys","memoizationMap","isPojo","memoVal","uuid4","crypto","msCrypto","getRandomByte","randomUUID","getRandomValues","typedArray","Uint8Array","getFirstException","exception","getEventDescription","event_id","eventId","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","currentMechanism","mechanism","handled","mergedData","checkOrSetAlreadyCaught","__sentry_captured__","arrayify","maybeArray","States","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","reason","executor","__init","__init2","__init3","__init4","_state","PENDING","_handlers","_resolve","_reject","onfulfilled","onrejected","_executeHandlers","finally","onfinally","isRejected","_setResult","RESOLVED","REJECTED","_value","cachedHandlers","getGlobalEventProcessors","addGlobalEventProcessor","notifyEventProcessors","processors","processor","ONE_SECOND_IN_MS","dateTimestampInSeconds","timestampInSeconds","approxStartingTimeOrigin","timeOrigin","createUnixTimestampInSecondsFunc","_browserPerformanceTimeOriginMode","browserPerformanceTimeOrigin","threshold","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","DEFAULT_ENVIRONMENT","makeSession","startingTime","session","sid","timestamp","started","ignoreDuration","toJSON","toISOString","did","abnormal_mechanism","release","environment","ip_address","ipAddress","user_agent","sessionToJSON","updateSession","user","closeSession","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirst","frames","lines","line","cleanedLine","parser","frame","localStack","function","filename","stripSentryFramesAndReverse","defaultFunctionName","getFunctionName","normalize","maxProperties","visit","ERROR","normalizeToSize","maxSize","normalized","encodeURI","utf8Length","jsonSize","hasWeakSet","inner","memoBuilder","memoize","unmemoize","stringified","_events","objName","getConstructorName","stringifyValue","remainingDepth","valueWithToJSON","numAdded","visitable","visitKey","visitValue","BAGGAGE_HEADER_NAME","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","MAX_BAGGAGE_STRING_LENGTH","dynamicSamplingContextToSentryBaggageHeader","dynamicSamplingContext","baggageHeader","currentIndex","objectKey","objectValue","baggageEntry","newBaggageHeader","objectToBaggageHeader","acc","dscKey","dscValue","baggageHeaderToObject","keyOrValue","_ref3","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","parentSampled","traceId","parentSpanId","propagationContextFromHeaders","sentryTrace","baggage","traceparentData","baggageObject","curr","currBaggageObject","baggageHeaderToDynamicSamplingContext","spanId","sampled","dsc","generateSentryTraceHeader","sampledString","TRACE_FLAG_SAMPLED","spanToTraceContext","span","span_id","trace_id","spanContext","op","parent_span_id","tags","spanToJSON","spanToTraceHeader","spanIsSampled","spanTimeInputToSeconds","ensureTimestampInSeconds","getTime","getSpanJSON","spanIsSpanClass","traceFlags","prepareEvent","client","isolationScope","normalizeDepth","normalizeMaxBreadth","prepared","integrations","dist","maxValueLength","applyClientOptions","integrationNames","sdk","applyIntegrationsMetadata","stackParser","debugIdMap","_sentryDebugIds","debugIdStackFramesCache","cachedDebugIdStackFrameCache","debugIdStackParserCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","stacktrace","debug_id","applyDebugIds","finalScope","captureContext","Scope","getFinalScope","clientEventProcessors","getEventProcessors","globalScope","getGlobalScope","getScopeData","mergeScopeData","attachments","applyScopeDataToEvent","eventProcessors","abs_path","debug_meta","images","code_file","applyDebugMeta","maxBreadth","breadcrumbs","trace","spans","normalizeEvent","parseEventHintOrCaptureContext","hintIsScopeOrFunction","captureContextKeys","hintIsScopeContext","captureException","getCurrentHub","captureEvent","addBreadcrumb","breadcrumb","withScope","hub","getStackTop","startTransaction","customSamplingContext","getClient","getCurrentScope","getScope","startSession","getIsolationScope","currentScope","getOptions","getUser","currentSession","getSession","endSession","setSession","_sendSessionUpdate","captureSession","getRootSpan","transaction","getDynamicSamplingContextFromClient","publicKey","public_key","getDsn","user_segment","emit","getDynamicSamplingContextFromSpan","txn","v7FrozenDsc","_frozenDynamicSamplingContext","sampleRate","maybeSampleRate","metadata","sample_rate","jsonSpan","description","fingerprint","sdkProcessingMetadata","transactionName","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","applyDataToEvent","rootSpan","applySpanToEvent","applyFingerprintToEvent","mergedBreadcrumbs","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeData","propagationContext","mergeAndOverwriteScopeData","mergeVal","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","generatePropagationContext","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","_client","setClient","addScopeListener","addEventProcessor","setUser","_notifyScopeListeners","getRequestSession","setRequestSession","requestSession","setTags","setTag","setExtras","extras","setExtra","setFingerprint","setLevel","setTransactionName","setContext","setSpan","getSpan","getTransaction","scopeToMerge","scopeData","scopeContext","clear","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","getLastBreadcrumb","clearBreadcrumbs","addAttachment","attachment","getAttachments","clearAttachments","applyToEvent","additionalEventProcessors","setSDKProcessingMetadata","newData","setPropagationContext","getPropagationContext","syntheticException","originalException","captureMessage","SDK_VERSION","API_VERSION","DEFAULT_BREADCRUMBS","Hub","assignedScope","assignedIsolationScope","_version","_stack","bindClient","_isolationScope","isOlderThan","setupIntegrations","pushScope","getStack","popScope","maybePromiseResult","_lastEventId","lastEventId","beforeBreadcrumb","finalBreadcrumb","configureScope","oldHub","makeMain","getIntegration","integration","_callExtensionMethod","traceHeaders","shouldSendDefaultPii","sendDefaultPii","sentry","getMainCarrier","extensions","registry","getHubFromCarrier","setHubOnCarrier","acs","getGlobalHub","hasHubOnCarrier","carrier","installedIntegrations","getIntegrationsToSetup","defaultIntegrations","userIntegrations","isDefaultInstance","finalIntegrations","integrationsByName","currentInstance","existingInstance","filterDuplicates","debugIndex","debugInstance","afterSetupIntegrations","afterAllSetup","setupIntegration","integrationIndex","setupOnce","preprocessEvent","processEvent","convertIntegrationFnToClass","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","INTEGRATION_NAME","inboundFiltersIntegration","_hint","clientOptions","mergedOptions","internalOptions","allowUrls","denyUrls","ignoreErrors","disableErrorDefaults","ignoreTransactions","disableTransactionDefaults","ignoreInternal","_mergeOptions","_isSentryError","possibleMessages","lastException","_getPossibleEventMessages","_isIgnoredError","_isIgnoredTransaction","_getEventFilterUrl","_isDeniedUrl","_isAllowedUrl","_shouldDropEvent","_getLastValidUrl","oO","originalFunctionToString","SETUP_CLIENTS","functionToStringIntegration","_functionToStringIntegration","originalFunction","initAndBind","clientClass","initialScope","setCurrentClient","initializeClient","supportsFetch","Headers","Request","Response","isNativeFetch","instrumented","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","lastHref","addHistoryInstrumentationHandler","instrumentHistory","chromeVar","chrome","isChromePackagedApp","app","hasHistoryApi","supportsHistory","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","DSN_REGEX","dsnToString","dsn","withPassword","pass","port","projectId","dsnFromComponents","components","makeDsn","lastPath","projectMatch","dsnFromString","isValidProtocol","validateDsn","createEnvelope","addItemToEnvelope","envelope","newItem","items","forEachEnvelopeItem","envelopeItems","envelopeItem","encodeUTF8","textEncoder","TextEncoder","serializeEnvelope","envHeaders","itemHeaders","stringifiedPayload","buffers","totalLength","buf","merged","buffer","concatBuffers","createAttachmentEnvelopeItem","content_type","attachment_type","attachmentType","ITEM_TYPE_TO_DATA_CATEGORY_MAP","sessions","client_report","user_report","profile","replay_event","replay_recording","check_in","feedback","statsd","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","createEventEnvelopeHeaders","sdkInfo","tunnel","sent_at","SentryError","logLevel","setPrototypeOf","SENTRY_API_VERSION","getBaseApiEndpoint","_encodedAuth","sentry_key","sentry_version","sentry_client","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","_metadata","_getIngestEndpoint","createMetricEnvelope","metricBucketItems","tagEntries","maybeTags","metric","metricType","serializeMetricBuckets","createMetricEnvelopeItem","ALREADY_SEEN_ERROR","BaseClient","_integrations","_integrationsInitialized","_numProcessing","_outcomes","_hooks","_dsn","_transport","recordDroppedEvent","transportOptions","_process","eventFromException","_captureEvent","eventMessage","promisedEvent","eventFromMessage","capturedSpanScope","sendSession","getSdkMetadata","getTransport","metricsAggregator","_isClientDoneProcessing","clientFinished","transportFlushed","close","eventProcessor","forceInitialize","_isEnabled","_setupIntegrations","getIntegrationById","integrationId","getIntegrationByName","integrationName","addIntegration","isAlreadyInstalled","sendEvent","env","eventType","packages","enhanceEventWithSdkInfo","envelopeHeaders","createEventEnvelope","_sendEnvelope","sendResponse","createSessionEnvelope","_event","sendClientReports","captureAggregateMetrics","metricsEnvelope","_updateSessionFromEvent","crashed","errored","exceptions","sessionNonTerminal","ticked","setInterval","clearInterval","_prepareEvent","_processEvent","finalEvent","sentryError","isTransaction","isTransactionEvent","beforeSendLabel","dataCategory","capturedSpanIsolationScope","__sentry__","beforeSendTransaction","processBeforeSend","beforeSendResult","invalidValueError","_validateBeforeSendResult","processedEvent","transactionInfo","transaction_info","_clearOutcomes","outcomes","quantity","applySdkMetadata","names","exceptionFromError","parseStackFrames","extractMessage","eventFromError","popSize","framesToPop","reactMinifiedRegexp","getPopSize","eventFromUnknownInput","attachStacktrace","isUnhandledRejection","domException","eventFromString","getNonErrorObjectExceptionValue","__serialized__","eventFromPlainObject","synthetic","__sentry_template_string__","__sentry_template_values__","logentry","maxLength","includedKeys","serialized","extractExceptionKeysForMessage","captureType","getObjectClassName","ignoreOnError","shouldIgnoreOnError","wrapper","__sentry_wrapped__","sentryWrapped","wrappedArguments","BrowserClient","SENTRY_SDK_SOURCE","visibilityState","_flushOutcomes","captureUserFeedback","createUserFeedbackEnvelopeItem","createUserFeedbackEnvelope","platform","discarded_events","instrumentConsole","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","__sentry_instrumentation_handlers__","handlerForType","refCount","originalRemoveEventListener","globalListener","getEventTarget","isContentEditable","shouldSkipDOMEvent","_sentryId","isSimilarToLastCapturedEvent","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","startTimestamp","e2","parseUrl","request_headers","__sentry_own_request__","onreadystatechangeHandler","xhrInfo","status_code","endTimestamp","readyStateArgs","setRequestHeaderArgs","originalSend","sentryXhrData","addFetchInstrumentationHandler","instrumentFetch","EdgeRuntime","fetch","sandbox","supportsNativeFetch","originalFetch","fetchArgs","getUrlFromResource","hasProp","parseFetchArgs","handlerData","fetchData","resource","validSeverityLevels","severityLevelFromString","query","MAX_ALLOWED_STRING_LENGTH","breadcrumbsIntegration","dom","addConsoleInstrumentationHandler","_getConsoleBreadcrumbHandler","serializeAttribute","_isEvent","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","parsedLoc","parsedFrom","parsedTo","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","dedupeIntegration","_dedupeIntegration","previousEvent","currentEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","_isSameMessageEvent","previousException","_getExceptionFromEvent","currentException","_isSameExceptionEvent","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","lineno","colno","currentFingerprint","previousFingerprint","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","column","__SENTRY_LOADER__","__SENTRY_INSTRUMENTED__","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","onunhandledrejection","globalHandlersIntegration","stackTraceLimit","ERROR_TYPES_RE","_enhanceEventWithInitialFrame","_eventFromIncompleteOnError","_installGlobalOnErrorHandler","globalHandlerLog","_getUnhandledRejectionError","_installGlobalOnUnhandledRejectionHandler","ev","ev0","ev0s","ev0sf","getLocationHref","in_app","httpContextIntegration","_httpContextIntegration","referrer","Referer","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","maxValueLimit","limit","aggregateExceptionsFromError","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","is_exception_group","exception_id","parentId","parent_id","linkedErrorsIntegration","DEFAULT_EVENT_TARGET","browserApiErrorsIntegration","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","wrapOptions","globalObject","eventName","handleEvent","wrappedEventHandler","originalEventHandler","UNKNOWN_FUNCTION","createFrame","chromeRegex","chromeEvalRegex","geckoREgex","geckoEvalRegex","winjsRegex","defaultStackParser","subMatch","extractSafariExtensionDetails","isSafariExtension","isSafariWebExtension","makePromiseBuffer","task","taskProducer","drain","counter","capturedSetTimeout","DEFAULT_RETRY_AFTER","isRateLimited","limits","disabledUntil","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","headerDelay","headerDate","parseRetryAfterHeader","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","bufferSize","rateLimits","filteredEnvelopeItems","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","__sentry__baseTransport__","cachedFetchImpl","makeFetchTransport","nativeFetch","fetchImpl","getNativeFetchImplementation","pendingBodySize","pendingCount","requestSize","requestOptions","referrerPolicy","keepalive","fetchOptions","XHR_READYSTATE_DONE","makeXHRTransport","__SENTRY_RELEASE__","SENTRY_RELEASE","autoSessionTracking","startSessionTracking","SPAN_METRIC_SUMMARY","getMetricStorageForSpan","getMetricSummaryJsonForSpan","storage","exportKey","summary","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SpanStatus","getSpanStatusFromHttpCode","httpStatus","setHttpStatus","spanStatus","setStatus","SpanRecorder","maxlen","_maxlen","spanRecorder","Span","_traceId","_spanId","_startTime","instrumenter","_attributes","setAttributes","_name","_parentSpanId","_sampled","_endTime","exclusiveTime","_exclusiveTime","_measurements","measurements","updateName","endTime","startChild","childSpan","opStr","nameStr","idStr","logMessage","_logMessage","setName","toTraceparent","toContext","_getData","updateWithContext","getTraceContext","start_timestamp","_metrics_summary","profile_id","exclusive_time","isRecording","hasAttributes","hasTracingEnabled","maybeOptions","__SENTRY_TRACING__","enableTracing","startInactiveSpan","normalizeContext","parentSpan","onlyIfParent","temporaryScope","createChildSpanOrTransaction","forceTransaction","ISOLATION_SCOPE_ON_START_SPAN_FIELD","SCOPE_ON_START_SPAN_FIELD","setCapturedScopesOnSpan","Transaction","transactionContext","_hub","_trimEnd","trimEnd","incomingDynamicSamplingContext","newName","spanMetadata","initSpanRecorder","setMeasurement","setMetadata","newMetadata","timestampInS","_finishTransaction","getDynamicSamplingContext","setHub","getProfileId","finishedSpans","endTimes","TRACING_DEFAULTS","idleTimeout","finalTimeout","heartbeatInterval","IDLE_TRANSACTION_FINISH_REASONS","IdleTransactionSpanRecorder","_pushActivity","_popActivity","transactionSpanId","originalEnd","IdleTransaction","_idleHub","_idleTimeout","_finalTimeout","_heartbeatInterval","_onScope","delayAutoFinishUntilSignal","activities","_heartbeatCounter","_finished","_idleTimeoutCanceledPermanently","_beforeFinishCallbacks","_finishReason","_autoFinishAllowed","_restartIdleTimeout","endTimestampInS","spanStartedBeforeTransactionFinish","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","registerBeforeFinishCallback","pushActivity","popActivity","_pingHeartbeat","cancelIdleTimeout","restartOnChildSpanChange","_idleTimeoutID","setFinishReason","sendAutoFinishSignal","_beat","heartbeatString","_prevHeartbeatString","getActiveTransaction","maybeHub","errorsInstrumented","activeTransaction","sampleTransaction","samplingContext","tracesSampler","tracesSampleRate","isValidSampleRate","rate","_startTransaction","configInstrumenter","transactionInstrumenter","_experiments","maxSpans","startIdleTransaction","onScope","addTracingExtensions","bindReporter","reportAllChanges","prevValue","forceReport","getNavigationEntry","__WEB_VITALS_POLYFILL__","getEntriesByType","getNavigationEntryFromPerformanceTiming","navigation","navigationEntry","entryType","getActivationStart","navEntry","activationStart","initMetric","prerendering","rating","PerformanceObserver","supportedEntryTypes","po","getEntries","buffered","onHidden","onHiddenOrPageHide","onCLS","onReport","report","sessionValue","sessionEntries","handleEntries","entry","hadRecentInput","firstSessionEntry","lastSessionEntry","stopListening","takeRecords","firstHiddenTime","getVisibilityWatcher","onFID","visibilityWatcher","handleEntry","processingStart","disconnect","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","interactionId","initInteractionCountPolyfill","durationThreshold","getInteractionCountForNavigation","interactionCount","longestInteractionList","longestInteractionMap","processEntry","minLongestInteraction","existingInteraction","latency","interaction","onINP","prevEntry","inp","estimateP98LongestInteraction","candidateInteractionIndex","reportedMetricIDs","onLCP","lastEntry","whenReady","onTTFB","responseStart","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","addLcpInstrumentationHandler","addMetricObserver","instrumentLcp","addPerformanceInstrumentationHandler","instrumentPerformanceObserver","getCleanupCallback","instrumentCls","instrumentFid","instrumentTtfb","instrumentInp","previousValue","stopOnCallback","createSpanItem","isMeasurementValue","_startChild","MAX_INT_AS_BYTES","msToSec","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","startTrackingWebVitals","fidCallback","addFidInstrumentationHandler","clsCallback","addClsInstrumentationHandler","lcpCallback","ttfbCallback","addTtfbInstrumentationHandler","startTrackingINP","interactionIdtoRouteNameMapping","interactionsSampleRate","inpCallback","interactionIdToRouteNameMapping","addInpInstrumentationHandler","INP_ENTRY_MAP","interactionType","routeName","parentContext","replayId","userDisplay","profileId","replay_id","getSampleRate","createSpanEnvelope","_trackINP","pointerdown","pointerup","mousedown","mouseup","touchstart","touchend","mouseover","mouseout","pointerover","pointerout","dragstart","dragend","drag","dragenter","dragleave","dragover","drop","keydown","keyup","keypress","addPerformanceEntries","performanceEntries","transactionStartTime","_addPerformanceNavigationTiming","responseEnd","requestStart","_addRequest","_addNavigationSpans","measureStartTimestamp","measureEndTimestamp","_addMeasureSpans","firstHidden","shouldRecord","resourceUrl","initiatorType","parsedUrl","setResourceEntrySizeData","renderBlockingStatus","_addResourceSpans","connection","effectiveType","rtt","deviceMemory","hardwareConcurrency","_trackNavigator","_addTtfbRequestTimeToMeasurements","oldValue","measurementTimestamp","normalizedValue","fidMark","cls","measurementName","sources","_tagMetricInfo","eventEnd","dataKey","entryVal","instrumentFetchRequest","shouldCreateSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","__span","contentLength","contentLengthNum","endSpan","fullUrl","getFullURL","requestSpan","sentryTraceHeader","sentryBaggageHeader","newHeaders","existingBaggageHeader","newBaggageHeaders","addTracingHeadersToFetchRequest","DEFAULT_TRACE_PROPAGATION_TARGETS","defaultRequestInstrumentationOptions","traceFetch","traceXHR","enableHTTPTimings","tracingOrigins","tracePropagationTargets","instrumentOutgoingRequests","shouldCreateSpanForRequest","shouldAttachHeadersWithTargets","createdSpan","addHTTPTimings","__sentry_xhr_span_id__","setHeaderOnXhr","xhrCallback","cleanup","nextHopProtocol","isPerformanceResourceTiming","spanData","resourceTiming","extractNetworkProtocol","timingSpanData","getAbsoluteTime","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","resourceTimingEntryToSpanData","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","startingUrl","enableLongTask","enableInp","getMetaContent","metaName","metaTag","getSource","sourceFromAttributes","sourceFromData","sourceFromMetadata","_optionalChain","ops","lastAccessLHS","isSentryRequestUrl","hubOrClient","isHub","checkDsn","removeTrailingSlash","checkTunnel","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","DEFAULT_FLUSH_MIN_DELAY","DEFAULT_FLUSH_MAX_DELAY","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","REPLAY_MAX_EVENT_BUFFER_SIZE","MIN_REPLAY_DURATION","MAX_REPLAY_DURATION","_optionalChain$5","NodeType$1","isShadowRoot","_2","shadowRoot","isNativeShadowDom","stringifyStylesheet","rules","cssRules","stringifyRule","rule","importStringified","isCSSImportRule","styleSheet","statement","layerName","supportsText","media","mediaText","escapeImportStatement","isCSSStyleRule","selectorText","cssStringified","regex","fixSafariColons","NodeType","Mirror","idNodeMap","nodeMetaMap","getId","_3","getMeta","_4","_5","rhsFn","lhs","getNode","getIds","removeNodeFromMap","childNode","hasNode","oldNode","shouldMaskInput","maskInputOptions","maskInputValue","isMasked","maskInputFn","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","getInputValue","_id","tagNameRegex","IGNORED_NODE","genId","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path2","path3","filePath","maybeQuote","extractOrigin","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","attributeValue","isSVGElement","ownerSVGElement","getHref","transformAttribute","maskAttributeFn","collectCharacters","regEx","chars","descriptorsStr","inParens","getAbsoluteSrcsetString","ignoreAttribute","distanceToMatch","matchPredicate","distance","ELEMENT_NODE","createMatchPredicate","eIndex","elementClassMatchesRegex","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","parentElement","autocomplete","maskDistance","unmaskDistance","serializeNode","blockClass","blockSelector","unblockSelector","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","docId","getRootId","DOCUMENT_NODE","compatMode","Document","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","needBlock","_isBlockedElement","HTMLFormElement","processedTagName","getValidTagName","stylesheet","styleSheets","rel","_cssText","sheet","innerText","forceMask","__context","canvas","getContext","getImageData","originalGetImageData","Uint32Array","pixel","is2DCanvasBlank","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","crossOrigin","recordInlineImage","naturalWidth","naturalHeight","drawImage","currentSrc","rr_mediaState","rr_mediaCurrentTime","rr_scrollLeft","rr_scrollTop","class","rr_width","rr_height","rr_src","isCustomElement","customElements","isSVG","isCustom","serializeElementNode","TEXT_NODE","parentTagName","isStyle","isScript","isTextarea","_6","_7","_8","textarea","Text","serializeTextNode","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","lowerIfExists","maybeAttr","serializeNodeWithId","skipChild","slimDOMOptions","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","sn","comment","as","headFavicon","headMetaDescKeywords","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","slimDOMExcluded","serializedNode","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isElement$1","isShadow","iframeEl","blankUrl","onceIframeLoaded","iframeDoc","serializedIframeNode","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","serializedLinkNode","_optionalChain$4","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle$1","previous","getImplementation","clearTimeout$1","setTimeout$1","hookSetter","isRevoked","patch","replacement","__rrweb_original__","Proxy","receiver","nowTimestamp","getWindowScroll","scrollingElement","_9","_10","_11","_12","_13","_14","getWindowHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","isAncestorRemoved","legacy_isTouchEvent","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","_18","StyleSheetMirror","styleIDMap","idStyleMap","newId","getStyle","generateId","getShadowHost","shadowHost","_19","_20","_21","Node","DOCUMENT_FRAGMENT_NODE","shadowHostInDom","rootShadowHost","getRootShadowHost","inDom","cachedImplementations","impl","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","_optionalChain$3","isNodeInLinkedList","DoubleLinkedList","addNode","__ln","removeNode","moveKey","MutationBuffer","frozen","texts","attributeMap","removes","mapRemoves","movedMap","addedSet","movedSet","droppedSet","processMutations","mutations","processMutation","adds","addedIds","addList","getNextId","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","attribute","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","isInputMasked","unattachedDoc","pname","newValue","newPriority","getPropertyPriority","genAdds","nodeId","isSerialized","deepDelete","processedNodeManager","inOtherBuffer","targetId","freeze","canvasManager","unfreeze","isFrozen","unlock","addsSet","_isParentRemoved","_isAncestorInSet","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","_optionalChain$2","mutationBuffers","composedPath","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","__rrMutationObserver","angularZoneSymbol","Zone","__symbol__","observer","onMutation","attributeOldValue","characterData","characterDataOldValue","initMouseInteractionObserver","mouseInteractionCb","sampling","mouseInteraction","disableMap","currentPointerType","eventKey","thisEventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","getHandler","PointerEvent","TouchStart","TouchEnd","initScrollObserver","scrollCb","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","initInputObserver","_ref8","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","parentStyleSheet","recurse","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","_ref13","hostId","patchTarget","ShadowRoot","originalPropertyDescriptor","sheets","_15","_16","adoptStyleSheets","initObservers","mutationObserver","mousemoveHandler","mousemoveCb","mousemove","callbackThreshold","mousemoveCallback","timeBaseline","positions","wrappedCb","totalOffset","timeOffset","updatePosition","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","initMoveObserver","mouseInteractionHandler","scrollHandler","viewportResizeHandler","viewportResizeCb","lastH","lastW","updateDimension","initViewportResizeObserver","inputHandler","mediaInteractionHandler","_ref16","mediaInteractionCb","volume","muted","playbackRate","initMediaInteractionObserver","styleSheetObserver","_ref9","_ref10","styleSheetRuleCb","CSSStyleSheet","insertRule","thisArg","argumentsList","deleteRule","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","_ref11","typeKey","_ref12","initStyleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","_ref14","_ref15","styleDeclarationCb","ignoreCSSAttributes","CSSStyleDeclaration","_17","removeProperty","initStyleDeclarationObserver","fontObserver","collectFonts","_ref17","fontCb","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","restoreHandler","fonts","initFontObserver","selectionObserver","selectionCb","collapsed","updateSelection","isCollapsed","startContainer","startOffset","endContainer","endOffset","initSelectionObserver","customElementObserver","_ref18","customElementCb","define","initCustomElementObserver","pluginHandlers","plugins","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","_optionalChain$1","IframeManagerNoop","crossOriginIframeMirror","crossOriginIframeRootIdMap","addLoadListener","IframeManager","iframes","crossOriginIframeMap","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","loadListener","isAttachIframe","adoptedStyleSheets","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","replaceIdOnNode","patchRootIdOnNode","IncrementalSnapshot","Mutation","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","shadowDoms","restoreHandlers","patchAttachShadow","iframeElement","manager","CanvasManagerNoop","snapshot","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","ProcessedNodeManager","nodeMap","loop","periodicallyClear","onRequestAnimationFrame","thisBuffer","_takeFullSnapshot","record","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordAfter","getCanvasManager","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","NodeList","DOMTokenList","polyfill","incrementalSnapshotCount","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","__RRWEB_EXCLUDE_IFRAME__","getMirror","nodeMirror","getCanvasManagerFn","_getCanvasManager","__RRWEB_EXCLUDE_SHADOW_DOM__","slimDOM","initialOffset","canvasMutationCb","CustomElement","ReplayEventTypeIncrementalSnapshot","timestampToMs","timestampToS","addBreadcrumbEvent","replay","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","INTERACTIVE_SELECTOR","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","originalWindowOpen","_len8","_key8","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_timeout","_threshold","_scollTimeout","scrollTimeout","_replay","_ignoreSelector","addListeners","cleanupWindowOpen","nowInSeconds","_teardown","removeListeners","_checkClickTimeout","handleClick","SLOW_CLICK_TAGS","ignoreElement","isClickBreadcrumb","newClick","clickBreadcrumb","clickCount","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","isSlowClick","timeAfterClickMs","endReason","getCurrentRoute","updateClickDetectorForRecordingEvent","clickDetector","isIncrementalEvent","isIncrementalMouseInteraction","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","handleDomListener","isClick","getDomTarget","getBaseDomBreadcrumb","handleDom","handleKeyboardEvent","updateUserActivity","isInputElement","hasModifierKey","isCharacterKey","baseBreadcrumb","getKeyboardBreadcrumb","ENTRY_TYPES","decodedBodySize","encodedBodySize","responseStatus","transferSize","paint","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","setupPerformanceObserver","addPerformanceEntry","onEntries","_ref19","clearCallbacks","_ref20","replayPerformanceEntries","getLargestContentfulPaint","clearCallback","logInfo","shouldAddBreadcrumb","addLogBreadcrumb","logInfoNextTick","EventBufferSizeExceededError","EventBufferArray","_totalSize","hasCheckout","hasEvents","addEvent","eventSize","eventsRet","getEarliestTimestamp","WorkerHandler","worker","_worker","ensureReady","_ensureReadyPromise","_ref21","terminate","_getAndIncrementId","_ref22","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","EventBufferProxy","_fallback","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","createEventBuffer","_ref23","useCompression","workerUrl","customWorkerUrl","Worker","__SENTRY_EXCLUDE_REPLAY_WORKER__","Blob","createObjectURL","_getWorkerUrl","_loadWorker","hasSessionStorage","sessionStorage","clearSession","removeItem","deleteSession","isSampled","lastActivity","segmentId","previousSessionId","saveSession","setItem","createSession","_ref24","sessionSampleRate","allowBuffering","stickySession","getSessionSampleType","isExpired","initialTime","expiry","targetTime","isSessionExpired","_ref25","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","_ref26","loadOrCreateSession","_ref27","sessionOptions","traceInternals","existingSession","sessionStringFromStorage","getItem","sessionObj","fetchSession","addEventSync","shouldAddEvent","_addEvent","eventBuffer","recordingMode","eventAfterPossibleCallback","isCustomEvent","maybeApplyCallback","beforeAddRecordingEvent","isPaused","timestampInMs","timeouts","sessionIdlePause","initialTimestamp","isFeedbackEvent","handleAfterSendEvent","enforceStatusCode","isBaseTransportSend","replayContext","traceIds","handleTransactionEvent","errorIds","beforeErrorSampling","sendBufferedReplayOrFlush","handleErrorEvent","handleBeforeSendEvent","exceptionValue","handleHydrationError","handleGlobalEventListener","afterSendHandler","isReplayEvent","getSessionId","feedbackId","addFeedbackBreadcrumb","__rrweb__","isRrwebError","captureExceptions","isErrorEventSampled","errorSampleRate","shouldSampleForBufferEvent","createPerformanceSpans","_ref28","handleHistorySpanListener","handleHistory","urls","addNetworkBreadcrumb","shouldFilterRequest","handleXhrSpanListener","handleXhr","getBodySize","URLSearchParams","FormData","formDataStr","_serializeFormData","byteLength","parseContentLengthHeader","getBodyString","mergeWarning","_meta","warnings","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","e3","normalizeNetworkBody","getAllowedHeaders","allowedHeaders","filteredHeaders","formData","urlMatches","baseURI","fixedUrl","getFullUrl","captureFetchBreadcrumbToReplay","request_body_size","requestBodySize","response_body_size","responseBodySize","captureDetails","networkDetailAllowUrls","networkDetailDenyUrls","_ref29","networkCaptureBodies","networkRequestHeaders","getHeadersFromOptions","getRequestHeaders","requestBody","_getFetchRequestArgBody","bodyStr","_getRequestInfo","_ref30","networkResponseHeaders","getAllHeaders","bodyText","_tryCloneResponse","_getResponseText","txt","_tryGetResponseText","_parseFetchResponseBody","_ref31","getResponseData","_getResponseInfo","_prepareFetchData","allHeaders","captureXhrBreadcrumbToReplay","getResponseHeaders","requestWarning","responseBody","responseWarning","outerHTML","_parseXhrResponse","_getXhrResponseBody","_prepareXhrData","enrichXhrBreadcrumb","reqSize","resSize","_getBodySize","handleNetworkBreadcrumbs","_isXhrBreadcrumb","_isXhrHint","_isFetchBreadcrumb","_isFetchHint","enrichFetchBreadcrumb","beforeAddNetworkBreadcrumb","handleFetch","handleFetchSpanListener","_LAST_BREADCRUMB","handleScopeListener","newBreadcrumb","isBreadcrumbWithCategory","isTruncated","normalizedArgs","normalizedArg","normalizeConsoleBreadcrumb","handleScope","addGlobalListeners","hasHooks","lastTransaction","feedbackEvent","includeReplay","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","getHandleRecordingEmit","hadFirstEvent","_isCheckout","setInitialState","shouldRecordCanvas","isRecordingCanvas","useCompressionOption","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","createOptionsEvent","addSettingsEvent","earliestEvent","sendReplayRequest","_ref34","recordingData","segment_id","eventContext","preparedRecordingData","_ref32","payloadWithSequence","replayHeaders","sequence","prepareRecordingData","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_type","replayEvent","_ref33","eventHint","preparedEvent","prepareReplayEvent","createReplayEnvelope","cause","TransportStatusCodeError","RateLimitError","sendReplay","replayData","retryConfig","_retryCount","THROTTLED","throttle","maxCount","durationSeconds","isThrottled","_cleanup","wasThrottled","ReplayContainer","_ref35","recordingOptions","__init5","__init6","_lastActivity","_isPaused","_hasInitializedCoreListeners","initialUrl","_recordingOptions","_debouncedFlush","callbackReturnValue","timerId","maxTimerId","invokeFunc","cancelTimers","debounced","debounce","_flush","flushMinDelay","flushMaxDelay","_throttledAddEvent","slowClickTimeout","slowClickIgnoreSelectors","_canvas","initializeSampling","_initializeSessionForSampling","_initializeRecording","_handleException","startBuffering","startRecording","canvasOptions","_stopRecording","_onMutationHandler","stopRecording","forceFlush","_removeListeners","force","pause","resume","_checkSession","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateUserActivity","_updateSessionActivity","_maybeSaveSession","cbResult","conditionalFlush","cancelFlush","urlPath","_clearContext","_addListeners","_refreshSession","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","_performanceCleanupCallback","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","_createCustomBreadcrumb","_addPerformanceEntries","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","addMemoryEntry","_this2","tooShort","minReplayDuration","tooLong","_flushLock","mutationLimit","overMutationLimit","mutationBreadcrumbLimit","getOption","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","allSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","Replay$1","__initStatic","mask","maskAttributes","unmask","block","unblock","ignore","maskFn","privacyOptions","_ref36","getPrivacyOptions","_ref37","maskAttribute","_initialOptions","_getMergedNetworkHeaders","_isInitialized","_setup","_initialize","getReplayId","_maybeLoadFromReplayCanvasIntegration","finalOptions","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","loadReplayOptionsFromClient","canvasIntegration","ScrollToTop","modalRef","headerFix","setheaderFix","loginModal","setloginModal","resetModal","setResetModal","signupModal","setSignupModal","sidebarOpen","setSidebarOpen","mainMenu","reducer","previousState","updatedState","activeSubmenu","_jsx","_Fragment","_jsxs","logo","alt","AOS","Footer2","showConsultarNumero","setShowConsultarNumero","ic_logo","UnderMaintenance","backgroundImage","backgroundPosition","viewBox","xmlns","stroke","transform","maskType","maskUnits","cx","cy","strokeLinecap","shape1","shape2","shape3","optionsSupported","onceSupported","wrappedHandler","__once","onceHandler","scrollbarSize","recalc","scrollDiv","useCommittedRef","toFnRef","refA","refB","mergeRefs","useWillUnmount","onUnmount","valueRef","useUpdatedRef","psuedoElement","ownerWindow","rUpper","msPattern","hyphenateStyleName","hyphenate","supportedTransforms","transforms","isTransform","emulateTransitionEnd","called","initEvent","triggerEvent","transitionEnd","mult","parseDuration","removeEmulate","OPEN_DATA_ATTRIBUTE","handleContainerOverflow","isRTL","modals","getScrollbarWidth","getBodyScrollbarWidth","getElement","setModalAttributes","_modal","removeModalAttributes","setContainerStyle","containerState","paddingProp","scrollBarWidth","removeContainerStyle","modal","modalIdx","isTopModal","Context","useWindow","resolveContainerRef","isReactNative","product","inProp","onExited","mountOnEnter","unmountOnExit","hasEnteredRef","handleExited","combinedRef","useMergedRefs","useRTGTransitionProps","onEnter","onEntering","onEntered","onExit","onExiting","addEndListener","major","minor","getReactVersion","childRef","nodeRef","mergedRef","handleEnter","handleEntering","handleEntered","handleExit","handleExiting","handleAddEndListener","innerProps","transitionProps","ImperativeTransition","exited","setExited","onTransition","isInitialRef","handleTransition","useIsomorphicEffect","stale","isStale","onFinish","renderTransition","runTransition","RTGTransition","NoopTransition","useModalManager","provided","modalManager","ModalManager","getManager","dialog","backdrop","setDialogRef","setBackdropRef","Modal","role","keyboard","onBackdropClick","onEscapeKeyDown","backdropTransition","runBackdropTransition","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","providedManager","containerRef","onShow","onHide","onResolved","resolvedRef","setRef","earlyRef","nextRef","useWaitForDOMRef","mounted","useMounted","prevShow","usePrevious","lastFocusRef","handleShow","removeKeydownListenerRef","handleDocumentKeyDown","removeFocusListenerRef","handleEnforceFocus","_modal$dialog$ownerDo","_modal$dialog","currentActiveElement","handleHide","_lastFocusRef$current","handleBackdropClick","isEscKey","dialogProps","appear","backdropElement","Manager","qsa","replaceClassName","origClass","classToRemove","Selector","BootstrapModalManager","adjustAndStore","adjust","actual","restore","baseVal","marginProp","sharedManager","_setPrototypeOf","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","initialStatus","isMounting","enter","appearStatus","nextCallback","prevState","updateStatus","prevProps","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","forceReflow","performEnter","performExit","appearing","maybeNode","maybeAppearing","enterTimeout","safeSetState","onTransitionEnd","_this3","nextState","setNextCallback","_this4","doesNotHaveTimeoutOrListener","maybeNextCallback","_this$props","childProps","TransitionGroupContext","transitionEndListener","TransitionWrapper","attachRef","componentOrElement","fadeStyles","Fade","transitionClasses","isAppearing","triggerBrowserReflow","DEFAULT_BREAKPOINTS","DEFAULT_MIN_BREAKPOINT","ThemeContext","prefixes","breakpoints","minBreakpoint","useBootstrapPrefix","defaultPrefix","ModalBody","bsPrefix","ModalDialog","contentClassName","centered","fullscreen","scrollable","dialogClass","fullScreenClass","ModalFooter","variant","CloseButton","ariaLabel","AbstractModalHeader","closeLabel","closeVariant","closeButton","ModalContext","ModalHeader","DivStyledAsH4","ModalTitle","DialogTransition","BackdropTransition","dialogClassName","dialogAs","Dialog","dataBsTheme","ariaLabelledby","ariaDescribedby","backdropClassName","propsManager","modalStyle","setStyle","animateStaticModal","setAnimateStaticModal","waitingForMouseUpRef","ignoreBackdropClickRef","removeStaticModalAnimationRef","setModalRef","useIsRTL","modalContext","getModalManager","getSharedManager","updateDialogStyle","containerIsOverflowing","modalIsOverflowing","scrollHeight","paddingRight","getScrollbarSize","paddingLeft","handleWindowResize","handleDialogMouseDown","handleMouseUp","handleStaticModalAnimation","handleStaticBackdropClick","backdropProps","baseModalStyle","BaseModal","onMouseUp","onMouseDown","Body","Header","Title","Footer","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","lim","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","hexString","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","p1","p2","hwb2rgb","hsv2rgb","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","tkeys","unpack","transparent","RGB_RE","modHSL","ratio","fromObject","functionParse","rgbParse","Color","hexParse","_rgb","_valid","valid","rgbString","hslString","mix","weight","c1","c2","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","isNullOrUndef","isObject","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","klen","isValidKey","_merger","tval","sval","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","_splitKey","_getKeyResolver","_capitalize","defined","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","niceNum","roundedRange","niceRange","fraction","isNumber","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","cmp","mid","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","requestAnimFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","_sorted","iScale","_parsed","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","cacheKey","formatter","Intl","NumberFormat","getNumberFormat","formatters","numeric","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","getScope$1","Defaults","_descriptors","_appliers","borderColor","datasets","devicePixelRatio","getDevicePixelRatio","font","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","_scriptable","_indexable","resize","animations","autoPadding","bottom","beginAtZero","bounds","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","dash","dashOffset","minRotation","maxRotation","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","gcLen","_alignPixel","currentDevicePixelRatio","halfWidth","clearCanvas","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","borderWidth","_isPointInArea","point","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","strokeColor","translation","textAlign","textBaseline","setRenderOpts","strokeText","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","toFontString","inputs","cacheable","_createResolver","scopes","getTarget","finalRootScopes","_cacheable","_scopes","_rootScopes","_getTarget","deleteProperty","_keys","_cached","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","isScriptable","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","addScopes","parentScopes","parentFallback","rootScopes","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getPositionedStyle","useOffsetPos","getRelativePosition","borderBox","boxSizing","paddings","borders","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","startBound","endBound","getSegment","inside","subStart","shouldStart","shouldStop","_boundSegments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","currentStep","_refresh","_update","running","draw","_active","_total","_getAnims","charts","_duration","animator","interpolators","boolean","factor","c0","cfg","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","elapsed","rej","resolved","Animations","_properties","configure","animationOptions","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","DatasetController","_cachedDataOpts","_type","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","_length","updateMinAndPrev","getPixelForTick","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","_value_","BubbleController","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","cutout","toPercentage","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","fontColor","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","abstract","DateAdapterBase","members","formats","startOf","endOf","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchmove","pointermove","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","isConnected","tooltipPosition","hasValue","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","_int16Range","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","_len9","_key9","removeScales","_len10","_key10","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","_createDescriptors","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","_len11","scaleOptions","_key11","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","getSizeForArea","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","_doResize","resizeDelay","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","_isClickEvent","lastEvent","determineLastEvent","parseBorderRadius$1","angleDelta","toRadiusCorners","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","lineJoin","angleMargin","clipArc","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","BarElement","addRectPath","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","boxWidth","boxHeight","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","rtlHelper","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","usePointStyle","drawOptions","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","textDirection","positionChanged","_positionChanged","_ignoreReplayEvents","findOrAddLabel","addedLabels","addIfString","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","generateTicks","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","_padding","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","minute","hour","day","quarter","year","UNITS","sorter","adapter","_adapter","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","defaultDatasetIdKey","reforwardRef","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","ChartComponent","redraw","fallbackContent","updateMode","canvasProps","canvasRef","chartRef","renderChart","Chart$1","destroyChart","nextOptions","setOptions","createTypedChart","registerables","Doughnut","DonutChart2","defaultFontFamily","backgroundColor2","tooltips","ComingSoon","subscribe","setSubscribe","timerDays","setTimerDays","timerHours","setTimerHours","timerMinutes","setTimerMinutes","timerSeconds","setTimerSeconds","startTimer","WebsiteLaunchDate","setMonth","getMonth","getDate","getFullYear","countdownDate","days","hours","minutes","seconds","bnr","placeholder","ssrDocument","importNode","hostname","getDocument","ssrWindow","back","Image","screen","matchMedia","getWindow","Dom7","makeReactive","arrayFlat","arrayFilter","toCreate","tempParent","uniqueArray","arrayUnique","noTrigger","shortcut","_len14","_key14","Methods","attrName","transitionDuration","targetSelector","handleLiveEvent","eventData","dom7EventData","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","fireCallBack","includeMargins","clientTop","clientLeft","scrollX","compareWith","returnIndex","newChild","tempDiv","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","methodName","nextTick","getTranslate","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isNode","noExtend","keysArray","nextKey","__swiper__","setCSSProperty","varName","varValue","animateCSSModeScroll","swiper","targetPosition","side","startPosition","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","easeProgress","currentPosition","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","getDevice","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","eventsListeners","destroyed","__emitterProxy","onAny","eventsAnyListeners","offAny","updateSize","$el","isVertical","updateSlides","getDirectionLabel","getDirectionPropertyValue","$wrapperEl","swiperSize","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","marginRight","centeredSlides","cssMode","gridEnabled","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","swiperSlideSize","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","transitionStart","slideTo","indexAsNumber","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","loopedSlidesLimit","prependSlides","appendSlides","loopDestroy","onTouchStart","touchEventsData","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","swipingClassHasValue","noSwipingClass","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","currentY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","freeMode","onTouchMove","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","nextEl","prevEl","setBreakpoint","autoplay","preventClicks","preventClicksPropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","updateOnWindowResize","attachEvents","detachEvents","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","changeDirection","containerEl","currentHeight","minRatio","addClasses","suffixes","resultClasses","prepareClasses","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","initialSlide","resizeObserver","createElements","simulateTouch","uniqueNavElements","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","moving","isLocked","cursor","unsetGrabCursor","wasLocked","lastSlideIndex","lastSlideRightEdge","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","passedParams","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","getSlideClasses","slideEl","updates","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","getWrapperSelector","getWrapper","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","use","prototypeGroup","protoMethod","animationFrame","resizeHandler","orientationChangeHandler","contentBoxSize","inlineSize","blockSize","unobserve","observers","WebkitMutationObserver","observerUpdate","observeParents","observeSlideChildren","containerParents","Navigation","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","checkProps","createElementIfNotDefined","hideOnClick","hiddenClass","navigationDisabledClass","targetEl","pagination","clickable","Thumb","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","sticky","minimumVelocity","lastMoveEvent","velocityEvent","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","needsNavigation","needsPagination","needsScrollbar","scrollbar","uniqueClasses","paramsList","calcLoopedSlides","slidesPerViewParams","breakpointOnlyParams","isChildSwiperSlide","processChildren","slots","slot","foundSlides","updateSwiper","changedParams","scrollbarEl","paginationEl","updateParams","currentParams","needThumbsInit","needControllerInit","needPaginationInit","needScrollbarInit","needNavigationInit","control","SwiperSlideContext","SwiperContext","externalElRef","Tag","wrapperTag","WrapperTag","onSwiper","eventsAssigned","containerClasses","setContainerClasses","virtualData","setVirtualData","breakpointChanged","setBreakpointChanged","initializedRef","swiperElRef","swiperRef","oldPassedParamsRef","oldSlides","nextElRef","prevElRef","paginationElRef","scrollbarElRef","restProps","splitEvents","allowedParams","plainObj","getParams","onBeforeBreakpoint","_containerClasses","initSwiper","SwiperCore","extendWith","renderExternal","renderExternalUpdate","mountSwiper","oldParams","oldChildren","getKey","addKey","oldChildrenKeys","childrenKeys","newKeys","oldKeys","newKey","oldKey","getChangedParams","parallax","renderVirtual","modifiedSlides","duplicateSlide","blankSlide","renderLoop","SwiperSlide","externalRef","virtualIndex","slideElRef","slideClasses","setSlideClasses","updateClasses","slideData","isActive","isVisible","isDuplicate","isPrev","isNext","renderChildren","swiperFirst","GallerySlider","imgs","setThumbsSwiper","FreeMode","Thumbs","useButtonProps","isTrivialHref","onKeyDown","Button","asProp","buttonProps","Spinner","bsSpinnerPrefix","kindOf","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isFile","isBlob","isFileList","isURLSearchParams","allOwnKeys","findKey","_global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","isBuffer","isFormData","kind","isArrayBufferView","isBoolean","isStream","caseless","assignValue","targetKey","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","searchString","forEachEntry","pair","matchAll","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","toCamelCase","toFiniteNumber","generateString","alphabet","isSpecCompliantForm","toJSONObject","reducedValue","AxiosError","captureStackTrace","utils","fileName","lineNumber","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","predicates","metaTokens","indexes","visitor","defaultVisitor","useBlob","convertValue","Buffer","isFlatArray","exposedHelpers","build","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","protocols","hasBrowserEnv","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","transitional","transitionalDefaults","transformRequest","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","toURLEncodedForm","formSerializer","_FormData","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","rawHeaders","parseHeaders","tokensRE","parseTokens","deleted","deleteHeader","formatHeader","asStrings","accessor","accessors","defineAccessor","accessorName","arg3","buildAccessors","headerValue","transformData","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","write","cookie","toGMTString","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","msie","urlParsingNode","originURL","resolveURL","requestURL","samplesCount","bytes","firstSampleTS","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","speedometer","lengthComputable","progressBytes","estimated","requestData","onCanceled","withXSRFToken","cancelToken","unsubscribe","signal","auth","unescape","btoa","fullPath","onloadend","ERR_BAD_REQUEST","settle","paramsSerializer","responseURL","ECONNABORTED","ERR_NETWORK","timeoutErrorMessage","ETIMEDOUT","isURLSameOrigin","xsrfValue","cookies","withCredentials","onDownloadProgress","onUploadProgress","upload","aborted","parseProtocol","knownAdapters","http","xhrAdapter","renderReason","isResolvedHandle","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validator","formatMessage","ERR_DEPRECATED","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","newConfig","getUri","generateHTTPMethod","isForm","CancelToken","resolvePromise","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","defaultConfig","Cancel","spread","isAxiosError","formToJSON","getAdapter","_obj$constructor","pick","DIRECTION","escapeRegExp","objectIncludes","arrA","arrB","dateA","dateB","regexpA","regexpB","ActionDetails","startChangePos","oldSelection","insertedCount","cursorPos","inserted","removedCount","removeDirection","IMask","InputMask","maskedClass","MaskedRegExp","MaskedPattern","MaskedDate","MaskedNumber","MaskedDynamic","Masked","MaskedFunction","normalizeOpts","instanceOpts","_mask","createMask","nOpts","MaskedClass","MaskElement","_unsafeSelectionStart","_unsafeSelectionEnd","_unsafeSelect","HTMLMaskElement","_onKeydown","_onInput","_onBeforeinput","_onCompositionEnd","rootElement","_this$input$getRootNo","_this$input$getRootNo2","_this$input","commit","redo","undo","isComposing","selectionChange","inputType","HTMLInputMaskElement","setSelectionRange","HTMLContenteditableMaskElement","InputHistory","states","currentState","isEmpty","MAX_LENGTH","masked","_unmaskedValue","_rawInputValue","_saveSelection","_onChange","_onDrop","_onFocus","_onClick","_onUndo","_onRedo","alignCursor","alignCursorFriendly","_bindEvents","maskEquals","_this$masked","updateOptions","unmaskedValue","updateControl","rawInputValue","typedValue","typedValueEquals","displayValue","_unbindEvents","_fireEvent","_cursorChanging","_changingCursorPos","_selection","updateValue","newUnmaskedValue","newRawInputValue","newDisplayValue","isChanged","_fireChangeEvents","_historyChanging","restOpts","updateMask","updateOpts","optionsIsChanged","updateCursor","_delayUpdateCursor","_abortUpdateCursor","_inputEvent","isComplete","nearestInputPos","hIndex","details","oldRawValue","doCommit","_applyHistoryState","ChangeDetails","prep","rawInserted","tailShift","aggregate","consumed","equals","ContinuousTailDetails","_appendPlaceholder","beforePos","shiftChar","withValueRefresh","extractInput","isFilled","totalInputPositions","fromPos","toPos","extractTail","appendTail","_appendCharRaw","_appendChar","checkTail","consistentState","doPrepareChar","autofix","noFixState","fixDetails","pad","chDetails","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_appendEager","_beforeTailState","doPrepare","doSkipInvalid","eager","_refreshing","rawInput","runIsolated","_isolated","skipInvalid","prepare","prepareChar","validate","deleteCount","tailPos","eagerRemove","forceDirection","valLength","EMPTY_VALUES","ChunksTailDetails","chunks","tailChunk","lastChunk","extendLast","firstTailChunk","blockIndex","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","_blocks","remainChars","cstate","chunkShiftPos","PatternCursor","_log","_blockStartPos","popState","bindBlock","_pushLeft","_this$block","_pushRight","pushLeftBeforeFilled","isFixed","pushLeftBeforeInput","pushLeftBeforeRequired","pushRightBeforeFilled","pushRightBeforeInput","pushRightBeforeRequired","PatternFixedDefinition","isUnmasking","_isRawInput","maxPos","appendEager","isResolved","PatternInputDefinition","placeholderChar","displayChar","maskOpts","currentMaskFlags","boundPos","_flags$_beforeTailSta","DEFAULT_DEFINITIONS","definitions","_rebuildMask","defs","exposeBlock","_maskedBlocks","unmaskingBlock","optionalBlock","blocks","bNames","bName","expose","bOpts","blockOpts","maskedBlock","RepeatBlock","isInput","STOP_CHAR","ESCAPE_CHAR","maskedState","_this$_mapPosToBlock","startBlockIndex","blockIter","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","toBlockIndex","startBlockIter","endBlockIndex","_blocks2","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","maskedBlocks","indices","InputDefinition","FixedDefinition","MaskedRange","_matchFrom","patternOpts","fromStr","padStart","toStr","sameCharsCount","boundaries","minstr","maxstr","padEnd","padLength","extractPatternOptions","patternBlocks","GET_DEFAULT_BLOCKS","isDateExist","currentMask","exposeMask","compiledMasks","_overwrite","_eager","_skipInvalid","_applyDispatch","prevValueBeforeTail","insertValue","tailValue","prevMask","prevMaskState","doDispatch","_flags$_beforeTailSta2","currentMaskRef","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","_autofix","oldMask","_this$currentMask5","isCurrent","startInputPos","i1","i2","MaskedEnum","enum","enum_","eopts","lengths","requiredLength","optionalLength","matchFrom","matchValue","mch","estr","istr","_MaskedNumber","_updateRegExps","allowNegative","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","prepCh","allowPositive","_separatorsCount","extendOnSeparators","_separatorsCountFromSlice","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","accepted","fixedNum","UNMASKED_RADIX","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","zeros","dropFractional","MIN_SAFE_INTEGER","toLocaleString","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","repeatFrom","repeatTo","_this$_blocks","_blockOpts","_allocateBlock","allocated","_this$_mapPosToBlock$","_this$_blocks$bi","_trimEmptyTail","_this$_mapPosToBlock2","_this$_mapPosToBlock3","firstBlockIndex","lastBlockIndex","removeCount","MASK_PROPS","onAccept","inputRef","MASK_PROPS_NAMES","NON_MASK_OPTIONS_NAMES","MASK_OPTIONS_NAMES","pName","IMaskInputClass","ComposedComponent","_Class","MaskedComponent","_inputRef","initMask","maskOptions","_extractMaskOptionsFromProps","_this$element","maskRef","maskValue","destroyMask","_onAccept","_onComplete","cloneProps","nonMaskProp","_extractNonMaskProps","maskProp","nestedComponentName","IMaskMixin","IMaskInput","IMaskInputFn","_assertThisInitialized","ReferenceError","ReCAPTCHA","handleExpired","handleErrored","handleChange","handleRecaptchaRef","getCaptchaFunction","fnName","grecaptcha","enterprise","getResponse","_widgetId","getWidgetId","execute","_executeRequested","executeAsync","executionResolve","executionReject","resetter","forceReset","onExpired","onErrored","onChange","explicitRender","sitekey","theme","stoken","badge","isolated","captcha","SCRIPT_MAP","idCount","recaptchaOptions","getScriptURL","wrappedComponentName","AsyncScriptLoader","_Component","__scriptURL","asyncScriptLoaderGetScriptLoaderID","__scriptLoaderID","setupScriptURL","asyncScriptLoaderHandleLoad","asyncScriptOnLoad","asyncScriptLoaderTriggerOnScriptLoaded","mapEntry","obsKey","scriptURL","globalName","scriptId","callObserverFuncAndRemoveObserver","observersMap","removeOnUnmount","allScripts","forwardedRef","ForwardedComponent","hoistStatics","makeAsyncScriptLoader","dynamicOptions","useRecaptchaNet","readCookie","cleanValue","cleanupCookieValue","doNotParse","defaultSetOptions","changeListeners","HAS_DOCUMENT_COOKIE","previousCookies","_checkChanges","domCookies","parseCookies","testingValue","TEST_HAS_DOCUMENT_COOKIE","hasDocumentCookie","_emitChange","_startPolling","pollingInterval","_stopPolling","doNotUpdate","stringValue","addChangeListener","cookieStore","removeChangeListener","CookiesContext","Cookies","useCookies","allCookies","setCookies","newCookies","oldCookies","dependency","shouldUpdate","setCookie","removeCookie","updateCookies","REACT_APP_STAGE","DoacaoSorteioModal","donateModal","setDonateModal","displayError","setDisplayError","displayErrorMessage","setDisplayErrorMessage","setShow","totalRaffle","setTotalRaffleValor","paymentMethod","setPaymentMethod","qrCodeBase64","setQrCodeBase64","valor","setValor","pixCopyPaste","setPixCopyPaste","donationCod","setDonationCod","showCopy","setShowCopy","cpf_cnpj","setCpfCnpj","setEmail","emailError","setEmailError","setPhone","promoter","zipcode","setZipcode","address","setAddress","district","setDistrict","city","setCity","terms","setTerms","termsError","setTermsError","zipcodeError","setZipcodeError","phoneError","setPhonecodeError","setNumbers","numbersTags","recaptchaRef","consultPaymentTime","setStartConsultPaymentTime","consultPayment","post","Details","setPage","botaoPagar","setBotaoPagar","limiteNumeros","incrementNumeros","prevNumeros","decrementNumeros","handleModalClose","handleModalOpen","FormSubmit","validateEmail","Sentry","promoterName","promoterId","ErroGeneric","Value","QrCodeBase64","PixCopyPaste","DonationCod","onSubmit","onInput","autoComplete","htmlFor","sanitized","cpfCnpj","cpf","rev","validateCpf","cnpj","tamanho","numeros","digitos","soma","resultado","validateCnpj","validateCpfCnpj","setPhoneInput","gridTemplateColumns","gap","justifyContent","alignItems","currency","DoacaoConsultaModal","donateConsultModal","setConsultDonateModal","botaoConsultar","setBotaoConsultar","recaptchaValue","IMAGES","Background5","Background10","logo2","logo3","logoWhite3","BlogGrid1","BlogGrid2","BlogGrid3","Shape","Shape1","Shape2","Shape3","Shape5","Shape6","Pattren1","Pattren2","Pattren3","Pattren4","Pattren5","Pattren6","Recentblog1","Recentblog2","Recentblog3","Recentblog4","Avatar1","Avatar2","Avatar3","Avatar4","Avatar5","AboutPic2","AboutPic3","ProjectPic13","largePic1","largePic2","largePic3","SliderBg1","SliderBg2","SliderPic1","SliderPic2","iPhoneAppleWatch","ICShape1","ICShape2","ICShape3","ICShape4","ICShape5","ICShape6","ICShape7","ICShape8","ICShape9","ICShape10","About00","About04","About03","ICImageSlide1","ICImageSlide2","ICImageSlide3","ICImageSlide4","ICImageSlide5","ICImageSlide6","ICImageSlide7","ICImageSlide8","FundraiserDetail","formater","setList","raised","goal","supporters","daysLeft","modalConsultRef","RedirectWithCookies","AppleVision","DogBanner","DoacaoRSModal","donationValue","setDonationValue","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","contenteditable","contextmenu","itemprop","HELMET_PROPS","HTML_TAG_MAP","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","createClass","objectWithoutProperties","encodeSpecialCharacters","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","lowerCaseAttributeKey","getTagsFromPropsList","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","objectAssign","rafPolyfill","clock","cafPolyfill","webkitRequestAnimationFrame","mozRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","_helmetCallback","commitTagChanges","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","indexToSave","headElement","tagNodes","indexToDelete","newElement","existingTag","isEqualNode","generateElementAttributesAsString","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","generateTitleAsReactComponent","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","generateTagsAsReactComponent","attributeHtml","tagContent","isSelfClosing","generateTagsAsString","_ref$title","noscript","HelmetExport","_class","HelmetWrapper","classCallCheck","possibleConstructorReturn","nextProps","isEqual","mapNestedChildrenToProps","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","_child$props","initAttributes","convertReactPropstoHtmlAttributes","defaultTitle","titleTemplate","mappedState","Helmet","withSideEffect","renderStatic","handleWindowSizeChange","metaDescription","carousel","carouselIndex","setCarouselIndex","FiatMobi2025","MotoLevaIphone","MainLayout","FundraiserDetail_VisionPro","FundraiserDetail_Honda","FundraiserDetail_FiatMobi","FundraiserDetail_MotoLevaIphone","FundraiserDetail_RS","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","dezThemeSet","initialState","primaryColor","background","windowWidth","windowHeight","changePrimaryColor","changeBackground","resizeWindow","backgroundOption","setDemoTheme","setAttr","themeSettings","typography","ReactGA","newUrl","init$1","_hasSetTracePropagationTargets","_collectWebVitals","_interactionIdToRouteNameMapping","enableInteractions","_latestRoute","_getCurrentHub","instrumentRouting","clientOptionsTracePropagationTargets","_createRouteTransaction","onStartRouteTransaction","statusType","_registerInteractionListener","_registerInpInteractionListener","beforeNavigate","isPageloadTransaction","expandedContext","modifiedContext","finalContext","idleTransaction","inflightInteractionTransaction","registerInteractionTransaction","currentTransaction","isPerformanceEventTiming","minInteractionId","App","reportWebVitals"],"sourceRoot":""}