{"version":3,"file":"application.js","mappings":"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","sources":["webpack://playpass/./node_modules/@stripe/stripe-js/dist/pure.js","webpack://playpass/./node_modules/chartkick/dist/chartkick.esm.js","webpack://playpass/./node_modules/@rails/actioncable/src/adapters.js","webpack://playpass/./node_modules/@rails/actioncable/src/logger.js","webpack://playpass/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://playpass/./node_modules/@rails/actioncable/src/internal.js","webpack://playpass/./node_modules/@rails/actioncable/src/connection.js","webpack://playpass/./node_modules/@rails/actioncable/src/subscription.js","webpack://playpass/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://playpass/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://playpass/./node_modules/@rails/actioncable/src/consumer.js","webpack://playpass/./node_modules/@rails/actioncable/src/index.js","webpack://playpass/./node_modules/@kurkle/color/dist/color.esm.js","webpack://playpass/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://playpass/./node_modules/chart.js/dist/chart.js","webpack://playpass/./node_modules/chart.js/auto/auto.js","webpack://playpass/./node_modules/date-fns/constants.js","webpack://playpass/./node_modules/date-fns/constructFrom.js","webpack://playpass/./node_modules/date-fns/toDate.js","webpack://playpass/./node_modules/date-fns/locale/en-US/_lib/formatDistance.js","webpack://playpass/./node_modules/date-fns/locale/_lib/buildFormatLongFn.js","webpack://playpass/./node_modules/date-fns/locale/en-US/_lib/formatLong.js","webpack://playpass/./node_modules/date-fns/locale/en-US/_lib/formatRelative.js","webpack://playpass/./node_modules/date-fns/locale/_lib/buildLocalizeFn.js","webpack://playpass/./node_modules/date-fns/locale/en-US/_lib/localize.js","webpack://playpass/./node_modules/date-fns/locale/_lib/buildMatchFn.js","webpack://playpass/./node_modules/date-fns/locale/en-US/_lib/match.js","webpack://playpass/./node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","webpack://playpass/./node_modules/date-fns/locale/en-US.js","webpack://playpass/./node_modules/date-fns/_lib/format/longFormatters.js","webpack://playpass/./node_modules/date-fns/_lib/protectedTokens.js","webpack://playpass/./node_modules/date-fns/_lib/defaultOptions.js","webpack://playpass/./node_modules/date-fns/parse/_lib/Setter.js","webpack://playpass/./node_modules/date-fns/transpose.js","webpack://playpass/./node_modules/date-fns/parse/_lib/Parser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/constants.js","webpack://playpass/./node_modules/date-fns/parse/_lib/utils.js","webpack://playpass/./node_modules/date-fns/startOfWeek.js","webpack://playpass/./node_modules/date-fns/getWeekYear.js","webpack://playpass/./node_modules/date-fns/startOfISOWeek.js","webpack://playpass/./node_modules/date-fns/getWeek.js","webpack://playpass/./node_modules/date-fns/startOfWeekYear.js","webpack://playpass/./node_modules/date-fns/getISOWeekYear.js","webpack://playpass/./node_modules/date-fns/getISOWeek.js","webpack://playpass/./node_modules/date-fns/startOfISOWeekYear.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/DateParser.js","webpack://playpass/./node_modules/date-fns/addDays.js","webpack://playpass/./node_modules/date-fns/setDay.js","webpack://playpass/./node_modules/date-fns/setISODay.js","webpack://playpass/./node_modules/date-fns/getISODay.js","webpack://playpass/./node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/EraParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/YearParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/MonthParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","webpack://playpass/./node_modules/date-fns/setWeek.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","webpack://playpass/./node_modules/date-fns/setISOWeek.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/DayParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/SecondParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","webpack://playpass/./node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","webpack://playpass/./node_modules/date-fns/parse.js","webpack://playpass/./node_modules/date-fns/getDefaultOptions.js","webpack://playpass/./node_modules/date-fns/parseISO.js","webpack://playpass/./node_modules/date-fns/isValid.js","webpack://playpass/./node_modules/date-fns/isDate.js","webpack://playpass/./node_modules/date-fns/_lib/normalizeDates.js","webpack://playpass/./node_modules/date-fns/startOfDay.js","webpack://playpass/./node_modules/date-fns/differenceInCalendarDays.js","webpack://playpass/./node_modules/date-fns/startOfYear.js","webpack://playpass/./node_modules/date-fns/_lib/addLeadingZeros.js","webpack://playpass/./node_modules/date-fns/_lib/format/lightFormatters.js","webpack://playpass/./node_modules/date-fns/_lib/format/formatters.js","webpack://playpass/./node_modules/date-fns/getDayOfYear.js","webpack://playpass/./node_modules/date-fns/format.js","webpack://playpass/./node_modules/date-fns/addMilliseconds.js","webpack://playpass/./node_modules/date-fns/addMonths.js","webpack://playpass/./node_modules/date-fns/differenceInMilliseconds.js","webpack://playpass/./node_modules/date-fns/_lib/getRoundingMethod.js","webpack://playpass/./node_modules/date-fns/differenceInDays.js","webpack://playpass/./node_modules/date-fns/compareAsc.js","webpack://playpass/./node_modules/date-fns/endOfDay.js","webpack://playpass/./node_modules/date-fns/endOfMonth.js","webpack://playpass/./node_modules/date-fns/differenceInMonths.js","webpack://playpass/./node_modules/date-fns/differenceInCalendarMonths.js","webpack://playpass/./node_modules/date-fns/isLastDayOfMonth.js","webpack://playpass/./node_modules/date-fns/differenceInYears.js","webpack://playpass/./node_modules/date-fns/differenceInCalendarYears.js","webpack://playpass/./node_modules/date-fns/endOfYear.js","webpack://playpass/./node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js","webpack://playpass/./node_modules/date-fns/addSeconds.js","webpack://playpass/./node_modules/date-fns/addMinutes.js","webpack://playpass/./node_modules/date-fns/addHours.js","webpack://playpass/./node_modules/date-fns/addWeeks.js","webpack://playpass/./node_modules/date-fns/addQuarters.js","webpack://playpass/./node_modules/date-fns/addYears.js","webpack://playpass/./node_modules/date-fns/differenceInSeconds.js","webpack://playpass/./node_modules/date-fns/differenceInMinutes.js","webpack://playpass/./node_modules/date-fns/differenceInHours.js","webpack://playpass/./node_modules/date-fns/differenceInWeeks.js","webpack://playpass/./node_modules/date-fns/differenceInQuarters.js","webpack://playpass/./node_modules/date-fns/startOfSecond.js","webpack://playpass/./node_modules/date-fns/startOfMinute.js","webpack://playpass/./node_modules/date-fns/startOfHour.js","webpack://playpass/./node_modules/date-fns/startOfMonth.js","webpack://playpass/./node_modules/date-fns/startOfQuarter.js","webpack://playpass/./node_modules/date-fns/endOfSecond.js","webpack://playpass/./node_modules/date-fns/endOfMinute.js","webpack://playpass/./node_modules/date-fns/endOfHour.js","webpack://playpass/./node_modules/date-fns/endOfWeek.js","webpack://playpass/./node_modules/date-fns/endOfQuarter.js","webpack://playpass/./node_modules/chartkick/chart.js/chart.esm.js","webpack://playpass/./node_modules/flatpickr/dist/esm/types/options.js","webpack://playpass/./node_modules/flatpickr/dist/esm/l10n/default.js","webpack://playpass/./node_modules/flatpickr/dist/esm/utils/index.js","webpack://playpass/./node_modules/flatpickr/dist/esm/utils/dom.js","webpack://playpass/./node_modules/flatpickr/dist/esm/utils/formatting.js","webpack://playpass/./node_modules/flatpickr/dist/esm/utils/dates.js","webpack://playpass/./node_modules/flatpickr/dist/esm/index.js","webpack://playpass/./node_modules/@stripe/stripe-js/pure/index.js","webpack://playpass/./node_modules/flatpickr/dist/esm/utils/polyfills.js","webpack://playpass/webpack/bootstrap","webpack://playpass/webpack/runtime/define property getters","webpack://playpass/webpack/runtime/hasOwnProperty shorthand","webpack://playpass/webpack/runtime/make namespace object","webpack://playpass/./node_modules/@sentry/core/build/esm/debug-build.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/version.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/worldwide.js","webpack://playpass/./node_modules/@sentry/core/build/esm/carrier.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/debug-build.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/logger.js","webpack://playpass/./node_modules/@sentry/core/build/esm/integration.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/is.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/browser.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/string.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/object.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/misc.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/eventUtils.js","webpack://playpass/./node_modules/@sentry/core/build/esm/integrations/eventFilters.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/time.js","webpack://playpass/./node_modules/@sentry/core/build/esm/session.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/propagationContext.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/merge.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/spanOnScope.js","webpack://playpass/./node_modules/@sentry/core/build/esm/scope.js","webpack://playpass/./node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","webpack://playpass/./node_modules/@sentry/core/build/esm/defaultScopes.js","webpack://playpass/./node_modules/@sentry/core/build/esm/asyncContext/index.js","webpack://playpass/./node_modules/@sentry/core/build/esm/currentScopes.js","webpack://playpass/./node_modules/@sentry/core/build/esm/integrations/functiontostring.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/stacktrace.js","webpack://playpass/./node_modules/@sentry/core/build/esm/integrations/dedupe.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/supports.js","webpack://playpass/./node_modules/@sentry/core/build/esm/constants.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/dsn.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/normalize.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/envelope.js","webpack://playpass/./node_modules/@sentry/core/build/esm/semanticAttributes.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/baggage.js","webpack://playpass/./node_modules/@sentry/core/build/esm/tracing/utils.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/spanUtils.js","webpack://playpass/./node_modules/@sentry/core/build/esm/tracing/spanstatus.js","webpack://playpass/./node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/error.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/syncpromise.js","webpack://playpass/./node_modules/@sentry/core/build/esm/eventProcessors.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/debug-ids.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/prepareEvent.js","webpack://playpass/./node_modules/@sentry/core/build/esm/client.js","webpack://playpass/./node_modules/@sentry/core/build/esm/api.js","webpack://playpass/./node_modules/@sentry/core/build/esm/envelope.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/transactionEvent.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/clientreport.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/ipAddress.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","webpack://playpass/./node_modules/@sentry/core/build/esm/exports.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/helpers.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/client.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/env.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/debug-build.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/instrument/handlers.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/types.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/instrument/console.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/instrument/fetch.js","webpack://playpass/./node_modules/@sentry/core/build/esm/breadcrumbs.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/breadcrumb-log-level.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/url.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/severity.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalError.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalUnhandledRejection.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/aggregate-errors.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js","webpack://playpass/./node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js","webpack://playpass/./node_modules/@sentry/core/build/esm/transports/base.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/promisebuffer.js","webpack://playpass/./node_modules/@sentry/core/build/esm/utils-hoist/ratelimit.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/sdk.js","webpack://playpass/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://playpass/./app/javascript/controllers/application.js","webpack://playpass/./app/javascript/controllers/alert_controller.js","webpack://playpass/./app/javascript/controllers/shared/DevLog.js","webpack://playpass/./app/javascript/controllers/append_frame_controller.js","webpack://playpass/./app/javascript/controllers/loaders/ChartkickLoader.js","webpack://playpass/./app/javascript/controllers/shared/Toggle.js","webpack://playpass/./app/javascript/controllers/shared/LocalStorageUtils.js","webpack://playpass/./app/javascript/controllers/color_scheme_controller.js","webpack://playpass/./app/javascript/controllers/shared/Editor.js","webpack://playpass/./app/javascript/controllers/loaders/FlatpickrLoader.js","webpack://playpass/./app/javascript/controllers/shared/AppendParams.js","webpack://playpass/./app/javascript/controllers/flatpickr_controller.js","webpack://playpass/./app/javascript/controllers/shared/CatchError.js","webpack://playpass/./app/javascript/controllers/loaders/DynamicScriptLoader.js","webpack://playpass/./app/javascript/controllers/loaders/GoogleAnalyticsLoader.js","webpack://playpass/./app/javascript/controllers/google_analytics_controller.js","webpack://playpass/./app/javascript/controllers/loaders/GoogleChartsLoader.js","webpack://playpass/./node_modules/@googlemaps/js-api-loader/dist/index.mjs","webpack://playpass/./app/javascript/controllers/loaders/GoogleMapsLoader.js","webpack://playpass/./app/javascript/controllers/loaders/IntercomLoader.js","webpack://playpass/./app/javascript/controllers/google_maps_controller.js","webpack://playpass/./app/javascript/controllers/intercom_controller.js","webpack://playpass/./app/javascript/controllers/shared/LazyObserver.js","webpack://playpass/./app/javascript/controllers/menu_toggle_controller.js","webpack://playpass/./app/javascript/controllers/reload_frame_controller.js","webpack://playpass/./app/javascript/controllers/remove_frame_controller.js","webpack://playpass/./app/javascript/controllers/shared/SelectedOption.js","webpack://playpass/./app/javascript/controllers/sport_controller.js","webpack://playpass/./app/javascript/controllers/loaders/StripeLoader.js","webpack://playpass/./app/javascript/controllers/stripe_checkout_controller.js","webpack://playpass/./app/javascript/controllers/stripe_checkout_registration_controller.js","webpack://playpass/./app/javascript/controllers/shared/LocaleDate.js","webpack://playpass/./app/javascript/controllers/toggle_checkbox_controller.js","webpack://playpass/./app/javascript/controllers/toggle_choice_controller.js","webpack://playpass/./app/javascript/controllers/toggle_controller.js","webpack://playpass/./app/javascript/controllers/toggle_select_controller.js","webpack://playpass/./app/javascript/controllers/shared/ClearInput.js","webpack://playpass/./app/javascript/controllers/index.js","webpack://playpass/./app/javascript/controllers/autofocus_controller.js","webpack://playpass/./app/javascript/controllers/chartkick_controller.js","webpack://playpass/./app/javascript/controllers/collapse_controller.js","webpack://playpass/./app/javascript/controllers/editor_controller.js","webpack://playpass/./app/javascript/controllers/form_controller.js","webpack://playpass/./app/javascript/controllers/shared/AlertMsg.js","webpack://playpass/./app/javascript/controllers/google_charts_controller.js","webpack://playpass/./app/javascript/controllers/lazy_controller.js","webpack://playpass/./app/javascript/controllers/print_controller.js","webpack://playpass/./app/javascript/controllers/recaptcha_controller.js","webpack://playpass/./app/javascript/controllers/loaders/RecaptchaLoader.js","webpack://playpass/./app/javascript/controllers/select_tab_controller.js","webpack://playpass/./app/javascript/controllers/time_controller.js","webpack://playpass/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://playpass/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://playpass/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://playpass/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://playpass/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://playpass/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","webpack://playpass/./node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js","webpack://playpass/./node_modules/@sentry/core/build/esm/sdk.js","webpack://playpass/./app/javascript/application.js"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar RELEASE_TRAIN = 'acacia';\n\nvar runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion(version) {\n return version === 3 ? 'v3' : version;\n};\n\nvar ORIGIN = 'https://js.stripe.com';\nvar STRIPE_JS_URL = \"\".concat(ORIGIN, \"/\").concat(RELEASE_TRAIN, \"/stripe.js\");\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar STRIPE_JS_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/(v3|[a-z]+)\\/stripe\\.js(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\n\nvar isStripeJSURL = function isStripeJSURL(url) {\n return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);\n};\n\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(ORIGIN, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!isStripeJSURL(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(STRIPE_JS_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"6.1.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function (cause) {\n reject(new Error('Failed to load Stripe.js', {\n cause: cause\n }));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise[\"catch\"](function (error) {\n stripePromise = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var pk = args[0];\n var isTestKey = pk.match(/^pk_test/); // @ts-expect-error this is not publicly typed\n\n var version = runtimeVersionToUrlVersion(maybeStripe.version);\n var expectedVersion = RELEASE_TRAIN;\n\n if (isTestKey && version !== expectedVersion) {\n console.warn(\"Stripe.js@\".concat(version, \" was loaded on the page, but @stripe/stripe-js@\").concat(\"6.1.0\", \" expected Stripe.js@\").concat(expectedVersion, \". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning\"));\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar validateLoadParams = function validateLoadParams(params) {\n var errorMessage = \"invalid load parameters; expected object of shape\\n\\n {advancedFraudSignals: boolean}\\n\\nbut received\\n\\n \".concat(JSON.stringify(params), \"\\n\");\n\n if (params === null || _typeof(params) !== 'object') {\n throw new Error(errorMessage);\n }\n\n if (Object.keys(params).length === 1 && typeof params.advancedFraudSignals === 'boolean') {\n return params;\n }\n\n throw new Error(errorMessage);\n};\n\nvar loadParams;\nvar loadStripeCalled = false;\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadStripeCalled = true;\n var startTime = Date.now();\n return loadScript(loadParams).then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nloadStripe.setLoadParameters = function (params) {\n // we won't throw an error if setLoadParameters is called with the same values as before\n if (loadStripeCalled && loadParams) {\n var validatedParams = validateLoadParams(params);\n var parameterKeys = Object.keys(validatedParams);\n var sameParameters = parameterKeys.reduce(function (previousValue, currentValue) {\n var _loadParams;\n\n return previousValue && params[currentValue] === ((_loadParams = loadParams) === null || _loadParams === void 0 ? void 0 : _loadParams[currentValue]);\n }, true);\n\n if (sameParameters) {\n return;\n }\n }\n\n if (loadStripeCalled) {\n throw new Error('You cannot change load parameters after calling loadStripe');\n }\n\n loadParams = validateLoadParams(params);\n};\n\nexports.loadStripe = loadStripe;\n","/*!\n * Chartkick.js v5.0.1\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * MIT License\n */\n\nfunction isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n}\n\nfunction isFunction(variable) {\n return variable instanceof Function;\n}\n\nfunction isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n}\n\n// https://github.com/madrobby/zepto/blob/master/src/zepto.js\nfunction extend(target, source) {\n for (var key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") { continue; }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n}\n\nfunction merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n}\n\nvar DATE_PATTERN = /^(\\d\\d\\d\\d)(?:-)?(\\d\\d)(?:-)?(\\d\\d)$/i;\n\nfunction negativeValues(series) {\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction toStr(obj) {\n return \"\" + obj;\n}\n\nfunction toFloat(obj) {\n return parseFloat(obj);\n}\n\nfunction toDate(obj) {\n if (obj instanceof Date) {\n return obj;\n } else if (typeof obj === \"number\") {\n return new Date(obj * 1000); // ms\n } else {\n var s = toStr(obj);\n var matches = s.match(DATE_PATTERN);\n if (matches) {\n var year = parseInt(matches[1], 10);\n var month = parseInt(matches[2], 10) - 1;\n var day = parseInt(matches[3], 10);\n return new Date(year, month, day);\n } else {\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = s.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n // Date.parse returns milliseconds if valid and NaN if invalid\n return new Date(Date.parse(str) || s);\n }\n }\n}\n\nfunction toArr(obj) {\n if (isArray(obj)) {\n return obj;\n } else {\n var arr = [];\n for (var i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n arr.push([i, obj[i]]);\n }\n }\n return arr;\n }\n}\n\nfunction jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.singleSeriesFormat || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.singleSeriesFormat);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n }\n\n // min\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n }\n\n // max\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n }\n\n // merge library last\n options = merge(options, opts.library || {});\n\n return options;\n };\n}\n\nfunction sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n}\n\nfunction sortByNumberSeries(a, b) {\n return a[0] - b[0];\n}\n\n// needed since sort() without arguments does string comparison\nfunction sortByNumber(a, b) {\n return a - b;\n}\n\nfunction every(values, fn) {\n for (var i = 0; i < values.length; i++) {\n if (!fn(values[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isDay(timeUnit) {\n return timeUnit === \"day\" || timeUnit === \"week\" || timeUnit === \"month\" || timeUnit === \"year\";\n}\n\nfunction calculateTimeUnit(values, maxDay) {\n if ( maxDay === void 0 ) maxDay = false;\n\n if (values.length === 0) {\n return null;\n }\n\n var minute = every(values, function (d) { return d.getMilliseconds() === 0 && d.getSeconds() === 0; });\n if (!minute) {\n return null;\n }\n\n var hour = every(values, function (d) { return d.getMinutes() === 0; });\n if (!hour) {\n return \"minute\";\n }\n\n var day = every(values, function (d) { return d.getHours() === 0; });\n if (!day) {\n return \"hour\";\n }\n\n if (maxDay) {\n return \"day\";\n }\n\n var month = every(values, function (d) { return d.getDate() === 1; });\n if (!month) {\n var dayOfWeek = values[0].getDay();\n var week = every(values, function (d) { return d.getDay() === dayOfWeek; });\n return (week ? \"week\" : \"day\");\n }\n\n var year = every(values, function (d) { return d.getMonth() === 0; });\n if (!year) {\n return \"month\";\n }\n\n return \"year\";\n}\n\nfunction isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n}\n\nfunction isNumber(obj) {\n return typeof obj === \"number\";\n}\n\nvar byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\nfunction formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var positive = value >= 0;\n if (!positive) {\n value *= -1;\n }\n\n var baseValue = axis ? options.byteScale : value;\n\n var suffixIdx;\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n }\n\n // TODO handle manual precision case\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n precision = value >= 1000 ? 4 : 3;\n }\n suffix = \" \" + byteSuffixes[suffixIdx];\n\n // flip value back\n if (!positive) {\n value *= -1;\n }\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n}\n\nfunction seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n return null;\n}\n\nvar baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n plugins: {\n legend: {},\n tooltip: {\n displayColors: false,\n callbacks: {}\n },\n title: {\n font: {\n size: 20\n },\n color: \"#333\"\n }\n },\n interaction: {}\n};\n\nvar defaultOptions$2 = {\n scales: {\n y: {\n ticks: {\n maxTicksLimit: 4\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n grid: {}\n },\n x: {\n grid: {\n drawOnChartArea: false\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n time: {},\n ticks: {}\n }\n }\n};\n\n// http://there4.io/2012/05/02/google-chart-color-list/\nvar defaultColors = [\n \"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\",\n \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\",\n \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"\n];\n\nfunction hideLegend$2(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.plugins.legend.display = !!legend;\n if (legend && legend !== true) {\n options.plugins.legend.position = legend;\n }\n } else if (hideLegend) {\n options.plugins.legend.display = false;\n }\n}\n\nfunction setTitle$2(options, title) {\n options.plugins.title.display = true;\n options.plugins.title.text = title;\n}\n\nfunction setMin$2(options, min) {\n if (min !== null) {\n options.scales.y.min = toFloat(min);\n }\n}\n\nfunction setMax$2(options, max) {\n options.scales.y.max = toFloat(max);\n}\n\nfunction setBarMin$1(options, min) {\n if (min !== null) {\n options.scales.x.min = toFloat(min);\n }\n}\n\nfunction setBarMax$1(options, max) {\n options.scales.x.max = toFloat(max);\n}\n\nfunction setStacked$2(options, stacked) {\n options.scales.x.stacked = !!stacked;\n options.scales.y.stacked = !!stacked;\n}\n\nfunction setXtitle$2(options, title) {\n options.scales.x.title.display = true;\n options.scales.x.title.text = title;\n}\n\nfunction setYtitle$2(options, title) {\n options.scales.y.title.display = true;\n options.scales.y.title.text = title;\n}\n\n// https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\nfunction addOpacity(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n}\n\nfunction notnull(x) {\n return x !== null && x !== undefined;\n}\n\nfunction setLabelSize(chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n value = toStr(this.getLabelForValue(value));\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n}\n\nfunction calculateScale(series) {\n var scale = 1;\n var max = maxAbsY(series);\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n }\n return scale;\n}\n\nfunction setFormatOptions$1(chart, options, chartType) {\n // options to apply to x and r values for scatter and bubble\n var numericOptions = {\n thousands: chart.options.thousands,\n decimal: chart.options.decimal\n };\n\n // options to apply to y value\n var formatOptions = merge({\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n }, numericOptions);\n\n if (chart.options.bytes) {\n var series = chart.data;\n if (chartType === \"pie\") {\n series = [{data: series}];\n }\n\n // set step size\n formatOptions.byteScale = calculateScale(series);\n }\n\n if (chartType !== \"pie\") {\n var axis = options.scales.y;\n if (chartType === \"bar\") {\n axis = options.scales.x;\n }\n\n if (formatOptions.byteScale) {\n if (!axis.ticks.stepSize) {\n axis.ticks.stepSize = formatOptions.byteScale / 2;\n }\n if (!axis.ticks.maxTicksLimit) {\n axis.ticks.maxTicksLimit = 4;\n }\n }\n\n if (!axis.ticks.callback) {\n axis.ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n\n if ((chartType === \"scatter\" || chartType === \"bubble\") && !options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n return formatValue(\"\", value, numericOptions, true);\n };\n }\n }\n\n if (!options.plugins.tooltip.callbacks.label) {\n if (chartType === \"scatter\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n\n var dataPoint = context.parsed;\n return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ')';\n };\n } else if (chartType === \"bubble\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n var dataPoint = context.raw;\n return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ', ' + formatValue('', dataPoint.v, numericOptions) + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.plugins.tooltip.callbacks.label = function (context) {\n return formatValue('', context.parsed, formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n options.plugins.tooltip.callbacks.label = function (context) {\n // don't show null values for stacked charts\n if (context.parsed[valueLabel] === null) {\n return;\n }\n\n var label = context.dataset.label || '';\n if (label) {\n label += ': ';\n }\n return formatValue(label, context.parsed[valueLabel], formatOptions);\n };\n }\n }\n\n // avoid formatting x-axis labels\n // by default, Chart.js applies locale\n if ((chartType === \"line\" || chartType === \"area\") && chart.xtype === \"number\") {\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n return toStr(value);\n };\n }\n\n if (!options.plugins.tooltip.callbacks.title) {\n options.plugins.tooltip.callbacks.title = function (context) {\n return toStr(context[0].parsed.x);\n };\n }\n }\n}\n\nfunction maxAbsY(series) {\n var max = 0;\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n var v = Math.abs(data[j][1]);\n if (v > max) {\n max = v;\n }\n }\n }\n return max;\n}\n\nfunction maxR(series) {\n // start at zero since radius must be positive\n var max = 0;\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n for (var j = 0; j < data.length; j++) {\n var v = data[j][2];\n if (v > max) {\n max = v;\n }\n }\n }\n return max;\n}\n\nvar jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\nfunction prepareDefaultData(chart) {\n var series = chart.data;\n var rows = {};\n var keys = [];\n var labels = [];\n var values = [];\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n\n for (var j = 0; j < data.length; j++) {\n var d = data[j];\n var key = chart.xtype === \"datetime\" ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n keys.push(key);\n }\n rows[key][i] = d[1];\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n keys.sort(sortByNumber);\n }\n\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n values.push([]);\n }\n\n for (var i$2 = 0; i$2 < keys.length; i$2++) {\n var key$1 = keys[i$2];\n\n var label = chart.xtype === \"datetime\" ? new Date(key$1) : key$1;\n labels.push(label);\n\n var row = rows[key$1];\n for (var j$1 = 0; j$1 < series.length; j$1++) {\n var v = row[j$1];\n // Chart.js doesn't like undefined\n values[j$1].push(v === undefined ? null : v);\n }\n }\n\n return {\n labels: labels,\n values: values\n };\n}\n\nfunction prepareBubbleData(chart) {\n var series = chart.data;\n var values = [];\n var max = maxR(series);\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n var points = [];\n for (var j = 0; j < data.length; j++) {\n var v = data[j];\n points.push({\n x: v[0],\n y: v[1],\n r: v[2] * 20 / max,\n // custom attribute, for tooltip\n v: v[2]\n });\n }\n values.push(points);\n }\n\n return {\n labels: [],\n values: values\n };\n}\n\n// scatter or numeric line/area\nfunction prepareNumberData(chart) {\n var series = chart.data;\n var values = [];\n\n for (var i = 0; i < series.length; i++) {\n var data = series[i].data;\n\n data.sort(sortByNumberSeries);\n\n var points = [];\n for (var j = 0; j < data.length; j++) {\n var v = data[j];\n points.push({\n x: v[0],\n y: v[1]\n });\n }\n values.push(points);\n }\n\n return {\n labels: [],\n values: values\n };\n}\n\nfunction prepareData(chart, chartType) {\n if (chartType === \"bubble\") {\n return prepareBubbleData(chart);\n } else if (chart.xtype === \"number\" && chartType !== \"bar\" && chartType !== \"column\") {\n return prepareNumberData(chart);\n } else {\n return prepareDefaultData(chart);\n }\n}\n\nfunction createDataTable(chart, options, chartType) {\n var ref = prepareData(chart, chartType);\n var labels = ref.labels;\n var values = ref.values;\n\n var series = chart.data;\n var datasets = [];\n var colors = chart.options.colors || defaultColors;\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n // use colors for each bar for single series format\n var color = (void 0);\n var backgroundColor = (void 0);\n if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n color = colors;\n backgroundColor = [];\n for (var j = 0; j < colors.length; j++) {\n backgroundColor[j] = addOpacity(color[j], 0.5);\n }\n } else {\n color = s.color || colors[i];\n backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n }\n\n var dataset = {\n label: s.name || \"\",\n data: values[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n borderWidth: 2\n };\n\n var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n if (pointChart) {\n dataset.pointBackgroundColor = color;\n dataset.pointHoverBackgroundColor = color;\n dataset.pointHitRadius = 50;\n }\n\n if (chartType === \"bubble\") {\n dataset.pointBackgroundColor = backgroundColor;\n dataset.pointHoverBackgroundColor = backgroundColor;\n dataset.pointHoverBorderWidth = 2;\n }\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n if (curve === false) {\n dataset.tension = 0;\n } else if (pointChart) {\n dataset.tension = 0.4;\n }\n\n var points = seriesOption(chart, s, \"points\");\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHoverRadius = 0;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n if (notnull(xmin)) {\n options.scales.x.min = toDate(xmin).getTime();\n }\n if (notnull(xmax)) {\n options.scales.x.max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.x.min = xmin;\n }\n if (notnull(xmax)) {\n options.scales.x.max = xmax;\n }\n }\n\n if (chart.xtype === \"datetime\") {\n var timeUnit = calculateTimeUnit(labels);\n\n // for empty datetime chart\n if (labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n }\n\n if (labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (var i$1 = 1; i$1 < labels.length; i$1++) {\n var value = labels[i$1].getTime();\n if (value < minTime) {\n minTime = value;\n }\n if (value > maxTime) {\n maxTime = value;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.x.time.unit) {\n var step;\n if (timeUnit === \"year\" || timeDiff > 365 * 10) {\n options.scales.x.time.unit = \"year\";\n step = 365;\n } else if (timeUnit === \"month\" || timeDiff > 30 * 10) {\n options.scales.x.time.unit = \"month\";\n step = 30;\n } else if (timeUnit === \"week\" || timeUnit === \"day\" || timeDiff > 10) {\n options.scales.x.time.unit = \"day\";\n step = 1;\n } else if (timeUnit === \"hour\" || timeDiff > 0.5) {\n options.scales.x.time.displayFormats = {hour: \"MMM d, h a\"};\n options.scales.x.time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (timeUnit === \"minute\") {\n options.scales.x.time.displayFormats = {minute: \"h:mm a\"};\n options.scales.x.time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n // width not available for hidden elements\n var width = chart.element.offsetWidth;\n if (width > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n if (timeUnit === \"week\" && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n options.scales.x.ticks.stepSize = unitStepSize;\n }\n }\n }\n\n if (!options.scales.x.time.tooltipFormat) {\n if (timeUnit === \"year\") {\n options.scales.x.time.tooltipFormat = \"yyyy\";\n } else if (timeUnit === \"month\") {\n options.scales.x.time.tooltipFormat = \"MMM yyyy\";\n } else if (timeUnit === \"week\" || timeUnit === \"day\") {\n options.scales.x.time.tooltipFormat = \"PP\";\n } else if (timeUnit === \"hour\") {\n options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n } else if (timeUnit === \"minute\") {\n options.scales.x.time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n }\n\n return {\n labels: labels,\n datasets: datasets\n };\n}\n\nvar defaultExport$2 = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n};\n\ndefaultExport$2.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n if (!chartType) {\n chartType = \"line\";\n }\n\n var chartOptions = {};\n\n var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n setFormatOptions$1(chart, options, chartType);\n\n var data = createDataTable(chart, options, chartType);\n\n if (chart.xtype === \"number\") {\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n } else {\n options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n};\n\ndefaultExport$2.prototype.renderPieChart = function renderPieChart (chart) {\n var options = merge({}, baseOptions);\n if (chart.options.donut) {\n options.cutout = \"50%\";\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$2(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$2(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n\n var labels = [];\n var values = [];\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n\n this.drawChart(chart, \"pie\", data, options);\n};\n\ndefaultExport$2.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n var options;\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions$2);\n barOptions.indexAxis = \"y\";\n\n // ensure gridlines have proper orientation\n barOptions.scales.x.grid.drawOnChartArea = true;\n barOptions.scales.y.grid.drawOnChartArea = false;\n delete barOptions.scales.y.ticks.maxTicksLimit;\n\n options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n } else {\n options = jsOptions$2(chart, chart.options);\n }\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\");\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"index\";\n }\n this.drawChart(chart, \"bar\", data, options);\n};\n\ndefaultExport$2.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"area\");\n};\n\ndefaultExport$2.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$2.prototype.renderScatterChart = function renderScatterChart (chart, chartType) {\n chartType = chartType || \"scatter\";\n\n var options = jsOptions$2(chart, chart.options);\n setFormatOptions$1(chart, options, chartType);\n\n if (!(\"showLine\" in options)) {\n options.showLine = false;\n }\n\n var data = createDataTable(chart, options, chartType);\n\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n\n // prevent grouping hover and tooltips\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"nearest\";\n }\n\n this.drawChart(chart, chartType, data, options);\n};\n\ndefaultExport$2.prototype.renderBubbleChart = function renderBubbleChart (chart) {\n this.renderScatterChart(chart, \"bubble\");\n};\n\ndefaultExport$2.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n};\n\ndefaultExport$2.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n};\n\nvar defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n },\n time: {\n useUTC: false\n }\n};\n\nfunction hideLegend$1(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n}\n\nfunction setTitle$1(options, title) {\n options.title.text = title;\n}\n\nfunction setMin$1(options, min) {\n options.yAxis.min = min;\n}\n\nfunction setMax$1(options, max) {\n options.yAxis.max = max;\n}\n\nfunction setStacked$1(options, stacked) {\n var stackedValue = stacked ? (stacked === true ? \"normal\" : stacked) : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n}\n\nfunction setXtitle$1(options, title) {\n options.xAxis.title.text = title;\n}\n\nfunction setYtitle$1(options, title) {\n options.yAxis.title.text = title;\n}\n\nvar jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\nfunction setFormatOptions(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n // skip when axis is an array (like with min/max)\n if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n options.tooltip.pointFormatter = function () {\n return '\\u25CF ' + formatValue(this.series.name + ': ', this.y, formatOptions) + '
';\n };\n }\n}\n\nvar defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n};\n\ndefaultExport$1.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions);\n if (chart.xtype === \"number\") {\n options.xAxis.type = options.xAxis.type || \"linear\";\n } else {\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n }\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n setFormatOptions(chart, options, chartType);\n\n var series = chart.data;\n for (var i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n var data = series[i].data;\n if (chart.xtype === \"datetime\") {\n for (var j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n } else if (chart.xtype === \"number\") {\n data.sort(sortByNumberSeries);\n }\n series[i].marker = {symbol: \"circle\"};\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderScatterChart = function renderScatterChart (chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n};\n\ndefaultExport$1.prototype.renderPieChart = function renderPieChart (chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.plotOptions = {pie: {innerSize: \"50%\"}};\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n\n this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options);\n var rows = [];\n var categories = [];\n options.chart.type = chartType;\n setFormatOptions(chart, options, chartType);\n\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n for (var j = 0; j < s.data.length; j++) {\n var d = s.data[j];\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n\n var newSeries = [];\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var d$1 = [];\n for (var j$1 = 0; j$1 < categories.length; j$1++) {\n d$1.push(rows[categories[j$1]][i$1] || 0);\n }\n\n var d2 = {\n name: series[i$1].name || \"Value\",\n data: d$1\n };\n if (series[i$1].stack) {\n d2.stack = series[i$1].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n};\n\ndefaultExport$1.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$1.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"areaspline\");\n};\n\ndefaultExport$1.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n};\n\ndefaultExport$1.prototype.drawChart = function drawChart (chart, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n};\n\nvar loaded = {};\nvar callbacks = [];\n\n// Set chart options\nvar defaultOptions = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n};\n\nfunction hideLegend(options, legend, hideLegend) {\n if (legend !== undefined) {\n var position;\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n options.legend.position = position;\n } else if (hideLegend) {\n options.legend.position = \"none\";\n }\n}\n\nfunction setTitle(options, title) {\n options.title = title;\n options.titleTextStyle = {color: \"#333\", fontSize: \"20px\"};\n}\n\nfunction setMin(options, min) {\n options.vAxis.viewWindow.min = min;\n}\n\nfunction setMax(options, max) {\n options.vAxis.viewWindow.max = max;\n}\n\nfunction setBarMin(options, min) {\n options.hAxis.viewWindow.min = min;\n}\n\nfunction setBarMax(options, max) {\n options.hAxis.viewWindow.max = max;\n}\n\nfunction setStacked(options, stacked) {\n options.isStacked = stacked || false;\n}\n\nfunction setXtitle(options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n}\n\nfunction setYtitle(options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n}\n\nvar jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\nfunction resize(callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n callback();\n}\n\nvar defaultExport = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n};\n\ndefaultExport.prototype.renderLineChart = function renderLineChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"LineChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderPieChart = function renderPieChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n if (\"legend\" in chart.options) {\n hideLegend(chartOptions, chart.options.legend);\n }\n if (chart.options.title) {\n setTitle(chartOptions, chart.options.title);\n }\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n\n this$1$1.drawChart(chart, \"PieChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderColumnChart = function renderColumnChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var options = jsOptions(chart, chart.options);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderBarChart = function renderBarChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"BarChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderAreaChart = function renderAreaChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n this$1$1.drawChart(chart, \"AreaChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderGeoChart = function renderGeoChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n\n this$1$1.drawChart(chart, \"GeoChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderScatterChart = function renderScatterChart (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions(chart, chart.options, chartOptions);\n\n var series = chart.data;\n var rows2 = [];\n for (var i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n var d = series[i].data;\n for (var j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n data.addColumn(\"number\", series[i$1].name);\n }\n data.addRows(rows2);\n\n this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n};\n\ndefaultExport.prototype.renderTimeline = function renderTimeline (chart) {\n var this$1$1 = this;\n\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn({type: \"string\", id: \"Name\"});\n data.addColumn({type: \"date\", id: \"Start\"});\n data.addColumn({type: \"date\", id: \"End\"});\n data.addRows(chart.data);\n\n chart.element.style.lineHeight = \"normal\";\n\n this$1$1.drawChart(chart, \"Timeline\", data, options);\n });\n};\n\n// TODO remove resize events\ndefaultExport.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n};\n\ndefaultExport.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n if (chart.destroyed) { return; }\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n};\n\ndefaultExport.prototype.waitForLoaded = function waitForLoaded (chart, pack, callback) {\n var this$1$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({pack: pack, callback: callback});\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true;\n\n // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n var loadOptions = {\n packages: [pack],\n callback: function () { this$1$1.runCallbacks(); }\n };\n var config = chart.__config();\n if (config.language) {\n loadOptions.language = config.language;\n }\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n};\n\ndefaultExport.prototype.runCallbacks = function runCallbacks () {\n for (var i = 0; i < callbacks.length; i++) {\n var cb = callbacks[i];\n var call = this.library.visualization && ((cb.pack === \"corechart\" && this.library.visualization.LineChart) || (cb.pack === \"timeline\" && this.library.visualization.Timeline) || (cb.pack === \"geochart\" && this.library.visualization.GeoChart));\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n};\n\n// cant use object as key\ndefaultExport.prototype.createDataTable = function createDataTable (series, columnType) {\n var rows = [];\n var sortedLabels = [];\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (var j = 0; j < s.data.length; j++) {\n var d = s.data[j];\n var key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n rows[key][i] = d[1];\n }\n }\n\n var rows2 = [];\n var values = [];\n for (var j$1 = 0; j$1 < sortedLabels.length; j$1++) {\n var i$1 = sortedLabels[j$1];\n var value = (void 0);\n if (columnType === \"datetime\") {\n value = new Date(i$1);\n values.push(value);\n } else {\n value = i$1;\n }\n rows2.push([value].concat(rows[i$1]));\n }\n\n var day = true;\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n\n var timeUnit = calculateTimeUnit(values, true);\n day = isDay(timeUnit);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (var i$2 = 0; i$2 < rows2.length; i$2++) {\n rows2[i$2][0] = toStr(rows2[i$2][0]);\n }\n\n columnType = \"string\";\n }\n\n // create datatable\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n for (var i$3 = 0; i$3 < series.length; i$3++) {\n data.addColumn(\"number\", series[i$3].name);\n }\n data.addRows(rows2);\n\n return data;\n};\n\nvar adapters = [];\n\nfunction getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport;\n } else if (isFunction(library)) {\n return defaultExport$2;\n }\n }\n throw new Error(\"Unknown adapter\");\n}\n\nfunction addAdapter(library) {\n var adapterType = getAdapterType(library);\n\n for (var i = 0; i < adapters.length; i++) {\n if (adapters[i].library === library) {\n return;\n }\n }\n\n adapters.push(new adapterType(library));\n}\n\nfunction loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n}\n\n// TODO remove chartType if cross-browser way\n// to get the name of the chart class\nfunction callAdapter(chartType, chart) {\n var fnName = \"render\" + chartType;\n var adapterName = chart.options.adapter;\n\n loadAdapters();\n\n for (var i = 0; i < adapters.length; i++) {\n var adapter = adapters[i];\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n}\n\nvar Chartkick = {\n charts: {},\n configure: function (options) {\n for (var key in options) {\n if (Object.prototype.hasOwnProperty.call(options, key)) {\n Chartkick.config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function (opts) {\n Chartkick.options = opts;\n },\n eachChart: function (callback) {\n for (var chartId in Chartkick.charts) {\n if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n destroyAll: function () {\n for (var chartId in Chartkick.charts) {\n if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n Chartkick.charts[chartId].destroy();\n delete Chartkick.charts[chartId];\n }\n }\n },\n config: {},\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function (adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n};\n\nfunction formatSeriesBubble(data) {\n var r = [];\n for (var i = 0; i < data.length; i++) {\n r.push([toFloat(data[i][0]), toFloat(data[i][1]), toFloat(data[i][2])]);\n }\n return r;\n}\n\n// casts data to proper type\n// sorting is left to adapters\nfunction formatSeriesData(data, keyType) {\n if (keyType === \"bubble\") {\n return formatSeriesBubble(data);\n }\n\n var keyFunc;\n if (keyType === \"number\") {\n keyFunc = toFloat;\n } else if (keyType === \"datetime\") {\n keyFunc = toDate;\n } else {\n keyFunc = toStr;\n }\n\n var r = [];\n for (var i = 0; i < data.length; i++) {\n r.push([keyFunc(data[i][0]), toFloat(data[i][1])]);\n }\n return r;\n}\n\nfunction detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n}\n\nfunction detectXTypeWithFunction(series, func) {\n for (var i = 0; i < series.length; i++) {\n var data = toArr(series[i].data);\n for (var j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// creates a shallow copy of each element of the array\n// elements are expected to be objects\nfunction copySeries(series) {\n var newSeries = [];\n for (var i = 0; i < series.length; i++) {\n var copy = {};\n for (var j in series[i]) {\n if (Object.prototype.hasOwnProperty.call(series[i], j)) {\n copy[j] = series[i][j];\n }\n }\n newSeries.push(copy);\n }\n return newSeries;\n}\n\nfunction processSeries(chart, keyType, noDatetime) {\n var opts = chart.options;\n var series = chart.rawData;\n\n // see if one series or multiple\n chart.singleSeriesFormat = !isArray(series) || !isPlainObject(series[0]);\n if (chart.singleSeriesFormat) {\n series = [{name: opts.label, data: series}];\n }\n\n // convert to array\n // must come before dataEmpty check\n series = copySeries(series);\n for (var i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType || (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts));\n\n // right format\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n series[i$1].data = formatSeriesData(series[i$1].data, chart.xtype);\n }\n\n return series;\n}\n\nfunction processSimple(chart) {\n var perfectData = toArr(chart.rawData);\n for (var i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n return perfectData;\n}\n\nfunction dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction addDownloadButton(chart) {\n var download = chart.options.download;\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {filename: download};\n }\n\n var link = document.createElement(\"a\");\n link.download = download.filename || \"chart.png\";\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n\n var image = document.createElement(\"img\");\n // icon from Font Awesome, modified to set fill color\n var svg = \"\";\n image.src = \"data:image/svg+xml;utf8,\" + (encodeURIComponent(svg));\n image.alt = \"Download\";\n image.style.width = \"20px\";\n image.style.height = \"20px\";\n image.style.border = \"none\";\n link.appendChild(image);\n\n var element = chart.element;\n element.style.position = \"relative\";\n\n chart.__downloadAttached = true;\n\n // mouseenter\n chart.__enterEvent = element.addEventListener(\"mouseover\", function (e) {\n var related = e.relatedTarget;\n // check download option again to ensure it wasn't changed\n if ((!related || (related !== this && !this.contains(related))) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n });\n\n // mouseleave\n chart.__leaveEvent = element.addEventListener(\"mouseout\", function (e) {\n var related = e.relatedTarget;\n if (!related || (related !== this && !this.contains(related))) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n}\n\nvar pendingRequests = [];\nvar runningRequests = 0;\nvar maxRequests = 4;\n\nfunction pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n}\n\nfunction runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n}\n\nfunction requestComplete() {\n runningRequests--;\n runNext();\n}\n\nfunction getJSON(url, success, error) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.onload = function () {\n requestComplete();\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText));\n } else {\n error(xhr.statusText);\n }\n };\n xhr.send();\n}\n\n// helpers\n\nfunction setText(element, text) {\n element.textContent = text;\n}\n\n// TODO remove prefix for all messages\nfunction chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n setText(element, message);\n element.style.color = \"#ff0000\";\n}\n\nfunction errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n}\n\nfunction fetchDataSource(chart, dataSource, showLoading) {\n // only show loading message for urls and callbacks\n if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n setText(chart.element, chart.options.loading);\n }\n\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n}\n\nfunction renderChart(chartType, chart) {\n if (dataEmpty(chart.data, chartType)) {\n var message = chart.options.empty || (chart.options.messages && chart.options.messages.empty) || \"No data\";\n setText(chart.element, message);\n } else {\n callAdapter(chartType, chart);\n // TODO add downloadSupported method to adapter\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n}\n\nfunction getElement(element) {\n if (typeof element === \"string\") {\n var elementId = element;\n element = document.getElementById(element);\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n return element;\n}\n\n// define classes\n\nvar Chart = function Chart(element, dataSource, options) {\n this.element = getElement(element);\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n\n // TODO handle charts without an id for eachChart and destroyAll\n if (this.element.id) {\n Chartkick.charts[this.element.id] = this;\n }\n\n fetchDataSource(this, dataSource, true);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n};\n\nChart.prototype.getElement = function getElement () {\n return this.element;\n};\n\nChart.prototype.getDataSource = function getDataSource () {\n return this.dataSource;\n};\n\nChart.prototype.getData = function getData () {\n return this.data;\n};\n\nChart.prototype.getOptions = function getOptions () {\n return this.options;\n};\n\nChart.prototype.getChartObject = function getChartObject () {\n return this.chart;\n};\n\nChart.prototype.getAdapter = function getAdapter () {\n return this.adapter;\n};\n\nChart.prototype.updateData = function updateData (dataSource, options) {\n this.dataSource = dataSource;\n if (options) {\n this.__updateOptions(options);\n }\n fetchDataSource(this, dataSource, true);\n};\n\nChart.prototype.setOptions = function setOptions (options) {\n this.__updateOptions(options);\n this.redraw();\n};\n\nChart.prototype.redraw = function redraw () {\n fetchDataSource(this, this.rawData);\n};\n\nChart.prototype.refreshData = function refreshData () {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + (new Date()).getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n};\n\nChart.prototype.startRefresh = function startRefresh () {\n var this$1$1 = this;\n\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval(function () {\n this$1$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n};\n\nChart.prototype.stopRefresh = function stopRefresh () {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n};\n\nChart.prototype.toImage = function toImage (download) {\n // TODO move logic to adapter\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.canvas;\n var ctx = this.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n throw new Error(\"Feature only available for Chart.js\");\n }\n};\n\nChart.prototype.destroy = function destroy () {\n this.destroyed = true;\n this.stopRefresh();\n\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n this.element.removeEventListener(\"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n this.element.removeEventListener(\"mouseout\", this.__leaveEvent);\n }\n};\n\nChart.prototype.__updateOptions = function __updateOptions (options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n};\n\nChart.prototype.__render = function __render () {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n};\n\nChart.prototype.__config = function __config () {\n return Chartkick.config;\n};\n\nvar LineChart = /*@__PURE__*/(function (Chart) {\n function LineChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create( Chart && Chart.prototype );\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName () {\n return \"LineChart\";\n };\n\n return LineChart;\n}(Chart));\n\nvar PieChart = /*@__PURE__*/(function (Chart) {\n function PieChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create( Chart && Chart.prototype );\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName () {\n return \"PieChart\";\n };\n\n return PieChart;\n}(Chart));\n\nvar ColumnChart = /*@__PURE__*/(function (Chart) {\n function ColumnChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create( Chart && Chart.prototype );\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName () {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n}(Chart));\n\nvar BarChart = /*@__PURE__*/(function (Chart) {\n function BarChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create( Chart && Chart.prototype );\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName () {\n return \"BarChart\";\n };\n\n return BarChart;\n}(Chart));\n\nvar AreaChart = /*@__PURE__*/(function (Chart) {\n function AreaChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create( Chart && Chart.prototype );\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName () {\n return \"AreaChart\";\n };\n\n return AreaChart;\n}(Chart));\n\nvar GeoChart = /*@__PURE__*/(function (Chart) {\n function GeoChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create( Chart && Chart.prototype );\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName () {\n return \"GeoChart\";\n };\n\n return GeoChart;\n}(Chart));\n\nvar ScatterChart = /*@__PURE__*/(function (Chart) {\n function ScatterChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create( Chart && Chart.prototype );\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData () {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName () {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n}(Chart));\n\nvar BubbleChart = /*@__PURE__*/(function (Chart) {\n function BubbleChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create( Chart && Chart.prototype );\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData () {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName () {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n}(Chart));\n\nvar Timeline = /*@__PURE__*/(function (Chart) {\n function Timeline () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create( Chart && Chart.prototype );\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData () {\n var data = this.rawData;\n for (var i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName () {\n return \"Timeline\";\n };\n\n return Timeline;\n}(Chart));\n\nChartkick.LineChart = LineChart;\nChartkick.PieChart = PieChart;\nChartkick.ColumnChart = ColumnChart;\nChartkick.BarChart = BarChart;\nChartkick.AreaChart = AreaChart;\nChartkick.GeoChart = GeoChart;\nChartkick.ScatterChart = ScatterChart;\nChartkick.BubbleChart = BubbleChart;\nChartkick.Timeline = Timeline;\n\n// not ideal, but allows for simpler integration\nif (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick;\n\n // clean up previous charts before Turbolinks loads new page\n document.addEventListener(\"turbolinks:before-render\", function () {\n if (Chartkick.config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n });\n\n // clean up previous charts before Turbo loads new page\n document.addEventListener(\"turbo:before-render\", function () {\n if (Chartkick.config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n });\n\n // use setTimeout so charting library can come later in same JS file\n setTimeout(function () {\n window.dispatchEvent(new Event(\"chartkick:load\"));\n }, 0);\n}\n\n// backwards compatibility for esm require\nChartkick.default = Chartkick;\n\nexport { Chartkick as default };\n","export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordMessage() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\",\n \"remote\": \"remote\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n this.monitor.recordMessage()\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true\n }\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return null\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n this.subprotocols = []\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 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\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '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 * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\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 */ function isNullOrUndef(value) {\n return value === null || value === undefined;\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 */ function isArray(value) {\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 * 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 */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\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 */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\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 */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\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 */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\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 * 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 */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\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 for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\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 */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\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}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\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);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\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 * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\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 * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\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}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\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 * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\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)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\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}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\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 */ function _decimalPlaces(x) {\n if (!isNumberFinite(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// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\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 return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\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 || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\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 return {\n lo,\n 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 */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\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 */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\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 */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\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 * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\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 * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , vScale , _parsed } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ 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 || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\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 */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\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 easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\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 easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction 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 defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\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 defaults.describe('animations', {\n _fallback: 'animation'\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\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\n }\n }\n }\n });\n}\n\nfunction 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\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\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}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\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 delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\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 ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\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 border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\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 callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\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 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 defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(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}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n 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 this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\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 apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__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}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\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 */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\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/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\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 ctx.restore();\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 * 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 */ function _alignPixel(chart, pixel, width) {\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 * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\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}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\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 if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\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 */ 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 */ 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 ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\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 */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\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}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\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 * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\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 */ 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 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}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\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 */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\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 * @alias Chart.helpers.options\n * @namespace\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 */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\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 */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n 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 */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n '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 */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\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 */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\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 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 font.string = toFontString(font);\n return font;\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 */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\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 * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\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 */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\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 * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, 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 });\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 */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\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}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\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}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\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}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\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}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\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}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\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), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\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}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\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}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\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}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\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\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\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 let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\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 const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\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 * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\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 if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\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 tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\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 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 * 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 */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\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 if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\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] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\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 * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\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 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(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\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 if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\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 return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\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}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\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 {\n x,\n y,\n 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 */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\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 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}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _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}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\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 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 const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n 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 */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\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 if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || 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 * 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 */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\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 * 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 */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\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\nconst getRightToLeftAdapter = function(rectX, width) {\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};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\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}\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}\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 let { start , end , loop } = segment;\n let i, ilen;\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 if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n 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 const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\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 for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\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 function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function 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 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({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\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 if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\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 function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function 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 function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\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({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\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 return result;\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}\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\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\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 for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\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 listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\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 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 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 for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n 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 active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\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([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\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 this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\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 this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n 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\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\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 (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\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 for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\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 if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\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 return Promise.all(running);\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 target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\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}\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 return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\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 return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\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 if (value === null) {\n return;\n }\n let found = false;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\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 [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\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}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\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 return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\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 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 stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\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}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\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}\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),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\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 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 this.initialize();\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 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 updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\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 getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\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 _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\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 addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\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 parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\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 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 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 if (_stacked) {\n updateStacks(this, parsed);\n }\n }\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 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 parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\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 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 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 getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\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, {\n mode\n });\n }\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 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 = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\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 break;\n }\n }\n if (sorted) {\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 getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\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 _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 update(mode) {}\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 if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\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 for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\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 || (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 || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\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 ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\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 getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\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 {\n sharedOptions,\n includeOptions\n };\n }\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 updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\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 options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\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 _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\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 for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\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 _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([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\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 function 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 return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function 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 if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\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 if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\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}\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 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}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\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}\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 {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\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 res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\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}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\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 parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\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 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 range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\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) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\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 for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\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 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 _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\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 for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\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 ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\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 if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\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 if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\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 return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\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' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\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 center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\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 for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\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 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 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 getMaxOverflow() {\n const data = this._cachedMeta.data;\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 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 return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\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 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 properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\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 (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 {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\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 return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\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 index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\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 _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\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 min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\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 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 meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\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 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 for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\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 this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\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 return total;\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 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 return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\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 if (!arcs) {\n return 0;\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 getMaxOffset(arcs) {\n let max = 0;\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 _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\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 this.updateElements(points, start, count, mode);\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 for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\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 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 if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\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 draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\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 return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\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 index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\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 constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\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 return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\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 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 this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\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 const defaultAngle = 360 / this.countVisibleElements();\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 if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\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 this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\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 static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\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 line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\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 const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\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 return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\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 delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\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 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 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 if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\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 const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\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\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\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 */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const { vScale } = controller._cachedMeta;\n const { _parsed } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\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 {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function 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 function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\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 function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\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({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\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 ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\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({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\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 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 x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\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\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\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 ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\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}\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] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function 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}\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 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}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\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}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\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 if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\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 return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\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}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\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}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\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 chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\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 configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\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 each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\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 const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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 each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\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 isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const 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};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\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 style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\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 return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\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}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\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, {\n childList: true,\n subtree: true\n });\n return observer;\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, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\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}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\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 listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].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 const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\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 removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\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 getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction 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 if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\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}\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 function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\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 function 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 function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\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 function 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 spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\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 function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\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\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 function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function 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;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\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 if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function 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 function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\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 return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\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 if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\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 {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\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 init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\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 parse(raw, index) {\n return raw;\n }\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: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n 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 min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\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 getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\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 this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\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 this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\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 if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\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 afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\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 = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\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 if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\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;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\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 if (isHorizontal) {\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 const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\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 _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 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 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 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 if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\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 afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\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 this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\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 this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\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 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] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\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 for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\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 const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n 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 getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\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 getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\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 return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\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 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 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 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 tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\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 const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\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 this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\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 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 if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\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 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 if (isHorizontal) {\n x = pixel;\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 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 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 let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\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 }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\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: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\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 return align;\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 let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\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 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 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 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 return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\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 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 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 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 ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n 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 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 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 ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\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 if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\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 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 const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\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: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\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 if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\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 _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass 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 isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\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}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\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 = [\n scope\n ].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}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass 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 this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].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 each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\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 return this.plugins;\n }\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}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\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 const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\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 = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\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 return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\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 function 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 const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n 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}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\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, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\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 scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction 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}\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}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\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}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || 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}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n 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}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\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), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\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], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\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}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\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 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 _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 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 const scopes = new Set();\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 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 chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\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 const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\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}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\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)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.8\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\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 function 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}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\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}\nclass Chart {\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 static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\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('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\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 this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\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 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 instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n 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 this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\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 if (scaleOpts) {\n items = items.concat(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 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 if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\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 scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\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 _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 buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\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 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 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 this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\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 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 if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\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 this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\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 if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\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 _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\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).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\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({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\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 this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\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 return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\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 if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\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 meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\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 return [];\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 if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\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 return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\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 if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\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 _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\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 delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\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 const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\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 getActiveElements() {\n return this._active || [];\n }\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 return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\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 if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\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 if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\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 if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\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}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\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 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 * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\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 */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\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 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$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\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 // 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 // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\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 // 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 // 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 // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\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 const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\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}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\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 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 if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\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 static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\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 nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\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 tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\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 if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\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 ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\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}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\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 return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function 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 let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\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 prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function 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 const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _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 function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\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}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\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}\nclass LineElement extends Element {\n static id = 'line';\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 static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\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 set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\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 interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\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 pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\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 * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\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 draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\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 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\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\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 return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\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}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\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}\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 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}\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 return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\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}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\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 ctx.save();\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 ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\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\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\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 if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\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 if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function 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 function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\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 function 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 const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\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 if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\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 widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\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 if (xAlign === 'right' && x - width - caret < 0) {\n return true;\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 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 if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\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}\nfunction alignY(size, yAlign, paddingAndSize) {\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 function 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 let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\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 return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\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}\nconst defaultCallbacks = {\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 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 return '';\n },\n afterTitle: noop,\n beforeBody: noop,\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 let label = tooltipItem.dataset.label || '';\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 afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\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 this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\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 return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\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 let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\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 bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\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 let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\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 for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\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 this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\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 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 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 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 this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\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 this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\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 if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\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 if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\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;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\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 if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\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 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 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 ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\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 const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\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 const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\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 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 ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\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 ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\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 _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\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 opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\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 if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\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}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\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 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: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\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 additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\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}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\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 parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\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 this.min = min;\n this.max = max;\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 labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\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 getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\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 if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\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 if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\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 niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\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 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({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== 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({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\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}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\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 if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\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$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\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 getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\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 getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\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}\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 function 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({\n value,\n major: isMajor(value),\n significand\n });\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({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\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 setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\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 ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\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}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\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 return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\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 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 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 scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\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}\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 visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\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 for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\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}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\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}\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}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\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 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}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\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 renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\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 determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\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 getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\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 getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\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 getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\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 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 drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\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 drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.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 ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\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 if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function 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 return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function 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 function 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 function 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 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 function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\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 if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\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 if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\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 this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\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 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 if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\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 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 if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\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 _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\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 return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\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 getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\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 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 _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 return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\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 return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\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 const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\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 buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\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 if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n 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 if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\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 _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\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\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n\n constructor(context, reference) {\n super();\n this.context = context || ((date) => constructFrom(reference, date));\n }\n\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, this.context));\n }\n}\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(date, constructor) {\n const date_ = isConstructor(constructor)\n ? new constructor(0)\n : constructFrom(constructor, 0);\n date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n date_.setHours(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n return date_;\n}\n\nfunction isConstructor(constructor) {\n return (\n typeof constructor === \"function\" &&\n constructor.prototype?.constructor === constructor\n );\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { ValueSetter } from \"./Setter.js\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.js\";\n\nimport { numericPatterns } from \"./constants.js\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n if (!amount) return _date;\n\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const date_ = toDate(date, options?.in);\n const currentDay = date_.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day, options) {\n const date_ = toDate(date, options?.in);\n const currentDay = getISODay(date_, options);\n const diff = day - currentDay;\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date, options) {\n const day = toDate(date, options?.in).getDay();\n return day === 0 ? 7 : day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { Parser } from \"../Parser.js\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.js\";\n\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const date_ = toDate(date, options?.in);\n const diff = getWeek(date_, options) - week;\n date_.setDate(date_.getDate() - diff * 7);\n return toDate(date_, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week, options) {\n const _date = toDate(date, options?.in);\n const diff = getISOWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (!formatStr)\n return dateStr ? invalidDate() : toDate(referenceDate, options?.in);\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will try to use the context or\n // the reference date and fallback to the system time zone.\n const setters = [new DateTimezoneSetter(options?.in, referenceDate)];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return invalidDate();\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return invalidDate();\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return invalidDate();\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate, options?.in);\n\n if (isNaN(+date)) return invalidDate();\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return invalidDate();\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return date;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const invalidDate = () => constructFrom(options?.in, NaN);\n\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(+date)) return invalidDate();\n\n const timestamp = +date;\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) return invalidDate();\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) return invalidDate();\n } else {\n const tmpDate = new Date(timestamp + time);\n const result = toDate(0, options?.in);\n result.setFullYear(\n tmpDate.getUTCFullYear(),\n tmpDate.getUTCMonth(),\n tmpDate.getUTCDate(),\n );\n result.setHours(\n tmpDate.getUTCHours(),\n tmpDate.getUTCMinutes(),\n tmpDate.getUTCSeconds(),\n tmpDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","export function getRoundingMethod(method) {\n return (number) => {\n const round = method ? Math[method] : Math.trunc;\n const result = round(number);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n };\n}\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\n\n/**\n * The {@link differenceInDays} function options.\n */\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n * //=> 92\n */\nexport function differenceInDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const sign = compareLocalAsc(laterDate_, earlierDate_);\n const difference = Math.abs(\n differenceInCalendarDays(laterDate_, earlierDate_),\n );\n\n laterDate_.setDate(laterDate_.getDate() - sign * difference);\n\n // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n const isLastDayNotFull = Number(\n compareLocalAsc(laterDate_, earlierDate_) === -sign,\n );\n\n const result = sign * (difference - isLastDayNotFull);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}\n\n// Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(laterDate, earlierDate) {\n const diff =\n laterDate.getFullYear() - earlierDate.getFullYear() ||\n laterDate.getMonth() - earlierDate.getMonth() ||\n laterDate.getDate() - earlierDate.getDate() ||\n laterDate.getHours() - earlierDate.getHours() ||\n laterDate.getMinutes() - earlierDate.getMinutes() ||\n laterDate.getSeconds() - earlierDate.getSeconds() ||\n laterDate.getMilliseconds() - earlierDate.getMilliseconds();\n\n if (diff < 0) return -1;\n if (diff > 0) return 1;\n\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport function compareAsc(dateLeft, dateRight) {\n const diff = +toDate(dateLeft) - +toDate(dateRight);\n\n if (diff < 0) return -1;\n else if (diff > 0) return 1;\n\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n}\n\n// Fallback for modularized imports:\nexport default compareAsc;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.js\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.js\";\n\n/**\n * The {@link differenceInMonths} function options.\n */\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport function differenceInMonths(laterDate, earlierDate, options) {\n const [laterDate_, workingLaterDate, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n laterDate,\n earlierDate,\n );\n\n const sign = compareAsc(workingLaterDate, earlierDate_);\n const difference = Math.abs(\n differenceInCalendarMonths(workingLaterDate, earlierDate_),\n );\n\n if (difference < 1) return 0;\n\n if (workingLaterDate.getMonth() === 1 && workingLaterDate.getDate() > 27)\n workingLaterDate.setDate(30);\n\n workingLaterDate.setMonth(workingLaterDate.getMonth() - sign * difference);\n\n let isLastMonthNotFull = compareAsc(workingLaterDate, earlierDate_) === -sign;\n\n if (\n isLastDayOfMonth(laterDate_) &&\n difference === 1 &&\n compareAsc(laterDate_, earlierDate_) === 1\n ) {\n isLastMonthNotFull = false;\n }\n\n const result = sign * (difference - +isLastMonthNotFull);\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInMonths;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { endOfDay } from \"./endOfDay.js\";\nimport { endOfMonth } from \"./endOfMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport function isLastDayOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n return +endOfDay(_date, options) === +endOfMonth(_date, options);\n}\n\n// Fallback for modularized imports:\nexport default isLastDayOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarYears } from \"./differenceInCalendarYears.js\";\n\n/**\n * The {@link differenceInYears} function options.\n */\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full years\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport function differenceInYears(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n // -1 if the left date is earlier than the right date\n // 2023-12-31 - 2024-01-01 = -1\n const sign = compareAsc(laterDate_, earlierDate_);\n\n // First calculate the difference in calendar years\n // 2024-01-01 - 2023-12-31 = 1 year\n const diff = Math.abs(differenceInCalendarYears(laterDate_, earlierDate_));\n\n // Now we need to calculate if the difference is full. To do that we set\n // both dates to the same year and check if the both date's month and day\n // form a full year.\n laterDate_.setFullYear(1584);\n earlierDate_.setFullYear(1584);\n\n // For it to be true, when the later date is indeed later than the earlier date\n // (2026-02-01 - 2023-12-10 = 3 years), the difference is full if\n // the normalized later date is also later than the normalized earlier date.\n // In our example, 1584-02-01 is earlier than 1584-12-10, so the difference\n // is partial, hence we need to subtract 1 from the difference 3 - 1 = 2.\n const partial = compareAsc(laterDate_, earlierDate_) === -sign;\n\n const result = sign * (diff - +partial);\n\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInYears;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * );\n * //=> 2\n */\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return laterDate_.getFullYear() - earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n _date.setFullYear(year + 1, 0, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n","/*!\n * chartjs-adapter-date-fns v3.0.0\n * https://www.chartjs.org\n * (c) 2022 chartjs-adapter-date-fns Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { toDate, parse, parseISO, isValid, format, addYears, addQuarters, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addMilliseconds, differenceInYears, differenceInQuarters, differenceInMonths, differenceInWeeks, differenceInDays, differenceInHours, differenceInMinutes, differenceInSeconds, differenceInMilliseconds, startOfYear, startOfQuarter, startOfMonth, startOfWeek, startOfDay, startOfHour, startOfMinute, startOfSecond, endOfYear, endOfQuarter, endOfMonth, endOfWeek, endOfDay, endOfHour, endOfMinute, endOfSecond } from 'date-fns';\n\nconst FORMATS = {\n datetime: 'MMM d, yyyy, h:mm:ss aaaa',\n millisecond: 'h:mm:ss.SSS aaaa',\n second: 'h:mm:ss aaaa',\n minute: 'h:mm aaaa',\n hour: 'ha',\n day: 'MMM d',\n week: 'PP',\n month: 'MMM yyyy',\n quarter: 'qqq - yyyy',\n year: 'yyyy'\n};\n\n_adapters._date.override({\n _id: 'date-fns', // DEBUG\n\n formats: function() {\n return FORMATS;\n },\n\n parse: function(value, fmt) {\n if (value === null || typeof value === 'undefined') {\n return null;\n }\n const type = typeof value;\n if (type === 'number' || value instanceof Date) {\n value = toDate(value);\n } else if (type === 'string') {\n if (typeof fmt === 'string') {\n value = parse(value, fmt, new Date(), this.options);\n } else {\n value = parseISO(value, this.options);\n }\n }\n return isValid(value) ? value.getTime() : null;\n },\n\n format: function(time, fmt) {\n return format(time, fmt, this.options);\n },\n\n add: function(time, amount, unit) {\n switch (unit) {\n case 'millisecond': return addMilliseconds(time, amount);\n case 'second': return addSeconds(time, amount);\n case 'minute': return addMinutes(time, amount);\n case 'hour': return addHours(time, amount);\n case 'day': return addDays(time, amount);\n case 'week': return addWeeks(time, amount);\n case 'month': return addMonths(time, amount);\n case 'quarter': return addQuarters(time, amount);\n case 'year': return addYears(time, amount);\n default: return time;\n }\n },\n\n diff: function(max, min, unit) {\n switch (unit) {\n case 'millisecond': return differenceInMilliseconds(max, min);\n case 'second': return differenceInSeconds(max, min);\n case 'minute': return differenceInMinutes(max, min);\n case 'hour': return differenceInHours(max, min);\n case 'day': return differenceInDays(max, min);\n case 'week': return differenceInWeeks(max, min);\n case 'month': return differenceInMonths(max, min);\n case 'quarter': return differenceInQuarters(max, min);\n case 'year': return differenceInYears(max, min);\n default: return 0;\n }\n },\n\n startOf: function(time, unit, weekday) {\n switch (unit) {\n case 'second': return startOfSecond(time);\n case 'minute': return startOfMinute(time);\n case 'hour': return startOfHour(time);\n case 'day': return startOfDay(time);\n case 'week': return startOfWeek(time);\n case 'isoWeek': return startOfWeek(time, {weekStartsOn: +weekday});\n case 'month': return startOfMonth(time);\n case 'quarter': return startOfQuarter(time);\n case 'year': return startOfYear(time);\n default: return time;\n }\n },\n\n endOf: function(time, unit) {\n switch (unit) {\n case 'second': return endOfSecond(time);\n case 'minute': return endOfMinute(time);\n case 'hour': return endOfHour(time);\n case 'day': return endOfDay(time);\n case 'week': return endOfWeek(time);\n case 'month': return endOfMonth(time);\n case 'quarter': return endOfQuarter(time);\n case 'year': return endOfYear(time);\n default: return time;\n }\n }\n});\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n const _date = toDate(date, options?.in);\n _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addQuarters} function options.\n */\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n * @param options - An object with options\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=; Mon Dec 01 2014 00:00:00\n */\nexport function addQuarters(date, amount, options) {\n return addMonths(date, amount * 3, options);\n}\n\n// Fallback for modularized imports:\nexport default addQuarters;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(laterDate, earlierDate, options) {\n const diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { millisecondsInMinute } from \"./constants.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInMinutes} function options.\n */\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of minutes\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport function differenceInMinutes(dateLeft, dateRight, options) {\n const diff =\n differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMinutes;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link differenceInHours} function options.\n */\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport function differenceInHours(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n const diff = (+laterDate_ - +earlierDate_) / millisecondsInHour;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInHours;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInDays } from \"./differenceInDays.js\";\n\n/**\n * The {@link differenceInWeeks} function options.\n */\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full weeks\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * @example\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 6)\n * )\n * //=> 8\n */\nexport function differenceInWeeks(laterDate, earlierDate, options) {\n const diff = differenceInDays(laterDate, earlierDate, options) / 7;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInWeeks;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMonths } from \"./differenceInMonths.js\";\n\n/**\n * The {@link differenceInQuarters} function options.\n */\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of full quarters\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport function differenceInQuarters(laterDate, earlierDate, options) {\n const diff = differenceInMonths(laterDate, earlierDate, options) / 3;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInQuarters;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfSecond} function options.\n */\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a second\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport function startOfSecond(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setMilliseconds(0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfSecond;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMinute} function options.\n */\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a minute\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport function startOfMinute(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setSeconds(0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfMinute;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfHour} function options.\n */\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an hour\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport function startOfHour(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMinutes(0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfHour;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date, options) {\n const _date = toDate(date, options?.in);\n const currentMonth = _date.getMonth();\n const month = currentMonth - (currentMonth % 3);\n _date.setMonth(month, 1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfSecond} function options.\n */\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone if no `in` option is specified.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a second\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport function endOfSecond(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMilliseconds(999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfSecond;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMinute} function options.\n */\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone or the provided context.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a minute\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport function endOfMinute(date, options) {\n const _date = toDate(date, options?.in);\n _date.setSeconds(59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMinute;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfHour} function options.\n */\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of an hour\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport function endOfHour(date, options) {\n const _date = toDate(date, options?.in);\n _date.setMinutes(59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfHour;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n _date.setDate(_date.getDate() + diff);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfQuarter} function options.\n */\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfQuarter(date, options) {\n const _date = toDate(date, options?.in);\n const currentMonth = _date.getMonth();\n const month = currentMonth - (currentMonth % 3) + 3;\n _date.setMonth(month, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfQuarter;\n","import Chartkick from \"chartkick\"\nimport Chart from \"chart.js/auto\"\nimport \"chartjs-adapter-date-fns\"\n\nChartkick.use(Chart)\n","export var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n}\nexport var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport var formats = {\n Z: function (date) { return date.toISOString(); },\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: function (date) { return pad(date.getHours()); },\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: function (date) { return pad(date.getSeconds()); },\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: function (date) { return pad(date.getFullYear(), 4); },\n d: function (date) { return pad(date.getDate()); },\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n i: function (date) { return pad(date.getMinutes()); },\n j: function (date) { return date.getDate(); },\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: function (date) { return pad(date.getMonth() + 1); },\n n: function (date) { return date.getMonth() + 1; },\n s: function (date) { return date.getSeconds(); },\n u: function (date) { return date.getTime(); },\n w: function (date) { return date.getDay(); },\n y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n};\nexport var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr)) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token = format[i];\n var isBackSlash = token === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n};\nexport function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n \\n \" + weekdays.join(\"\") + \"\\n \\n \";\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; });\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: __assign({}, English),\n default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","module.exports = require('../dist/pure');\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n}\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\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// 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};","/**\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 */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"9.9.0\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","/** Internal global with common properties and Sentry extensions */\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\nexport { GLOBAL_OBJ };\n//# sourceMappingURL=worldwide.js.map\n","import { SDK_VERSION } from './utils-hoist/version.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\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 **/\nfunction getMainCarrier() {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\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 */\nfunction getGlobalSingleton(\n name,\n creator,\n obj = GLOBAL_OBJ,\n) {\n const __SENTRY__ = (obj.__SENTRY__ = obj.__SENTRY__ || {});\n const carrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n // Note: We do not want to set `carrier.version` here, as this may be called before any `init` is called, e.g. for the default scopes\n return carrier[name] || (carrier[name] = creator());\n}\n\nexport { getGlobalSingleton, getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\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 */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getGlobalSingleton } from '../carrier.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** A Sentry Logger instance. */\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 */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\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] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const 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 logger[name] = (...args) => {\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 ;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nconst logger = getGlobalSingleton('logger', makeLogger);\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './utils-hoist/logger.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n const integrationsByName = {};\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.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\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;\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n } else {\n integrations = defaultIntegrations;\n }\n\n return filterDuplicates(integrations);\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 */\nfunction setupIntegrations(client, integrations) {\n const 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 */\nfunction afterSetupIntegrations(client, integrations) {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration?.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nfunction setupIntegration(client, integration, integrationIndex) {\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 && typeof integration.setupOnce === 'function') {\n integration.setupOnce();\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 (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) ;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) ;\n\n const processor = Object.assign((event, hint) => 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 scope's client. */\nfunction addIntegration(integration) {\n const client = getClient();\n\n if (!client) {\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/**\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 */\nfunction defineIntegration(fn) {\n return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\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 */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object WebAssembly.Exception]':\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, className) {\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 */\nfunction isErrorEvent(wat) {\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 */\nfunction isDOMError(wat) {\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 */\nfunction isDOMException(wat) {\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 */\nfunction isString(wat) {\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 */\nfunction isParameterizedString(wat) {\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 */\nfunction isPrimitive(wat) {\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 */\nfunction isPlainObject(wat) {\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 */\nfunction isEvent(wat) {\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 */\nfunction isElement(wat) {\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 */\nfunction isRegExp(wat) {\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 */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(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 */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in 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 */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\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 */\nfunction isVueViewModel(wat) {\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 ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\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 */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n if (!elem) {\n return '';\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 ;\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 '';\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, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n\n if (!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) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\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 = keyAttrs?.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (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 const className = elem.className;\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (const k of allowedAttrs) {\n const attr = elem.getAttribute(k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\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` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time 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 */\nfunction getComponentName(elem) {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem ;\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) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n\nexport { getComponentName, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","import { isString, isRegExp, isVueViewModel } from './is.js';\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 */\nfunction truncate(str, max = 0) {\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 */\nfunction snipLine(line, colno) {\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 */\nfunction safeJoin(input, delimiter) {\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 */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\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 */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isPrimitive, isElement } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * If the method on the passed object is not a function, the wrapper will not be applied.\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, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n // explicitly casting to unknown because we don't know the type of the method initially at all\n const original = source[name] ;\n\n if (typeof original !== 'function') {\n return;\n }\n\n const wrapped = replacementFactory(original) ;\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 try {\n source[name] = wrapped;\n } catch {\n DEBUG_BUILD && logger.log(`Failed to replace method \"${name}\" in object`, source);\n }\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 */\nfunction addNonEnumerableProperty(obj, name, value) {\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 */\nfunction markFunctionWrapped(wrapped, original) {\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 */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\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 argument itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(value)\n\n {\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\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) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[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 */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n const firstKey = keys[0];\n\n if (!firstKey) {\n return '[object has no keys]';\n }\n\n if (firstKey.length >= maxLength) {\n return truncate(firstKey, 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 */\nfunction dropUndefinedKeys(inputValue) {\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();\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(inputValue, memoizationMap) {\n // Early return for primitive values\n if (inputValue === null || typeof inputValue !== 'object') {\n return inputValue;\n }\n\n // Check memo map first for all object types\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n // handle arrays\n if (Array.isArray(inputValue)) {\n const returnValue = [];\n // Store mapping to handle circular references\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach(value => {\n returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n });\n\n return returnValue ;\n }\n\n if (isPojo(inputValue)) {\n const returnValue = {};\n // Store mapping to handle circular references\n memoizationMap.set(inputValue, returnValue);\n\n const keys = Object.keys(inputValue);\n\n keys.forEach(key => {\n const val = inputValue[key];\n if (val !== undefined) {\n returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n }\n });\n\n return returnValue ;\n }\n\n // For other object types, return as is\n return inputValue;\n}\n\nfunction isPojo(input) {\n // Plain objects have Object as constructor or no constructor\n const constructor = (input ).constructor;\n return constructor === Object || constructor === undefined;\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 */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n // this will catch both undefined and null\n case wat == undefined:\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 ).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\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify };\n//# sourceMappingURL=object.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction getCrypto() {\n const gbl = GLOBAL_OBJ ;\n return gbl.crypto || gbl.msCrypto;\n}\n\n/**\n * UUID4 generator\n * @param crypto Object that provides the crypto API.\n * @returns string Generated UUID4.\n */\nfunction uuid4(crypto = getCrypto()) {\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto?.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception?.values?.[0];\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 */\nfunction getEventDescription(event) {\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 || '';\n }\n return eventId || '';\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 */\nfunction addExceptionTypeValue(event, value, type) {\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 */\nfunction addExceptionMechanism(event, newMechanism) {\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?.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 */\n\nfunction _parseInt(input) {\n return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\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 */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\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) => snipLine(line, 0));\n\n // We guard here to ensure this is not larger than the existing number of lines\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => 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 */\nfunction checkOrSetAlreadyCaught(exception) {\n if (isAlreadyCaptured(exception)) {\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 , '__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\nfunction isAlreadyCaptured(exception) {\n try {\n return (exception ).__sentry_captured__;\n } catch {} // eslint-disable-line no-empty\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","/**\n * Get a list of possible event messages from a Sentry event.\n */\nfunction getPossibleEventMessages(event) {\n const possibleMessages = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n try {\n // @ts-expect-error Try catching to save bundle size\n const lastException = event.exception.values[event.exception.values.length - 1];\n if (lastException?.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n } catch (e) {\n // ignore errors here\n }\n\n return possibleMessages;\n}\n\nexport { getPossibleEventMessages };\n//# sourceMappingURL=eventUtils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getEventDescription } from '../utils-hoist/misc.js';\nimport { stringMatchesSomePattern } from '../utils-hoist/string.js';\nimport { getPossibleEventMessages } from '../utils/eventUtils.js';\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.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n /^Can't find variable: gmo$/, // Error from Google Search App https://issuetracker.google.com/issues/396043331\n /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/, // Random error that happens but not actionable or noticeable to end-users.\n 'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\\d+, MethodName:simulateEvent, ParamCount:\\d+$/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n /^Java exception was raised during method invocation$/, // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065)\n];\n\n/** Options for the EventFilters integration */\n\nconst INTEGRATION_NAME = 'EventFilters';\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n * - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n * - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n * - Top level Sentry.init option (`ignoreTransactions`)\n * - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n */\nconst eventFiltersIntegration = defineIntegration((options = {}) => {\n let mergedOptions;\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n const clientOptions = client.getOptions();\n mergedOptions = _mergeOptions(options, clientOptions);\n },\n processEvent(event, _hint, client) {\n if (!mergedOptions) {\n const clientOptions = client.getOptions();\n mergedOptions = _mergeOptions(options, clientOptions);\n }\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n});\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n * - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n * - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n * - Top level Sentry.init option (`ignoreTransactions`)\n * - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n *\n * @deprecated this integration was renamed and will be removed in a future major version.\n * Use `eventFiltersIntegration` instead.\n */\nconst inboundFiltersIntegration = defineIntegration(((options = {}) => {\n return {\n ...eventFiltersIntegration(options),\n name: 'InboundFilters',\n };\n}) );\n\nfunction _mergeOptions(\n internalOptions = {},\n clientOptions = {},\n) {\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: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event, options) {\n if (!event.type) {\n // Filter errors\n\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 (_isUselessError(event)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n event,\n )}`,\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 } else if (event.type === 'transaction') {\n // Filter transactions\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 }\n return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n if (!ignoreErrors?.length) {\n return false;\n }\n\n return getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n if (!ignoreTransactions?.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n if (!denyUrls?.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n if (!allowUrls?.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _isSentryError(event) {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event) {\n try {\n // If there are linked exceptions or exception aggregates we only want to match against the top frame of the \"root\" (the main exception)\n // The root always comes last in linked exceptions\n const rootException = [...(event.exception?.values ?? [])]\n .reverse()\n .find(value => value.mechanism?.parent_id === undefined && value.stacktrace?.frames?.length);\n const frames = rootException?.stacktrace?.frames;\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\nfunction _isUselessError(event) {\n // We only want to consider events for dropping that actually have recorded exception values.\n if (!event.exception?.values?.length) {\n return false;\n }\n\n return (\n // No top-level message\n !event.message &&\n // There are no exception values that have a stacktrace, a non-generic-Error type or value\n !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n );\n}\n\nexport { eventFiltersIntegration, inboundFiltersIntegration };\n//# sourceMappingURL=eventFilters.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\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 */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nfunction dateTimestampInSeconds() {\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() {\n const { performance } = GLOBAL_OBJ ;\n if (!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 */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Cached result of getBrowserTimeOrigin.\n */\nlet cachedTimeOrigin;\n\n/**\n * Gets the time origin and the mode used to determine it.\n */\nfunction getBrowserTimeOrigin() {\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 ;\n if (!performance?.now) {\n return [undefined, 'none'];\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?.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 return [performance.timeOrigin, 'timeOrigin'];\n } else {\n return [navigationStart, 'navigationStart'];\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n return [dateNow, 'dateNow'];\n}\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 */\nfunction browserPerformanceTimeOrigin() {\n if (!cachedTimeOrigin) {\n cachedTimeOrigin = getBrowserTimeOrigin();\n }\n\n return cachedTimeOrigin[0];\n}\n\nexport { browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport './utils-hoist/syncpromise.js';\n\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 */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const 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 Client.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\nfunction updateSession(session, context = {}) {\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 */\nfunction closeSession(session, status) {\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) {\n return {\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\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Generate a random, valid trace ID.\n */\nfunction generateTraceId() {\n return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nfunction generateSpanId() {\n return uuid4().substring(16);\n}\n\nexport { generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nfunction merge(initialObj, mergeObj, levels = 2) {\n // If the merge value is not an object, or we have no merge levels left,\n // we just set the value to the merge value\n if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n return mergeObj;\n }\n\n // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n if (initialObj && Object.keys(mergeObj).length === 0) {\n return initialObj;\n }\n\n // Clone object\n const output = { ...initialObj };\n\n // Merge values into output, resursively\n for (const key in mergeObj) {\n if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n output[key] = merge(output[key], mergeObj[key], levels - 1);\n }\n }\n\n return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n if (span) {\n addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope )[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { updateSession } from './session.js';\nimport { isPlainObject } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { generateTraceId } from './utils-hoist/propagationContext.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\nimport { merge } from './utils/merge.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * A context to be used for capturing an event.\n * This can either be a Scope, or a partial ScopeContext,\n * or a callback that receives the current scope and returns a new scope to use.\n */\n\n/**\n * Holds additional event information.\n */\nclass Scope {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called during event processing. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\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\n /** Fingerprint */\n\n /** Severity */\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n\n /** Session */\n\n /** The client on this scope */\n\n /** Contains the last event id of a captured event. */\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 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 = {\n traceId: generateTraceId(),\n sampleRand: Math.random(),\n };\n }\n\n /**\n * Clone all data from this scope into a new scope.\n */\n clone() {\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 if (this._contexts.flags) {\n // We need to copy the `values` array so insertions on a cloned scope\n // won't affect the original array.\n newScope._contexts.flags = {\n values: [...this._contexts.flags.values],\n };\n }\n\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * Update the client assigned to this scope.\n * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n * as well as manually created scopes.\n */\n setClient(client) {\n this._client = client;\n }\n\n /**\n * Set the ID of the last captured error event.\n * This is generally only captured on the isolation scope.\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n\n /**\n * Get the client assigned to this scope.\n */\n getClient() {\n return this._client ;\n }\n\n /**\n * Get the ID of the last captured error event.\n * This is generally only available on the isolation scope.\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * Add an event processor that will be called before an event is sent.\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * Set the user for this scope.\n * Set to `null` to unset the user.\n */\n setUser(user) {\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 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 * Get the user from this scope.\n */\n getUser() {\n return this._user;\n }\n\n /**\n * Set an object that will be merged into existing tags on the scope,\n * and will be sent as tags data with the event.\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Set a single tag that will be sent as tags data with the event.\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Set an object that will be merged into existing extra on the scope,\n * and will be sent as extra data with the event.\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Set a single key:value extra entry that will be sent as extra data with the event.\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the fingerprint on the scope to send with the events.\n * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the level on the scope for future events.\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope so that the name of e.g. taken server route or\n * the page location is attached to future events.\n *\n * IMPORTANT: Calling this function does NOT change the name of the currently active\n * root span. If you want to change the name of the active root span, use\n * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n *\n * By default, the SDK updates the scope's transaction name automatically on sensible\n * occasions, such as a page navigation or when handling a new request on the server.\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets context data with the given name.\n * Data passed as context will be normalized. You can also pass `null` to unset the context.\n * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n */\n setContext(key, context) {\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 * Set the session for the scope.\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Get the session from the scope.\n */\n getSession() {\n return this._session;\n }\n\n /**\n * Updates the scope with provided data. Can work in three variations:\n * - plain object containing updatable attributes\n * - Scope instance that'll extract the attributes from\n * - callback function that'll receive the current scope as an argument and allow for modifications\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const scopeInstance =\n scopeToMerge instanceof Scope\n ? scopeToMerge.getScopeData()\n : isPlainObject(scopeToMerge)\n ? (captureContext )\n : undefined;\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n return this;\n }\n\n /**\n * Clears the current scope and resets its properties.\n * Note: The client will not be cleared.\n */\n clear() {\n // client is not cleared here on purpose!\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._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this.setPropagationContext({ traceId: generateTraceId(), sampleRand: Math.random() });\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Adds a breadcrumb to the scope.\n * By default, the last 100 breadcrumbs are kept.\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\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 this._breadcrumbs.push(mergedBreadcrumb);\n if (this._breadcrumbs.length > maxCrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n this._client?.recordDroppedEvent('buffer_overflow', 'log_item');\n }\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * Get the last breadcrumb of the scope.\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * Clear all breadcrumbs from the scope.\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Add an attachment to the scope.\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * Clear all attachments from the scope.\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /**\n * Get the data of this scope, which should be applied to an event during processing.\n */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry.\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n return this;\n }\n\n /**\n * Add propagation context to the scope, used for distributed tracing\n */\n setPropagationContext(context) {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * Get propagation context from the scope, used for distributed tracing\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * Capture an exception for this scope.\n *\n * @returns {string} The id of the captured Sentry event.\n */\n captureException(exception, hint) {\n const eventId = 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 * @returns {string} The id of the captured message.\n */\n captureMessage(message, level, hint) {\n const eventId = 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 * Capture a Sentry event for this scope.\n *\n * @returns {string} The id of the captured event.\n */\n captureEvent(event, hint) {\n const eventId = 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 _notifyScopeListeners() {\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\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { isThenable } from '../utils-hoist/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n // scope stack for domains or the process\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\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 this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1] ;\n }\n\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack() ;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier, getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport './utils-hoist/time.js';\nimport './utils-hoist/syncpromise.js';\nimport { generateSpanId } from './utils-hoist/propagationContext.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n return getGlobalSingleton('globalScope', () => new Scope());\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\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n ...rest\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\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\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.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\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n ...rest\n\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\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 [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentScope().getClient();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nfunction getTraceContextFromScope(scope) {\n const propagationContext = scope.getPropagationContext();\n\n const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n\n const traceContext = {\n trace_id: traceId,\n span_id: propagationSpanId || generateSpanId(),\n };\n\n if (parentSpanId) {\n traceContext.parent_span_id = parentSpanId;\n }\n\n return traceContext;\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, getTraceContextFromScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils-hoist/object.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\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 Function.prototype.toString = function ( ...args) {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() ) && 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}) ;\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 */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\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 */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; 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 + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\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 */\nfunction stackParserFromStackParserOptions(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 */\nfunction stripSentryFramesAndReverse(stack) {\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(getLastStackFrame(localStack).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(getLastStackFrame(localStack).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 scope itself, making it:\n //\n // Sentry.captureException()\n // scope.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(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\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 * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n\n if (exception) {\n const frames = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { defineIntegration } from '../integration.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getFramesFromEvent } from '../utils-hoist/stacktrace.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent;\n\n return {\n name: INTEGRATION_NAME,\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}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\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, previousEvent) {\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, previousEvent) {\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, previousEvent) {\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 ;\n previousFrames = previousFrames ;\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameA = previousFrames[i];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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, previousEvent) {\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 ;\n previousFingerprint = previousFingerprint ;\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) {\n return event.exception?.values && event.exception.values[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\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 */\nfunction supportsDOMError() {\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 */\nfunction supportsDOMException() {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n return 'history' in WINDOW && !!WINDOW.history;\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\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/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n return func && /^function\\s+\\w+\\(\\)\\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 */\nfunction supportsNativeFetch() {\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 (isNativeFunction(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 ) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow?.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFunction(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 */\nfunction supportsReportingObserver() {\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 */\nfunction supportsReferrerPolicy() {\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' ,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsHistory, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\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 */\nfunction dsnToString(dsn, withPassword = false) {\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 */\nfunction dsnFromString(str) {\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() ;\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 , publicKey });\n}\n\nfunction dsnFromComponents(components) {\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) {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents = ['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 */\nfunction makeDsn(from) {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\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 normalized 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\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\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 */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\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,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n memo = memoBuilder(),\n) {\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 ['boolean', 'string'].includes(typeof value) ||\n (typeof value === 'number' && Number.isFinite(value))\n ) {\n return value ;\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 )['__sentry_skip_normalization__']) {\n return value ;\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 )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\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 ;\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) ? [] : {}) ;\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 );\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/* 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,\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,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._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' && !Number.isFinite(value)) {\n return `[${value}]`;\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) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype?.constructor ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\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) {\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 */\nfunction normalizeUrlToBase(url, basePath) {\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\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n const inner = new WeakSet();\n function memoize(obj) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n\n function unmemoize(obj) {\n inner.delete(obj);\n }\n return [memoize, unmemoize];\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { getSentryCarrier } from '../carrier.js';\nimport { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\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 */\nfunction createEnvelope(headers, items = []) {\n return [headers, items] ;\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 */\nfunction addItemToEnvelope(envelope, newItem) {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] ;\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 */\nfunction forEachEnvelopeItem(\n envelope,\n callback,\n) {\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 */\nfunction envelopeContainsItemType(envelope, types) {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input) {\n const carrier = getSentryCarrier(GLOBAL_OBJ);\n return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input) {\n const carrier = getSentryCarrier(GLOBAL_OBJ);\n return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope) {\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 = JSON.stringify(envHeaders);\n\n function append(next) {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next) : 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;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` 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) {\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\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(env) {\n let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n function readBinary(length) {\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() {\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(decodeUTF8(readBinary(i))) ;\n }\n\n const envelopeHeader = readJson();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items = [];\n\n while (buffer.length) {\n const itemHeader = readJson();\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 envelope item for a single span\n */\nfunction createSpanEnvelopeItem(spanJson) {\n const spanHeaders = {\n type: 'span',\n };\n\n return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(attachment) {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : 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 = {\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 profile_chunk: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n raw_security: 'security',\n otel_log: 'log_item',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n if (!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 */\nfunction createEventEnvelopeHeaders(\n event,\n sdkInfo,\n tunnel,\n dsn,\n) {\n const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n return {\n event_id: event.event_id ,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dynamicSamplingContext,\n }),\n };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\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 */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Attributes that holds the sample rate that was locally applied to a span.\n * If this attribute is not defined, it means that the span inherited a sampling decision.\n *\n * NOTE: Is only defined on root spans.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\n/**\n * A span link attribute to mark the link as a special span link.\n *\n * Known values:\n * - `previous_trace`: The span links to the frontend root span of the previous trace.\n * - `next_trace`: The span links to the frontend root span of the next trace. (Not set by the SDK)\n *\n * Other values may be set as appropriate.\n * @see https://develop.sentry.dev/sdk/telemetry/traces/span-links/#link-types\n */\nconst SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = 'sentry.link.type';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE };\n//# sourceMappingURL=semanticAttributes.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst 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 */\nconst 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 */\nfunction baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader,\n) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\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((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 ;\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 */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext,\n) {\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(\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 * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n baggageHeader,\n) {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\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 return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\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) {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\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) {\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\nexport { MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, objectToBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\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 */\nfunction getCapturedScopesOnSpan(span) {\n return {\n scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan };\n//# sourceMappingURL=utils.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { getCapturedScopesOnSpan } from '../tracing/utils.js';\nimport { consoleSandbox } from '../utils-hoist/logger.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { generateSentryTraceHeader } from '../utils-hoist/tracing.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin, links } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n links,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n // If the span is remote, we use a random/virtual span as span_id to the trace context,\n // and the remote span as parent_span_id\n const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n const scope = getCapturedScopesOnSpan(span).scope;\n\n const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Converts the span links array to a flattened version to be sent within an envelope.\n *\n * If the links array is empty, it returns `undefined` so the empty value can be dropped before it's sent.\n */\nfunction convertSpanLinksForEnvelope(links) {\n if (links && links.length > 0) {\n return links.map(({ context: { spanId, traceId, traceFlags, ...restContext }, attributes }) => ({\n span_id: spanId,\n trace_id: traceId,\n sampled: traceFlags === TRACE_FLAG_SAMPLED,\n attributes,\n ...restContext,\n }));\n } else {\n return undefined;\n }\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\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) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\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.\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status, links } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n links: convertSpanLinksForEnvelope(links),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n // This should not actually happen in reality, but we need to handle it for type safety.\n return {\n span_id,\n trace_id,\n start_timestamp: 0,\n data: {},\n };\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span ;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\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 spanIsSentrySpan(span) {\n return typeof (span ).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 */\nfunction spanIsSampled(span) {\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 return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n const resultSet = new Set();\n\n function addSpanChildren(span) {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n */\nfunction showSpanDropWarning() {\n if (!hasShownSpanDropWarning) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Returning null from `beforeSendSpan` is disallowed. To drop certain spans, configure the respective integrations directly.',\n );\n });\n hasShownSpanDropWarning = true;\n }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nfunction updateSpanName(span, name) {\n span.updateName(name);\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n });\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, convertSpanLinksForEnvelope, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, showSpanDropWarning, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateSpanName };\n//# sourceMappingURL=spanUtils.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\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 */\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { getRootSpan, spanToJSON, spanIsSampled } from '../utils/spanUtils.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span ;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) ;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nfunction getDynamicSamplingContextFromScope(client, scope) {\n const propagationContext = scope.getPropagationContext();\n return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\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 */\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const rootSpan = getRootSpan(span);\n const rootSpanJson = spanToJSON(rootSpan);\n const rootSpanAttributes = rootSpanJson.data;\n const traceState = rootSpan.spanContext().traceState;\n\n // The span sample rate that was locally applied to the root span should also always be applied to the DSC, even if the DSC is frozen.\n // This is so that the downstream traces/services can use parentSampleRate in their `tracesSampler` to make consistent sampling decisions across the entire trace.\n const rootSpanSampleRate =\n traceState?.get('sentry.sample_rate') ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n function applyLocalSampleRateToDsc(dsc) {\n if (typeof rootSpanSampleRate === 'number' || typeof rootSpanSampleRate === 'string') {\n dsc.sample_rate = `${rootSpanSampleRate}`;\n }\n return dsc;\n }\n\n // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return applyLocalSampleRateToDsc(frozenDsc);\n }\n\n // For OpenTelemetry, we freeze the DSC on the trace state\n const traceStateDsc = traceState?.get('sentry.dsc');\n\n // If the span has a DSC, we want it to take precedence\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n if (dscOnTraceState) {\n return applyLocalSampleRateToDsc(dscOnTraceState);\n }\n\n // Else, we generate it from the span\n const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\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 source = rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n const name = rootSpanJson.description;\n if (source !== 'url' && name) {\n dsc.transaction = name;\n }\n\n // How can we even land here with hasSpansEnabled() returning false?\n // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n // So we end up with an active span that is not sampled (neither positively nor negatively)\n if (hasSpansEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n dsc.sample_rand =\n // In OTEL we store the sample rand on the trace state because we cannot access scopes for NonRecordingSpans\n // The Sentry OTEL SpanSampler takes care of writing the sample rand on the root span\n traceState?.get('sentry.sample_rand') ??\n // On all other platforms we can actually get the scopes from a root span (we use this as a fallback)\n getCapturedScopesOnSpan(rootSpan).scope?.getPropagationContext().sampleRand.toString();\n }\n\n applyLocalSampleRateToDsc(dsc);\n\n client.emit('createDsc', dsc, rootSpan);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if span recording is currently enabled.\n *\n * Spans are recorded when at least one of `tracesSampleRate` and `tracesSampler`\n * is defined in the SDK config. This function does not make any assumption about\n * sampling decisions, it only checks if the SDK is configured to record spans.\n *\n * Important: This function only determines if span recording is enabled. Trace\n * continuation and propagation is separately controlled and not covered by this function.\n * If this function returns `false`, traces can still be propagated (which is what\n * we refer to by \"Tracing without Performance\")\n * @see https://develop.sentry.dev/sdk/telemetry/traces/tracing-without-performance/\n *\n * @param maybeOptions An SDK options object to be passed to this function.\n * If this option is not provided, the function will use the current client's options.\n */\nfunction hasSpansEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const options = maybeOptions || getClient()?.getOptions();\n return (\n !!options &&\n // Note: This check is `!= null`, meaning \"nullish\". `0` is not \"nullish\", `undefined` and `null` are. (This comment was brought to you by 15 minutes of questioning life)\n (options.tracesSampleRate != null || !!options.tracesSampler)\n );\n}\n\n/**\n * @see JSDoc of `hasSpansEnabled`\n * @deprecated Use `hasSpansEnabled` instead, which is a more accurately named version of this function.\n * This function will be removed in the next major version of the SDK.\n */\n// TODO(v10): Remove this export\nconst hasTracingEnabled = hasSpansEnabled;\n\nexport { hasSpansEnabled, hasTracingEnabled };\n//# sourceMappingURL=hasSpansEnabled.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n\n constructor(\n message,\n logLevel = 'warn',\n ) {\n super(message);this.message = message;\n this.logLevel = logLevel;\n }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\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 */\nfunction resolvedSyncPromise(value) {\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 */\nfunction rejectedSyncPromise(reason) {\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 {\n\n constructor(executor) {\n this._state = States.PENDING;\n this._handlers = [];\n\n this._runExecutor(executor);\n }\n\n /** @inheritdoc */\n then(\n onfulfilled,\n onrejected,\n ) {\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 );\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 /** @inheritdoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** @inheritdoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\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 );\n });\n });\n }\n\n /** Excute the resolve/reject handlers. */\n _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 handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n }\n\n /** Run the executor for the SyncPromise. */\n _runExecutor(executor) {\n const setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(resolve, reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n const resolve = (value) => {\n setResult(States.RESOLVED, value);\n };\n\n const reject = (reason) => {\n setResult(States.REJECTED, reason);\n };\n\n try {\n executor(resolve, reject);\n } catch (e) {\n reject(e);\n }\n }\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { SyncPromise } from './utils-hoist/syncpromise.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((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) ;\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\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nlet parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameDebugIds;\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n if (!debugIdMap) {\n return {};\n }\n\n const debugIdKeys = Object.keys(debugIdMap);\n\n // If the count of registered globals hasn't changed since the last call, we\n // can just return the cached result.\n if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) {\n return cachedFilenameDebugIds;\n }\n\n lastKeysCount = debugIdKeys.length;\n\n // Build a map of filename -> debug_id.\n cachedFilenameDebugIds = debugIdKeys.reduce((acc, stackKey) => {\n if (!parsedStackResults) {\n parsedStackResults = {};\n }\n\n const result = parsedStackResults[stackKey];\n\n if (result) {\n acc[result[0]] = result[1];\n } else {\n const parsedStack = stackParser(stackKey);\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const filename = stackFrame?.filename;\n const debugId = debugIdMap[stackKey];\n\n if (filename && debugId) {\n acc[filename] = debugId;\n parsedStackResults[stackKey] = [filename, debugId];\n break;\n }\n }\n }\n\n return acc;\n }, {});\n\n return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n stackParser,\n resource_paths,\n) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n if (!filenameDebugIdMap) {\n return [];\n }\n\n const images = [];\n for (const path of resource_paths) {\n if (path && filenameDebugIdMap[path]) {\n images.push({\n type: 'sourcemap',\n code_file: path,\n debug_id: filenameDebugIdMap[path] ,\n });\n }\n }\n\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","import { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { merge } from './merge.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\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. */\nfunction mergeScopeData(data, mergeData) {\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 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\n data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\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 */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n data[prop] = merge(data[prop], mergeVal, 1);\n}\n\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n if (Object.keys(extra).length) {\n event.extra = { ...extra, ...event.extra };\n }\n\n if (Object.keys(tags).length) {\n event.tags = { ...tags, ...event.tags };\n }\n\n if (Object.keys(user).length) {\n event.user = { ...user, ...event.user };\n }\n\n if (Object.keys(contexts).length) {\n event.contexts = { ...contexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\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, fingerprint) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\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.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from '../utils-hoist/debug-ids.js';\nimport { uuid4, addExceptionMechanism } from '../utils-hoist/misc.js';\nimport { normalize } from '../utils-hoist/normalize.js';\nimport { truncate } from '../utils-hoist/string.js';\nimport { dateTimestampInSeconds } from '../utils-hoist/time.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\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 */\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 * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n isolationScope,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\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 if (client) {\n client.emit('applyFrameMetadata', event);\n }\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() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.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 const eventProcessors = [\n ...clientEventProcessors,\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 *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n // empty strings do not make sense for environment, release, and dist\n // so we handle them the same as if they were not provided\n event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n if (!event.release && release) {\n event.release = release;\n }\n\n if (!event.dist && dist) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception?.values?.[0];\n if (exception?.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request?.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n event.exception?.values?.forEach(exception => {\n exception.stacktrace?.frames?.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n event.exception?.values?.forEach(exception => {\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\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.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id,\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, integrationNames) {\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, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\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?.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 return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n // event.contexts.flags (FeatureFlagContext) stores context for our feature\n // flag integrations. It has a greater nesting depth than our other typed\n // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n // to skip this in case of conflicting, user-provided context.\n if (event.contexts?.flags && normalized.contexts) {\n normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n }\n\n return normalized;\n}\n\nfunction getFinalScope(scope, captureContext) {\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 */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\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(hint) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { createClientReportEnvelope } from './utils-hoist/clientreport.js';\nimport { makeDsn, dsnToString } from './utils-hoist/dsn.js';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils-hoist/envelope.js';\nimport { SentryError } from './utils-hoist/error.js';\nimport { isPrimitive, isParameterizedString, isThenable, isPlainObject } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils-hoist/misc.js';\nimport { resolvedSyncPromise, SyncPromise, rejectedSyncPromise } from './utils-hoist/syncpromise.js';\nimport { getPossibleEventMessages } from './utils/eventUtils.js';\nimport { merge } from './utils/merge.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { showSpanDropWarning, spanToTraceContext } from './utils/spanUtils.js';\nimport { convertTransactionEventToSpanJson, convertSpanJsonToTransactionEvent } from './utils/transactionEvent.js';\nimport { _getSpanForScope } from './utils/spanOnScope.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = 'Discarded session because of missing or non-string release';\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 Client._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 Client {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nclass Client {\n /** Options passed to the SDK. */\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n /** Array of set up integrations. */\n\n /** Number of calls being processed */\n\n /** Holds flushable */\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {\n this._options = options;\n this._integrations = {};\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(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\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 * Captures an exception event and sends it to Sentry.\n *\n * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureException(exception, hint, scope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * Captures a message event and sends it to Sentry.\n *\n * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureMessage(\n message,\n level,\n hint,\n currentScope,\n ) {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * Captures a manually created event and sends it to Sentry.\n *\n * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureEvent(event, hint, currentScope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n this._process(\n this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * Captures a session.\n */\n captureSession(session) {\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 * Create a cron monitor check in and send it to Sentry. This method is not available on all clients.\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 * @param scope An optional scope containing event metadata.\n * @returns A string representing the id of the check in.\n */\n\n /**\n * Get the current Dsn.\n */\n getDsn() {\n return this._dsn;\n }\n\n /**\n * Get the current options.\n */\n getOptions() {\n return this._options;\n }\n\n /**\n * Get the SDK metadata.\n * @see SdkMetadata\n */\n getSdkMetadata() {\n return this._options._metadata;\n }\n\n /**\n * Returns the transport that is used by the client.\n * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n */\n getTransport() {\n return this._transport;\n }\n\n /**\n * Wait for all events to be sent or the timeout to expire, whichever comes first.\n *\n * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n * cause the client to wait until all events are sent before resolving the promise.\n * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n * still events in the queue when the timeout is reached.\n */\n flush(timeout) {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\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 * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n *\n * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n * the client to wait until all events are sent before disabling itself.\n * @returns {Promise} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n * it doesn't.\n */\n close(timeout) {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /**\n * Get all installed event processors.\n */\n getEventProcessors() {\n return this._eventProcessors;\n }\n\n /**\n * Adds an event processor that applies to any event processed by this client.\n */\n addEventProcessor(eventProcessor) {\n this._eventProcessors.push(eventProcessor);\n }\n\n /**\n * Initialize this client.\n * Call this after the client was set on a scope.\n */\n init() {\n if (\n this._isEnabled() ||\n // Force integrations to be setup even if no DSN was set when we have\n // Spotlight enabled. This is particularly important for browser as we\n // don't support the `spotlight` option there and rely on the users\n // adding the `spotlightBrowserIntegration()` to their integrations which\n // wouldn't get initialized with the check below when there's no DSN set.\n this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n ) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n */\n getIntegrationByName(integrationName) {\n return this._integrations[integrationName] ;\n }\n\n /**\n * Add an integration to the client.\n * This can be used to e.g. lazy load integrations.\n * In most cases, this should not be necessary,\n * and you're better off just passing the integrations via `integrations: []` at initialization time.\n * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n */\n addIntegration(integration) {\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 * Send a fully prepared event to Sentry.\n */\n sendEvent(event, hint = {}) {\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(env, createAttachmentEnvelopeItem(attachment));\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 * Send a session or session aggregrates to Sentry.\n */\n sendSession(session) {\n // Backfill release and environment on session\n const { release: clientReleaseOption, environment: clientEnvironmentOption = DEFAULT_ENVIRONMENT } = this._options;\n if ('aggregates' in session) {\n const sessionAttrs = session.attrs || {};\n if (!sessionAttrs.release && !clientReleaseOption) {\n DEBUG_BUILD && logger.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n return;\n }\n sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n session.attrs = sessionAttrs;\n } else {\n if (!session.release && !clientReleaseOption) {\n DEBUG_BUILD && logger.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n return;\n }\n session.release = session.release || clientReleaseOption;\n session.environment = session.environment || clientEnvironmentOption;\n }\n\n this.emit('beforeSendSession', session);\n\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 * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n */\n recordDroppedEvent(reason, category, count = 1) {\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>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n this._outcomes[key] = (this._outcomes[key] || 0) + count;\n }\n }\n\n /* eslint-disable @typescript-eslint/unified-signatures */\n /**\n * Register a callback for whenever a span is started.\n * Receives the span as argument.\n * @returns {() => void} A function that, when executed, removes the registered callback.\n */\n\n /**\n * Register a hook on this client.\n */\n on(hook, callback) {\n const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n // @ts-expect-error We assume the types are correct\n hooks.push(callback);\n\n // This function returns a callback execution handler that, when invoked,\n // deregisters a callback. This is crucial for managing instances where callbacks\n // need to be unregistered to prevent self-referencing in callback closures,\n // ensuring proper garbage collection.\n return () => {\n // @ts-expect-error We assume the types are correct\n const cbIndex = hooks.indexOf(callback);\n if (cbIndex > -1) {\n hooks.splice(cbIndex, 1);\n }\n };\n }\n\n /** Fire a hook whenever a span starts. */\n\n /**\n * Emit a hook that was previously registered via `on()`.\n */\n emit(hook, ...rest) {\n const callbacks = this._hooks[hook];\n if (callbacks) {\n callbacks.forEach(callback => callback(...rest));\n }\n }\n\n /**\n * Send an envelope to Sentry.\n */\n sendEnvelope(envelope) {\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 envelope:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n _setupIntegrations() {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let crashed = event.level === 'fatal';\n let errored = false;\n const exceptions = 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?.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 _isClientDoneProcessing(timeout) {\n return new SyncPromise(resolve => {\n let ticked = 0;\n const tick = 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 _isEnabled() {\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 currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(\n event,\n hint,\n currentScope,\n isolationScope,\n ) {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations?.length) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n this.emit('postprocessEvent', evt, hint);\n\n evt.contexts = {\n trace: getTraceContextFromScope(currentScope),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\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 _captureEvent(\n event,\n hint = {},\n currentScope = getCurrentScope(),\n isolationScope = getIsolationScope(),\n ) {\n if (DEBUG_BUILD && isErrorEvent(event)) {\n logger.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || ''}\\``);\n }\n\n return this._processEvent(event, hint, currentScope, isolationScope).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 if (reason instanceof SentryError && reason.logLevel === 'log') {\n logger.log(reason.message);\n } else {\n logger.warn(reason);\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 currentScope 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 _processEvent(\n event,\n hint,\n currentScope,\n isolationScope,\n ) {\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 const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error');\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 = (eventType === 'replay_event' ? 'replay' : eventType) ;\n\n return this._prepareEvent(event, hint, currentScope, isolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(this, options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory);\n if (isTransaction) {\n const spans = event.spans || [];\n // the transaction itself counts as one span, plus all the child spans that are added\n const spanCount = 1 + spans.length;\n this.recordDroppedEvent('before_send', 'span', spanCount);\n }\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (isError && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n if (isTransaction) {\n const spanCountBefore = processedEvent.sdkProcessingMetadata?.spanCountBeforeProcessing || 0;\n const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n const droppedSpanCount = spanCountBefore - spanCountAfter;\n if (droppedSpanCount > 0) {\n this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n }\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 _process(promise) {\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 * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.entries(outcomes).map(([key, quantity]) => {\n const [reason, category] = key.split(':') ;\n return {\n reason,\n category,\n quantity,\n };\n });\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n DEBUG_BUILD && logger.log('Flushing outcomes...');\n\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 /**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n */\n\n}\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\nconst BaseClient = Client;\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,\n beforeSendLabel,\n) {\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 client,\n options,\n event,\n hint,\n) {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n let processedEvent = event;\n\n if (isErrorEvent(processedEvent) && beforeSend) {\n return beforeSend(processedEvent, hint);\n }\n\n if (isTransactionEvent(processedEvent)) {\n if (beforeSendSpan) {\n // process root span\n const processedRootSpanJson = beforeSendSpan(convertTransactionEventToSpanJson(processedEvent));\n if (!processedRootSpanJson) {\n showSpanDropWarning();\n } else {\n // update event with processed root span values\n processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n }\n\n // process child spans\n if (processedEvent.spans) {\n const processedSpans = [];\n for (const span of processedEvent.spans) {\n const processedSpan = beforeSendSpan(span);\n if (!processedSpan) {\n showSpanDropWarning();\n processedSpans.push(span);\n } else {\n processedSpans.push(processedSpan);\n }\n }\n processedEvent.spans = processedSpans;\n }\n }\n\n if (beforeSendTransaction) {\n if (processedEvent.spans) {\n // We store the # of spans before processing in SDK metadata,\n // so we can compare it afterwards to determine how many spans were dropped\n const spanCountBefore = processedEvent.spans.length;\n processedEvent.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n spanCountBeforeProcessing: spanCountBefore,\n };\n }\n return beforeSendTransaction(processedEvent , hint);\n }\n }\n\n return processedEvent;\n}\n\nfunction isErrorEvent(event) {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** Extract trace information from scope */\nfunction _getTraceInfoFromScope(\n client,\n scope,\n) {\n if (!scope) {\n return [undefined, undefined];\n }\n\n const span = _getSpanForScope(scope);\n const traceContext = span ? spanToTraceContext(span) : getTraceContextFromScope(scope);\n const dynamicSamplingContext = span\n ? getDynamicSamplingContextFromSpan(span)\n : getDynamicSamplingContextFromScope(client, scope);\n return [dynamicSamplingContext, traceContext];\n}\n\nexport { BaseClient, Client, _getTraceInfoFromScope };\n//# sourceMappingURL=client.js.map\n","import { makeDsn, dsnToString } from './utils-hoist/dsn.js';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\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) {\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, sdkInfo) {\n const params = {\n sentry_version: SENTRY_API_VERSION,\n };\n\n if (dsn.publicKey) {\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n params.sentry_key = dsn.publicKey;\n }\n\n if (sdkInfo) {\n params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n }\n\n return new URLSearchParams(params).toString();\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 */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\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] )}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { dsnToString } from './utils-hoist/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEventEnvelopeHeaders, createEnvelope, createSpanEnvelopeItem } from './utils-hoist/envelope.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { spanToJSON, showSpanDropWarning } from './utils/spanUtils.js';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n session,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const envelopeItem =\n 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n event,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n /*\n Note: Due to TS, event.type may be `replay_event`, theoretically.\n In practice, we never call `createEventEnvelope` with `replay_event` type,\n and we'd have to adjust a looot of types to make this work properly.\n We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n So the safe choice is to really guard against the replay_event type here.\n */\n const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n enhanceEventWithSdkInfo(event, metadata?.sdk);\n\n const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\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 event.sdkProcessingMetadata;\n\n const eventItem = [{ type: eventType }, event];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nfunction createSpanEnvelope(spans, client) {\n function dscHasRequiredProps(dsc) {\n return !!dsc.trace_id && !!dsc.public_key;\n }\n\n // For the moment we'll obtain the DSC from the first span in the array\n // This might need to be changed if we permit sending multiple spans from\n // different segments in one envelope\n const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n const dsn = client?.getDsn();\n const tunnel = client?.getOptions().tunnel;\n\n const headers = {\n sent_at: new Date().toISOString(),\n ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const beforeSendSpan = client?.getOptions().beforeSendSpan;\n const convertToSpanJSON = beforeSendSpan\n ? (span) => {\n const spanJson = spanToJSON(span);\n const processedSpan = beforeSendSpan(spanJson);\n\n if (!processedSpan) {\n showSpanDropWarning();\n return spanJson;\n }\n\n return processedSpan;\n }\n : spanToJSON;\n\n const items = [];\n for (const span of spans) {\n const spanJson = convertToSpanJSON(span);\n if (spanJson) {\n items.push(createSpanEnvelopeItem(spanJson));\n }\n }\n\n return createEnvelope(headers, items);\n}\n\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nfunction parseSampleRate(sampleRate) {\n if (typeof sampleRate === 'boolean') {\n return Number(sampleRate);\n }\n\n const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n return undefined;\n }\n\n return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID } from '../semanticAttributes.js';\nimport '../utils-hoist/debug-build.js';\nimport '../utils-hoist/logger.js';\nimport { dropUndefinedKeys } from '../utils-hoist/object.js';\nimport '../utils-hoist/time.js';\nimport '../utils-hoist/syncpromise.js';\n\n/**\n * Converts a transaction event to a span JSON object.\n */\nfunction convertTransactionEventToSpanJson(event) {\n const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n\n return dropUndefinedKeys({\n data: data ?? {},\n description: event.transaction,\n op,\n parent_span_id,\n span_id: span_id ?? '',\n start_timestamp: event.start_timestamp ?? 0,\n status,\n timestamp: event.timestamp,\n trace_id: trace_id ?? '',\n origin,\n profile_id: data?.[SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n exclusive_time: data?.[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n measurements: event.measurements,\n is_segment: true,\n });\n}\n\n/**\n * Converts a span JSON object to a transaction event.\n */\nfunction convertSpanJsonToTransactionEvent(span) {\n const event = {\n type: 'transaction',\n timestamp: span.timestamp,\n start_timestamp: span.start_timestamp,\n transaction: span.description,\n contexts: {\n trace: {\n trace_id: span.trace_id,\n span_id: span.span_id,\n parent_span_id: span.parent_span_id,\n op: span.op,\n status: span.status,\n origin: span.origin,\n data: {\n ...span.data,\n ...(span.profile_id && { [SEMANTIC_ATTRIBUTE_PROFILE_ID]: span.profile_id }),\n ...(span.exclusive_time && { [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: span.exclusive_time }),\n },\n },\n },\n measurements: span.measurements,\n };\n\n return dropUndefinedKeys(event);\n}\n\nexport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson };\n//# sourceMappingURL=transactionEvent.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\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 */\nfunction createClientReportEnvelope(\n discarded_events,\n dsn,\n timestamp,\n) {\n const clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","// By default, we want to infer the IP address, unless this is explicitly set to `null`\n// We do this after all other processing is done\n// If `ip_address` is explicitly set to `null` or a value, we leave it as is\n\n/**\n * @internal\n */\nfunction addAutoIpAddressToUser(objWithMaybeUser) {\n if (objWithMaybeUser.user?.ip_address === undefined) {\n objWithMaybeUser.user = {\n ...objWithMaybeUser.user,\n ip_address: '{{auto}}',\n };\n }\n}\n\n/**\n * @internal\n */\nfunction addAutoIpAddressToSession(session) {\n if ('aggregates' in session) {\n if (session.attrs?.['ip_address'] === undefined) {\n session.attrs = {\n ...session.attrs,\n ip_address: '{{auto}}',\n };\n }\n } else {\n if (session.ipAddress === undefined) {\n session.ipAddress = '{{auto}}';\n }\n }\n}\n\nexport { addAutoIpAddressToSession, addAutoIpAddressToUser };\n//# sourceMappingURL=ipAddress.js.map\n","import { isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, addExceptionMechanism, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage, resolvedSyncPromise } from '@sentry/core';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\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 = {\n type: extractType(ex),\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\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\n const client = getClient();\n const normalizeDepth = client?.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const 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 } ;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\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 skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\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\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex) {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception) {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nfunction extractType(ex) {\n const name = ex?.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\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) {\n const message = ex?.message;\n\n if (isWebAssemblyException(ex)) {\n // For Node 18, Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n return 'wasm exception';\n }\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\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 */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n const syntheticException = 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?.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 */\nfunction eventFromMessage(\n stackParser,\n message,\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const syntheticException = hint?.syntheticException || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n stackParser,\n exception,\n syntheticException,\n attachStacktrace,\n isUnhandledRejection,\n) {\n let event;\n\n if (isErrorEvent(exception ) && (exception ).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception ;\n return eventFromError(stackParser, errorEvent.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 )) {\n const domException = exception ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\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 ;\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 , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser,\n message,\n syntheticException,\n attachStacktrace,\n) {\n const 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 addExceptionMechanism(event, { synthetic: true });\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,\n { isUnhandledRejection },\n) {\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) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { getCurrentScope, getClient, withIsolationScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\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 */\nfunction captureException(exception, hint) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\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 */\nfunction captureMessage(message, captureContext) {\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 return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event 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 */\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, 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 */\nfunction setContext(name, context) {\n getIsolationScope().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 */\nfunction setExtras(extras) {\n getIsolationScope().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 */\nfunction setExtra(key, extra) {\n getIsolationScope().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 */\nfunction setTags(tags) {\n getIsolationScope().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 */\nfunction setTag(key, value) {\n getIsolationScope().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 */\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\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 */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\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 */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult;\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 e => {\n finishCheckIn('error');\n throw e;\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\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 */\nasync function flush(timeout) {\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 */\nasync function close(timeout) {\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 * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n const client = getClient();\n return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\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 */\nfunction startSession(context) {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\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?.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 return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\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\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const client = getClient();\n const session = isolationScope.getSession();\n if (session && client) {\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 */\nfunction captureSession(end = false) {\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\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\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 */\nfunction wrap(\n fn,\n options\n\n = {},\n) {\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 function isFunction(fn) {\n return typeof fn === 'function';\n }\n\n if (!isFunction(fn)) {\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 if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\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 // Wrap the function itself\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function ( ...args) {\n try {\n // Also wrap arguments that are themselves functions\n const wrappedArguments = args.map(arg => 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\n // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\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 {\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n }\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n } catch {\n // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n // to save some bytes we simply try-catch this\n }\n\n return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { Client, getSDKSource, applySdkMetadata, addAutoIpAddressToUser, addAutoIpAddressToSession } from '@sentry/core';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/core Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends Client {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const opts = {\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...options,\n };\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n super(opts);\n\n if (opts.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n\n if (this._options.sendDefaultPii) {\n this.on('postprocessEvent', addAutoIpAddressToUser);\n this.on('beforeSendSession', addAutoIpAddressToSession);\n }\n }\n\n /**\n * @inheritDoc\n */\n eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n eventFromMessage(\n message,\n level = 'info',\n hint,\n ) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(\n event,\n hint,\n currentScope,\n isolationScope,\n ) {\n event.platform = event.platform || 'javascript';\n\n return super._prepareEvent(event, hint, currentScope, isolationScope);\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","import { SDK_VERSION } from '../utils-hoist/version.js';\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 */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\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\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","/*\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\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\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 */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).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 */\nfunction resetInstrumentationHandlers() {\n Object.keys(handlers).forEach(key => {\n handlers[key ] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n if (!instrumented[type]) {\n instrumented[type] = true;\n try {\n instrumentFn();\n } catch (e) {\n DEBUG_BUILD && logger.error(`Error while instrumenting ${type}`, e);\n }\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\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\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ\n\n;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\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 */\nfunction addClickKeypressInstrumentationHandler(handler) {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\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) => {\n const globalObject = WINDOW ;\n const proto = globalObject[target]?.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto?.hasOwnProperty?.('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = (this.__sentry_instrumentation_handlers__ =\n this.__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 `addEventListeners` 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) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = this.__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 this.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListeners` 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) {\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 )._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, target) {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!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,\n globalListener = false,\n) {\n return (event) => {\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 = { 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) {\n try {\n return event.target ;\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\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst 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 */\nfunction addXhrInstrumentationHandler(handler) {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n if (!(WINDOW ).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.open = new Proxy(xhrproto.open, {\n apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your XHR call did not\n // have a stack trace. If you are using HttpClient integration,\n // this is the expected behavior, as we are using this virtual error to capture\n // the location of your XHR call, and group your HttpClient events accordingly.\n const virtualError = new Error();\n\n const startTimestamp = timestampInSeconds() * 1000;\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(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : undefined;\n const url = parseUrl(xhrOpenArgArray[1]);\n\n if (!method || !url) {\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n }\n\n xhrOpenThisArg[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 xhrOpenThisArg.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (xhrOpenThisArg.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhrOpenThisArg.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData = {\n endTimestamp: timestampInSeconds() * 1000,\n startTimestamp,\n xhr: xhrOpenThisArg,\n virtualError,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === 'function') {\n xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n onreadystatechangeHandler();\n return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n },\n });\n } else {\n xhrOpenThisArg.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 xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n apply(\n originalSetRequestHeader,\n setRequestHeaderThisArg,\n setRequestHeaderArgArray,\n ) {\n const [header, value] = setRequestHeaderArgArray;\n\n const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n },\n });\n\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.send = new Proxy(xhrproto.send, {\n apply(originalSend, sendThisArg, sendArgArray) {\n const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(sendThisArg, sendArgArray);\n }\n\n if (sendArgArray[0] !== undefined) {\n sentryXhrData.body = sendArgArray[0];\n }\n\n const handlerData = {\n startTimestamp: timestampInSeconds() * 1000,\n xhr: sendThisArg,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(sendThisArg, sendArgArray);\n },\n });\n}\n\nfunction parseUrl(url) {\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 ).toString();\n } catch {} // eslint-disable-line no-empty\n\n return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, supportsHistory, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\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 */\nfunction addHistoryInstrumentationHandler(handler) {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\n/**\n * Exported just for testing\n */\nfunction instrumentHistory() {\n // The `popstate` event may also be triggered on `pushState`, but it may not always reliably be emitted by the browser\n // Which is why we also monkey-patch methods below, in addition to this\n WINDOW.addEventListener('popstate', () => {\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\n if (from === to) {\n return;\n }\n\n const handlerData = { from, to } ;\n triggerHandlers('history', handlerData);\n });\n\n // Just guard against this not being available, in weird environments\n if (!supportsHistory()) {\n return;\n }\n\n function historyReplacementFunction(originalHistoryFunction) {\n return function ( ...args) {\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\n if (from === to) {\n return originalHistoryFunction.apply(this, args);\n }\n\n const handlerData = { 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\nexport { addHistoryInstrumentationHandler, instrumentHistory };\n//# sourceMappingURL=history.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\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 */\nfunction addConsoleInstrumentationHandler(handler) {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args) {\n const handlerData = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log?.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","import { isError } from '../is.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { timestampInSeconds } from '../time.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\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 */\nfunction addFetchInstrumentationHandler(\n handler,\n skipNativeFetchCheck,\n) {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nfunction addFetchEndInstrumentationHandler(handler) {\n const type = 'fetch-body-resolved';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n if (skipNativeFetchCheck && !supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n return function (...args) {\n // We capture the error right here and not in the Promise error callback because Safari (and probably other\n // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n const virtualError = new Error();\n\n const { method, url } = parseFetchArgs(args);\n const handlerData = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: timestampInSeconds() * 1000,\n // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n virtualError,\n };\n\n // if there is no callback, fetch is instrumented directly\n if (!onFetchResolved) {\n triggerHandlers('fetch', {\n ...handlerData,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n async (response) => {\n if (onFetchResolved) {\n onFetchResolved(response);\n } else {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n }\n\n return response;\n },\n (error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n error,\n });\n\n if (isError(error) && error.stack === undefined) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n error.stack = virtualError.stack;\n addNonEnumerableProperty(error, 'framesToPop', 1);\n }\n\n // We enhance the not-so-helpful \"Failed to fetch\" error messages with the host\n // Possible messages we handle here:\n // * \"Failed to fetch\" (chromium)\n // * \"Load failed\" (webkit)\n // * \"NetworkError when attempting to fetch resource.\" (firefox)\n if (\n error instanceof TypeError &&\n (error.message === 'Failed to fetch' ||\n error.message === 'Load failed' ||\n error.message === 'NetworkError when attempting to fetch resource.')\n ) {\n try {\n const url = new URL(handlerData.fetchData.url);\n error.message = `${error.message} (${url.host})`;\n } catch {\n // ignore it if errors happen here\n }\n }\n\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\nasync function resolveResponse(res, onFinishedResolving) {\n if (res?.body) {\n const body = res.body;\n const responseReader = body.getReader();\n\n // Define a maximum duration after which we just cancel\n const maxFetchDurationTimeout = setTimeout(\n () => {\n body.cancel().then(null, () => {\n // noop\n });\n },\n 90 * 1000, // 90s\n );\n\n let readingActive = true;\n while (readingActive) {\n let chunkTimeout;\n try {\n // abort reading if read op takes more than 5s\n chunkTimeout = setTimeout(() => {\n body.cancel().then(null, () => {\n // noop on error\n });\n }, 5000);\n\n // This .read() call will reject/throw when we abort due to timeouts through `body.cancel()`\n const { done } = await responseReader.read();\n\n clearTimeout(chunkTimeout);\n\n if (done) {\n onFinishedResolving();\n readingActive = false;\n }\n } catch (error) {\n readingActive = false;\n } finally {\n clearTimeout(chunkTimeout);\n }\n }\n\n clearTimeout(maxFetchDurationTimeout);\n\n responseReader.releaseLock();\n body.cancel().then(null, () => {\n // noop on error\n });\n }\n}\n\nfunction streamHandler(response) {\n // clone response for awaiting stream\n let clonedResponseForResolving;\n try {\n clonedResponseForResolving = response.clone();\n } catch {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n resolveResponse(clonedResponseForResolving, () => {\n triggerHandlers('fetch-body-resolved', {\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n });\n}\n\nfunction hasProp(obj, prop) {\n return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\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 */\nfunction parseFetchArgs(fetchArgs) {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs ;\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 ),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { consoleSandbox } from './utils-hoist/logger.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\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\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 */\nfunction addBreadcrumb(breadcrumb, hint) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = 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)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nfunction getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n // NOTE: undefined defaults to 'info' in Sentry\n if (statusCode === undefined) {\n return undefined;\n } else if (statusCode >= 400 && statusCode < 500) {\n return 'warning';\n } else if (statusCode >= 500) {\n return 'error';\n } else {\n return undefined;\n }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","/**\n * Parses string to a URL object\n *\n * @param url - The URL to parse\n * @returns The parsed URL object or undefined if the URL is invalid\n */\nfunction parseStringToURL(url, base) {\n try {\n // Use `canParse` to short-circuit the URL constructor if it's not a valid URL\n // This is faster than trying to construct the URL and catching the error\n // Node 20+, Chrome 120+, Firefox 115+, Safari 17+\n if ('canParse' in URL && !(URL ).canParse(url, base)) {\n return undefined;\n }\n\n return new URL(url, base);\n } catch {\n // empty body\n }\n\n return undefined;\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 href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\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 */\nfunction stripUrlQueryAndFragment(urlPath) {\n return (urlPath.split(/[?#]/, 1) )[0];\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n const { protocol, host, path } = url;\n\n const filteredHost =\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 return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getSanitizedUrlString, parseStringToURL, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","import { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getClient, safeJoin, severityLevelFromString, addBreadcrumb, logger, htmlTreeAsString, getComponentName, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl, getEventDescription } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\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 = {}) => {\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 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) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n return function addSentryBreadcrumb(event) {\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 creates 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,\n dom,\n) {\n return function _innerDomBreadcrumb(handlerData) {\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 ;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const 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) {\n return function _consoleBreadcrumb(handlerData) {\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) {\n return function _xhrBreadcrumb(handlerData) {\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 = {\n method,\n url,\n status_code,\n };\n\n const hint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const breadcrumb = {\n category: 'xhr',\n data,\n type: 'http',\n level: getBreadcrumbLogLevelFromHttpStatusCode(status_code),\n };\n\n client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n addBreadcrumb(breadcrumb, hint);\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n return function _fetchBreadcrumb(handlerData) {\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 ({\n method: handlerData.fetchData.method,\n url: handlerData.fetchData.url,\n });\n\n if (handlerData.error) {\n const data = handlerData.fetchData;\n const hint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n const breadcrumb = {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n } ;\n\n client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n addBreadcrumb(breadcrumb, hint);\n } else {\n const response = handlerData.response ;\n const data = {\n ...handlerData.fetchData,\n status_code: response?.status,\n };\n\n handlerData.fetchData.request_body_size;\n handlerData.fetchData.response_body_size;\n response?.status;\n\n const hint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n\n const breadcrumb = {\n category: 'fetch',\n data,\n type: 'http',\n level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code),\n };\n\n client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n addBreadcrumb(breadcrumb, hint);\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n return function _historyBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let from = handlerData.from;\n let to = 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?.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) {\n return !!event && !!(event ).target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\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 */\nfunction severityLevelFromString(level) {\n return (\n level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n ) ;\n}\n\nexport { severityLevelFromString };\n//# sourceMappingURL=severity.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\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 = 'BrowserApiErrors';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\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}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n return function ( ...args) {\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\nfunction _wrapRAF(original) {\n return function ( callback) {\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) {\n return function ( ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n fill(xhr, prop, function (original) {\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 BrowserApiErrors, 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) {\n const globalObject = WINDOW ;\n const proto = globalObject[target]?.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto?.hasOwnProperty?.('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original)\n\n {\n return function ( eventName, fn, options) {\n try {\n if (isEventListenerObject(fn)) {\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 {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n wrap(fn, {\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(proto, 'removeEventListener', function (originalRemoveEventListener)\n\n {\n return function ( eventName, fn, options) {\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 try {\n const originalEventHandler = (fn ).__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, fn, options);\n };\n });\n}\n\nfunction isEventListenerObject(obj) {\n return typeof (obj ).handleEvent === 'function';\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = 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 */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n // Note: The reason we are doing window.onerror instead of window.addEventListener('error')\n // is that we are using this handler in the Loader Script, to handle buffered errors consistently\n GLOBAL_OBJ.onerror = function (\n msg,\n url,\n line,\n column,\n error,\n ) {\n const handlerData = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler) {\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\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = 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 */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n handler,\n) {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n // Note: The reason we are doing window.onunhandledrejection instead of window.addEventListener('unhandledrejection')\n // is that we are using this handler in the Loader Script, to handle buffered rejections consistently\n GLOBAL_OBJ.onunhandledrejection = function (e) {\n const handlerData = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler) {\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\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, logger, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\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}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\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 = _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) {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e );\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) {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n\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 (error )) {\n return (error ).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 if ('detail' in (error ) && 'reason' in (error ).detail) {\n return (error ).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) {\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\nfunction _enhanceEventWithInitialFrame(\n event,\n url,\n line,\n column,\n) {\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 = column;\n const lineno = 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: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type) {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n const client = getClient();\n const options = client?.getOptions() || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n\nexport { globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation,\n parser,\n maxValueLimit = 250,\n key,\n limit,\n event,\n hint,\n) {\n if (!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 =\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 ,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error,\n key,\n prevExceptions,\n exception,\n exceptionId,\n) {\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, exceptionId) {\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,\n source,\n exceptionId,\n parentId,\n) {\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, maxValueLength) {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\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}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\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\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n filename,\n function: func === '' ? UNKNOWN_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// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\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 = line => {\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\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\nconst chromeStackLineParser = [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 = 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\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = 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\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n const parts = opera10Regex.exec(line) ;\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = 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\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst 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, filename) => {\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\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\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 */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { isNativeFunction, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n name,\n) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n\n let impl = WINDOW[name] ;\n\n // Fast path to avoid DOM I/O\n if (isNativeFunction(impl)) {\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n }\n\n const document = WINDOW.document;\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?.[name]) {\n impl = contentWindow[name] ;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n // Could not create sandbox iframe, just use window.xxx\n DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl) {\n return impl;\n }\n\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n cachedImplementations[name] = undefined;\n}\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 */\nfunction fetch(...rest) {\n return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n return getNativeImplementation('setTimeout')(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope } from '../utils-hoist/envelope.js';\nimport { SentryError } from '../utils-hoist/error.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { makePromiseBuffer } from '../utils-hoist/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils-hoist/ratelimit.js';\nimport { resolvedSyncPromise } from '../utils-hoist/syncpromise.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n options,\n makeRequest,\n buffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n) {\n let rateLimits = {};\n const flush = (timeout) => buffer.drain(timeout);\n\n function send(envelope) {\n const filteredEnvelopeItems = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n options.recordDroppedEvent('ratelimit_backoff', dataCategory);\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 const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason) => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type));\n });\n };\n\n const requestTask = () =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).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 return {\n send,\n flush,\n };\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { SentryError } from './error.js';\nimport { SyncPromise, resolvedSyncPromise, rejectedSyncPromise } from './syncpromise.js';\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 */\nfunction makePromiseBuffer(limit) {\n const buffer = [];\n\n function isReady() {\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\n * @returns Removed promise.\n */\n function remove(task) {\n return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\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; In previous versions this used to be `task:\n * PromiseLike`, 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) {\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) {\n return new SyncPromise((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\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst 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 */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\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 */\nfunction disabledUntil(limits, dataCategory) {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n limits,\n { statusCode, headers },\n now = Date.now(),\n) {\n const updatedRateLimits = {\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?.['x-sentry-rate-limits'];\n const retryAfterHeader = headers?.['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
,
,..\n * where each
is of the form\n * : : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n * 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\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport, rejectedSyncPromise } from '@sentry/core';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n options,\n nativeFetch = getNativeImplementation('fetch'),\n) {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request) {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'strict-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. when finishing 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 <= 60000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n if (!nativeFetch) {\n clearCachedImplementation('fetch');\n return rejectedSyncPromise('No fetch implementation available');\n }\n\n try {\n // TODO: This may need a `suppressTracing` call in the future when we switch the browser SDK to OTEL\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 clearCachedImplementation('fetch');\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, dedupeIntegration, consoleSandbox, supportsFetch, logger, getIntegrationsToSetup, stackParserFromStackParserOptions, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, getLocationHref } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(_options) {\n /**\n * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n * `getDefaultIntegrations` but with an adjusted set of integrations.\n */\n return [\n // TODO(v10): Replace with `eventFiltersIntegration` once we remove the deprecated `inboundFiltersIntegration`\n // eslint-disable-next-line deprecation/deprecation\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n browserSessionIntegration(),\n ];\n}\n\n/** Exported only for tests. */\nfunction applyDefaultOptions(optionsArg = {}) {\n const defaultOptions = {\n defaultIntegrations: getDefaultIntegrations(),\n release:\n typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n ? __SENTRY_RELEASE__\n : WINDOW.SENTRY_RELEASE?.id, // This supports the variable that sentry-webpack-plugin injects\n sendClientReports: true,\n };\n\n return {\n ...defaultOptions,\n ...dropTopLevelUndefinedKeys(optionsArg),\n };\n}\n\n/**\n * In contrast to the regular `dropUndefinedKeys` method,\n * this one does not deep-drop keys, but only on the top level.\n */\nfunction dropTopLevelUndefinedKeys(obj) {\n const mutatetedObj = {};\n\n for (const k of Object.getOwnPropertyNames(obj)) {\n const key = k ;\n if (obj[key] !== undefined) {\n mutatetedObj[key] = obj[key];\n }\n }\n\n return mutatetedObj;\n}\n\nfunction shouldShowBrowserExtensionError() {\n const windowWithMaybeExtension =\n typeof WINDOW.window !== 'undefined' && (WINDOW );\n if (!windowWithMaybeExtension) {\n // No need to show the error if we're not in a browser window environment (e.g. service workers)\n return false;\n }\n\n const extensionKey = windowWithMaybeExtension.chrome ? 'chrome' : 'browser';\n const extensionObject = windowWithMaybeExtension[extensionKey];\n\n const runtimeId = extensionObject?.runtime?.id;\n const href = getLocationHref() || '';\n\n const extensionProtocols = ['chrome-extension:', 'moz-extension:', 'ms-browser-extension:', 'safari-web-extension:'];\n\n // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n const isDedicatedExtensionPage =\n !!runtimeId && WINDOW === WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}//`));\n\n // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n // see: https://github.com/getsentry/sentry-javascript/issues/12668\n const isNWjs = typeof windowWithMaybeExtension.nw !== 'undefined';\n\n return !!runtimeId && !isDedicatedExtensionPage && !isNWjs;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\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 { 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 */\nfunction init(browserOptions = {}) {\n const options = applyDefaultOptions(browserOptions);\n\n if (!options.skipBrowserExtensionCheck && shouldShowBrowserExtensionError()) {\n if (DEBUG_BUILD) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(\n '[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n );\n });\n }\n return;\n }\n\n if (DEBUG_BUILD && !supportsFetch()) {\n logger.warn(\n 'No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill.',\n );\n }\n const clientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || makeFetchTransport,\n };\n\n return initAndBind(BrowserClient, clientOptions);\n}\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 */\nfunction showReportDialog(options = {}) {\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 const scope = getCurrentScope();\n const client = scope.getClient();\n const dsn = client?.getDsn();\n\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 if (!options.eventId) {\n const eventId = lastEventId();\n if (eventId) {\n options.eventId = eventId;\n }\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) => {\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 */\nfunction forceLoad() {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n callback();\n}\n\nexport { applyDefaultOptions, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog };\n//# sourceMappingURL=sdk.js.map\n","/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Application } from '@hotwired/stimulus'\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n\n// From previous index.js:\n// import { Application } from '@hotwired/stimulus'\n// import { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'\n\n// const application = Application.start()\n// const context = require.context('controllers', true, /_controller\\.js$/)\n// application.load(definitionsFromContext(context))\n\n// Enable Stimulus debug mode in development\n// application.debug = process.env.NODE_ENV === 'development'\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['alert']\n\n // Autodismiss all but .alert-error after 2.5 seconds\n connect () {\n if (this.autocloseAlert()) {\n setTimeout(() => this.close(), 2500)\n }\n }\n\n // Close alert when navigating to another page\n disconnect () {\n this.close()\n }\n\n close () {\n this.alertTarget.remove()\n }\n\n autocloseAlert () {\n if (this.alertTarget.classList.contains('alert-error')) {\n return false\n }\n\n return true\n }\n}\n","// Only shows log messages in development\n// Always pass in an array of arguments\nconst DevLog = (args = []) => {\n if (window.APP_ENV === 'development') {\n console.log(...args)\n }\n}\n\nexport default DevLog\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\n\nexport default class extends Controller {\n static values = {\n src: String\n }\n\n // Expects response to be in a turbo_frame so we need to find the\n // parentElement of the parentElement to appendChild, move as last node,\n // ie move it below the parentElement.\n connect () {\n DevLog(['Appending frame:', this.element.id])\n\n // Move below current parentElement\n this.element.parentElement.parentElement.appendChild(this.element)\n\n // Remove to prevent from re-connecting\n this.element.removeAttribute('data-controller')\n\n // Set src for Turbo to then fetch\n this.element.setAttribute('src', this.srcValue)\n\n // Cleanup - not really needed\n this.srcValue = ''\n }\n}\n","// Webpack 5 dynamic code splitting using dynamic import.\n// https://webpack.js.org/guides/code-splitting/\n\n// Singleton pattern with Promise to ensure only called once.\nlet chartkickPromise\n\nconst ChartkickLoader = () => {\n if (!chartkickPromise) {\n // ChartJS supports dark mode, so using it\n chartkickPromise = import('chartkick/chart.js')\n }\n return chartkickPromise\n}\n\nexport default ChartkickLoader\n","export const TOGGLE_CLASS = 'hidden'\nconst COLLAPSE_CLASS = 'show'\n\nexport const HasToggleClass = (el, toggleClass) =>\n el.classList.contains(toggleClass)\n\n// Both Collapse and Toggle controllers use this to toggle their CSS\n// classes (above). Collapse also updates aria-expanded for screen readers.\n// Should we do the same for regular/menu toggle_controller?\nexport const ToggleAll = ({ targets, collapse = false }) => {\n const toggleClass = collapse ? COLLAPSE_CLASS : TOGGLE_CLASS\n\n Array.from(targets).forEach((target) => {\n const el = target\n el.classList.toggle(toggleClass)\n\n if (collapse) {\n el.setAttribute('aria-expanded', HasToggleClass(el, toggleClass))\n }\n })\n}\n\nexport const ToggleHide = ({ target }) => {\n target.classList.add(TOGGLE_CLASS)\n}\n\nexport const ToggleShow = ({ target }) => {\n target.classList.remove(TOGGLE_CLASS)\n}\n","/* global localStorage, SecurityError */\n\nimport DevLog from './DevLog'\n\n// Added after seeing Chrome Mobile throw \"SecurityError. The operation is insecure.\" errors.\nexport const LocalStorageGetItem = (key) => {\n try {\n return localStorage.getItem(key)\n } catch (e) {\n if (e instanceof SecurityError) {\n DevLog([`SecurityError while getting ${key} from localStorage`, e])\n return null\n } else {\n throw e\n }\n }\n}\n\nexport const LocalStorageSetItem = (key, value) => {\n try {\n localStorage.setItem(key, value)\n } catch (e) {\n if (e instanceof SecurityError) {\n DevLog([`SecurityError while setting ${key} in localStorage`, e])\n } else {\n throw e\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\nimport { LocalStorageGetItem, LocalStorageSetItem } from './shared/LocalStorageUtils'\n\nconst COLORS = ['green', 'teal', 'blue', 'purple', 'pink', 'red']\nconst DARK_SCHEME = 'dark'\nconst LIGHT_SCHEME = 'light'\nconst SCHEME_KEY = 'appScheme'\nconst COLOR_KEY = 'appColor'\n\nexport default class extends Controller {\n // Read from the getter and write that value to the setter.\n initialize () {\n this.appScheme = this.currentScheme\n this.appColor = this.currentColor\n }\n\n // Unlike initialize, calling toggle persists the change in localStorage\n toggleScheme (e) {\n e.preventDefault()\n\n const scheme = this.currentScheme === DARK_SCHEME ? LIGHT_SCHEME : DARK_SCHEME\n\n this.appScheme = scheme\n this.storeScheme = scheme\n }\n\n toggleColor (e) {\n e.preventDefault()\n\n const colorIndex = COLORS.findIndex((k) => k === this.currentColor)\n const color = COLORS[colorIndex + 1] || COLORS[0]\n\n this.appColor = color\n this.storeColor = color\n }\n\n // Private\n\n /* eslint-disable accessor-pairs */\n set appScheme (val) {\n document.body.dataset.colorScheme = val\n }\n\n set appColor (val) {\n document.body.dataset.colorPrimary = val\n }\n\n set storeScheme (val) {\n LocalStorageSetItem(SCHEME_KEY, val)\n }\n\n set storeColor (val) {\n LocalStorageSetItem(COLOR_KEY, val)\n }\n\n // Check localStorage first for preference, then check OS.\n get currentScheme () {\n const fromLocal = LocalStorageGetItem(SCHEME_KEY)\n if (fromLocal) {\n DevLog(['Color scheme found in localStorage', fromLocal])\n return fromLocal\n }\n\n const darkFromOS = window.matchMedia('(prefers-color-scheme: dark)').matches\n if (darkFromOS) {\n DevLog(['Color scheme found at OS level as dark'])\n return DARK_SCHEME\n }\n\n // Default\n return LIGHT_SCHEME\n }\n\n // Check localStorage first for preference.\n get currentColor () {\n const fromLocal = LocalStorageGetItem(COLOR_KEY)\n if (fromLocal) {\n DevLog(['Color primary found in localStorage', fromLocal])\n return fromLocal\n }\n\n return COLORS[0]\n }\n /* eslint-enable accessor-pairs */\n}\n","// Instead of export default this exports named constants\n// to allow other classes to call openEditor, close\nimport AppendParams from './AppendParams'\n\nconst editor = () => document.getElementById('editor')\n\nconst alertMsg = () => document.getElementById('alert')\n\nconst editorIsOpen = () => editor() !== null\n\n// Checks if the editor is for the same item id and \"view\", edit or score\nconst editorAlreadyOpen = (el, view) =>\n editorIsOpen() &&\n editor().dataset.itemId === el.id &&\n editor().dataset.editorView === view\n\nexport const CloseEditor = (e) => {\n e.preventDefault()\n\n if (alertMsg() !== null) {\n alertMsg().remove()\n }\n\n if (editorIsOpen()) {\n editor().remove()\n }\n}\n\n// Uses a turbo-frame to fetch url\nexport const OpenEditor = (\n el,\n e,\n view,\n url = el.dataset.url,\n location = el.dataset.location\n) => {\n e.preventDefault()\n\n // Check if editor is already open to return early below, ie to close it.\n const alreadyOpen = editorAlreadyOpen(el, view)\n\n // Close all open editors, so only 1 is open at a time\n CloseEditor(e)\n\n // If it was already open, just return. In effect this is a toggle to close.\n if (alreadyOpen) {\n return\n }\n\n const editorUrl = AppendParams(url, `v=${view}`)\n const insertLocation = location || 'beforeend'\n // Setting `target=\"_top\" here allows all links inside the frame to navigate\n // the window. Any form inside this frame can add `data-turbo-frame=\"_self\"`.\n const editorFrame = `\n \n
\n
\n `\n el.insertAdjacentHTML(insertLocation, editorFrame)\n}\n\nexport const EditorItem = () => {\n const { itemId } = editor().dataset\n\n return document.getElementById(itemId)\n}\n","// Webpack 5 dynamic code splitting using dynamic import.\n// https://webpack.js.org/guides/code-splitting/\n\n// Singleton pattern with Promise to ensure only called once.\nlet flatpickrPromise\n\nconst FlatpickrLoader = () => {\n if (!flatpickrPromise) {\n flatpickrPromise = import('flatpickr')\n }\n return flatpickrPromise\n}\n\nexport default FlatpickrLoader\n","const AppendParams = (url, params) => {\n const connector = url.includes('?') ? '&' : '?'\n\n return `${url}${connector}${params}`\n}\n\nexport default AppendParams\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\nimport FlatpickrLoader from './loaders/FlatpickrLoader'\n\nexport default class extends Controller {\n // Initialize all with these CSS classes\n initialize () {\n DevLog(['Flatpickr loading'])\n FlatpickrLoader().then(() => {\n DevLog(['Flatpickr loaded'])\n flatpickrDate('.flatpickr_date')\n flatpickrTime('.flatpickr_time')\n })\n }\n\n // Find the child element to only clear it\n clearDate (e) {\n e.preventDefault()\n const el = this.element.querySelectorAll('.flatpickr_date')[0]\n flatpickrDate(el).clear()\n }\n\n clearTime (e) {\n e.preventDefault()\n const el = this.element.querySelectorAll('.flatpickr_time')[0]\n flatpickrTime(el).clear()\n }\n}\n\nconst flatpickrDate = (el) => {\n return window.flatpickr(el, {\n altInput: true,\n altFormat: 'M j, Y',\n dateFormat: 'm/d/Y'\n })\n}\n\nconst flatpickrTime = (el) => {\n return window.flatpickr(el, {\n enableTime: true,\n noCalendar: true,\n dateFormat: 'h:i K',\n allowInput: true\n })\n}\n","// Always shows log messages in console\n// Always pass in an array of arguments\nconst CatchError = (error) => {\n console.log('ERROR:', error.message)\n}\n\nexport default CatchError\n","// For external scripts that set methods on `window` like window.google, etc\n// Inspired by https://github.com/stripe/stripe-js/blob/34bec49bbd9d16c95a2e49e97d8ee8a8784f69ad/src/shared.ts#L68\n\nimport DevLog from '../shared/DevLog'\n\nconst scriptInjector = (url) => {\n const script = document.createElement('script')\n script.src = url\n document.head.appendChild(script)\n return script\n}\n\nconst DynamicScriptLoader = ({ url, method, name, cacheScript = true }) => {\n return new Promise((resolve, reject) => {\n DevLog(['ScriptLoader:', name])\n\n if (cacheScript && window[method]) {\n DevLog(['ScriptLoader:', name, 'found'])\n resolve(window[method])\n return\n }\n\n try {\n const script = scriptInjector(url)\n\n script.addEventListener('load', () => {\n if (window[method]) {\n DevLog(['ScriptLoader:', name, 'loaded'])\n resolve(window[method])\n } else {\n reject(new Error(`${name} is not available`))\n }\n })\n\n script.addEventListener('error', () => {\n reject(new Error(`${name} failed to load`))\n })\n } catch (error) {\n reject(error)\n }\n })\n}\n\nexport default DynamicScriptLoader\n","import DynamicScriptLoader from './DynamicScriptLoader'\n\n// Singleton pattern with Promise to ensure only called once.\nlet googleAnalyticsPromise\n\nconst GoogleAnalyticsLoader = () => {\n if (!googleAnalyticsPromise) {\n googleAnalyticsPromise = DynamicScriptLoader({\n url: 'https://www.google-analytics.com/analytics.js',\n method: 'ga',\n name: 'Google Analytics'\n })\n }\n return googleAnalyticsPromise\n}\n\nexport default GoogleAnalyticsLoader\n","import { Controller } from '@hotwired/stimulus'\nimport CatchError from './shared/CatchError'\nimport DevLog from './shared/DevLog'\nimport GoogleAnalyticsLoader from './loaders/GoogleAnalyticsLoader'\n\nexport default class extends Controller {\n static values = { id: String }\n\n connect () {\n DevLog(['Google Analytics loading', this.idValue])\n\n GoogleAnalyticsLoader()\n .then(() => {\n DevLog(['Google Analytics loaded'])\n window.ga('create', this.idValue, 'auto')\n window.ga('send', 'pageview')\n })\n .catch((error) => {\n CatchError(error)\n })\n }\n}\n","import DynamicScriptLoader from './DynamicScriptLoader'\n\n// Singleton pattern with Promise to ensure only called once.\nlet googleChartsPromise\n\nconst GoogleChartsLoader = () => {\n if (!googleChartsPromise) {\n googleChartsPromise = DynamicScriptLoader({\n url: 'https://www.gstatic.com/charts/loader.js',\n method: 'google',\n name: 'Google Charts'\n })\n }\n return googleChartsPromise\n}\n\nexport default GoogleChartsLoader\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\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\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\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\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Http://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 */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.loading) {\n // do nothing but wait\n return;\n }\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader. \" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n this.loading = true;\n this.setScript();\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","import { Loader } from '@googlemaps/js-api-loader'\n\n// Singleton pattern with Promise to ensure only called once.\nlet googleMapsPromise\n\nexport const GoogleMapsLoader = (apiKey) => {\n if (!googleMapsPromise) {\n const loader = new Loader({ apiKey, version: 'quarterly' })\n googleMapsPromise = loader.load()\n }\n return googleMapsPromise\n}\n\n// https://developers.google.com/maps/documentation/javascript/overview#js_api_loader_package\n// position = { lat: ..., lng: ... }\nexport const DrawMap = ({ mapElement, position, label }) => {\n const map = new window.google.maps.Map(mapElement, {\n center: position,\n zoom: 10\n })\n const info = new window.google.maps.InfoWindow({ content: label })\n const marker = new window.google.maps.Marker({ position, map, title: label })\n\n marker.addListener('click', () => {\n info.open(map, marker)\n })\n}\n","import DynamicScriptLoader from './DynamicScriptLoader'\n\n// Singleton pattern with Promise to ensure only called once.\nlet intercomPromise\n\nconst IntercomLoader = (appId) => {\n if (!intercomPromise) {\n intercomPromise = DynamicScriptLoader({\n url: `https://widget.intercom.io/widget/${appId}`,\n method: 'Intercom',\n name: 'Intercom'\n })\n }\n return intercomPromise\n}\n\nexport default IntercomLoader\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\nimport { GoogleMapsLoader, DrawMap } from './loaders/GoogleMapsLoader'\n\nexport default class extends Controller {\n static values = {\n apiKey: String,\n latitude: String,\n longitude: Number,\n label: String,\n zoom: Number\n }\n\n connect () {\n DevLog(['Google Maps loading'])\n\n GoogleMapsLoader(this.apiKeyValue).then(() => {\n const mapElement = this.element\n const lat = parseFloat(this.latitudeValue) || 0\n const lng = parseFloat(this.longitudeValue) || 0\n const position = { lat, lng }\n const label = this.labelValue || ''\n DevLog(['Google Maps drawing:', position, label])\n\n DrawMap({ mapElement, position, label })\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\nimport IntercomLoader from './loaders/IntercomLoader'\nimport * as Sentry from '@sentry/browser'\n\n// Future notes\n// If needed can hide and show the launcher by calling\n// Show: window.Intercom(\"update\", { hide_default_launcher: false });\n// Hide: window.Intercom(\"update\", { hide_default_launcher: true });\nexport default class extends Controller {\n static values = {\n appId: String,\n json: String\n }\n\n connect () {\n DevLog(['Intercom loading'])\n\n let jsonData\n try {\n jsonData = JSON.parse(this.jsonValue)\n DevLog(['Validated JSON', jsonData])\n } catch (error) {\n DevLog(['Invalid JSON format:', error])\n Sentry.captureMessage(`Invalid JSON format: ${error.message}`, 'error')\n return\n }\n\n IntercomLoader(this.appIdValue).then(() => {\n DevLog(['Intercom loaded', jsonData])\n window.Intercom('boot', jsonData)\n }).catch(error => {\n DevLog(['Error loading Intercom:', error])\n Sentry.captureMessage(`Error loading Intercom: ${error.message}`, 'error')\n })\n }\n}\n","/* global IntersectionObserver */\n\n// Use IntersectionObserver to lazy load images, background images, or Stimulus\n// controllers. Simplified from Lozad https://github.com/ApoorvSaxena/lozad.js\n// If IntersectionObserver isn't supported, load things immediately.\n// See comments below for usage/\nconst load = (element) => {\n // For images, elements\n // Use: data-src=\"...\"\n // To set: \n if (element.getAttribute('data-src')) {\n element.src = element.getAttribute('data-src')\n }\n\n // For background images, on
's or other elements\n // Use: data-background-image=\"...\"\n // To set: style=\"background-image: url('...')\"\n if (element.getAttribute('data-background-image')) {\n element.style.backgroundImage = `url('${element.getAttribute(\n 'data-background-image'\n )}')`\n }\n\n // For Stimulus JS controllers\n // Use: data-lazy-controller=\"...\"\n // To set: data-controller=\"...\"\n if (element.getAttribute('data-lazy-controller')) {\n element.dataset.controller = element.getAttribute('data-lazy-controller')\n }\n}\n\nconst browserSupports = (type) => window && window[type]\n\nconst markAsLoaded = (element) => element.setAttribute('data-loaded', true)\n\nconst isLoaded = (element) => element.getAttribute('data-loaded') === 'true'\n\nconst onIntersection = (load) => (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n observer.unobserve(entry.target)\n\n if (!isLoaded(entry.target)) {\n load(entry.target)\n markAsLoaded(entry.target)\n }\n }\n })\n}\n\nconst LazyObserver = (element) => {\n let observer\n if (browserSupports('IntersectionObserver')) {\n observer = new IntersectionObserver(onIntersection(load))\n }\n\n return {\n observe () {\n if (isLoaded(element)) {\n return\n }\n\n if (observer) {\n observer.observe(element)\n return\n }\n\n // If observer is not supported by browser, fallback to immediately load\n load(element)\n markAsLoaded(element)\n }\n }\n}\n\nexport default LazyObserver\n","// Generic helper controller to toggle (add or remove) the \"hidden\" class,\n// used for menu and popovers.\n\nimport { Controller } from '@hotwired/stimulus'\nimport {\n HasToggleClass,\n ToggleHide,\n ToggleShow,\n TOGGLE_CLASS\n} from './shared/Toggle'\n\n// TODO: work on transitions.\n// Ref: https://dev.to/mmccall10/tailwind-enter-leave-transition-effects-with-stimulus-js-5hl7\n// if (HasToggleClass(menu, TOGGLE_CLASS)) {\n// menu.classList.remove('opacity-0', 'translate-y-1')\n// menu.classList.add('opacity-100', 'translate-y-0')\n// } else {\n// menu.classList.remove('opacity-100', 'translate-y-0')\n// menu.classList.add('opacity-0', 'translate-y-1')\n// }\nexport default class extends Controller {\n static targets = ['target']\n\n // Call hide() for connect to prevent mobile menu from appearing during\n // Turbo preview of cached page. Alternative would be to have:\n // document.addEventListener(\"turbo:before-cache\", function() {...}\n // close the menu before page is cached. This seems simpler and works well.\n // Ref: https://turbo.hotwire.dev/reference/events\n connect (e) {\n this.hide(e)\n }\n\n toggle (e) {\n e.preventDefault()\n\n const menu = this.targetTarget\n menu.classList.toggle(TOGGLE_CLASS)\n\n const trigger = e.currentTarget\n this.setAriaExpanded(trigger, !HasToggleClass(menu, TOGGLE_CLASS))\n }\n\n hide (e) {\n const target = this.targetTarget\n ToggleHide({ target })\n\n // When called in from connect(e) above, e is undefined\n if (e && e.currentTarget) {\n const trigger = e.currentTarget\n this.setAriaExpanded(trigger, false)\n }\n }\n\n show (e) {\n const target = this.targetTarget\n const trigger = e.currentTarget\n\n ToggleShow({ target })\n this.setAriaExpanded(trigger, true)\n }\n\n setAriaExpanded (el, bool) {\n if (el.ariaExpanded) {\n el.setAttribute('aria-expanded', bool)\n }\n }\n\n // Called globally on clicks: click@window->menu-toggle#hideOnOutsideClick\n // to hide if anywhere outside of caller's target is clicked, ie\n // clicking outside the menu will close the menu.\n hideOnOutsideClick (e) {\n const outsideClick = this.element.contains(e.target) === false\n\n if (outsideClick) {\n this.hide(e)\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\nimport * as Sentry from '@sentry/browser'\n\nexport default class extends Controller {\n static values = {\n id: String\n }\n\n connect () {\n const frameId = this.idValue\n DevLog(['Reloading frame:', frameId])\n\n const frame = document.getElementById(frameId)\n\n if (frame) {\n // Use turbo frame's built in reload() function\n // https://github.com/hotwired/turbo/pull/206\n frame.reload()\n } else {\n DevLog(['Error: frame not found:', frameId])\n Sentry.captureMessage(`Frame with ID ${frameId} not found`, 'error')\n }\n\n // Cleanup\n this.element.remove()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport DevLog from './shared/DevLog'\n\nexport default class extends Controller {\n static values = {\n id: String\n }\n\n connect () {\n const frameId = this.idValue\n const turboFrame = document.getElementById(frameId)\n DevLog(['Removing frame:', frameId])\n\n // A little hacky just removing the id, but it works\n turboFrame.setAttribute('id', '')\n\n // Cleanup\n this.element.remove()\n }\n}\n","const SelectedOption = (el) => el.options[el.selectedIndex]\n\nexport default SelectedOption\n","import { Controller } from '@hotwired/stimulus'\nimport SelectedOption from './shared/SelectedOption'\n\nexport default class extends Controller {\n static targets = ['sportSelector', 'name', 'court', 'game', 'team']\n\n // Find selected option from